Ver la versión completa : Herramientas MT4 Mi primer aporte: Template EA en blanco
mrcl1001
03-02-2024 01:32,
Hola compañeros,
He estado mirando el hilo.... no tengo palabras, sois todos unos cracks !!!!, he estado viendo a ver en que puedo echar un cable pero es que no se ni por donde empezar, me dáis mil vueltas, asi que testearé algo (que también veo que lo tenéis muy trillado). A ver si se me ocurre algo que aportar :S
ealabspain
31-03-2024 20:43,
Saludos compañeros. He estado leyendo el hilo y respecto la primera estrategia (la segunda aun no la he mirado) si no mequivoco optimizasteis con spread de 2 puntos, la media de ganadoras era de 25 euros, como decias a lote, son de 2.5 pips. Bueno al no poder ver la lista de operaciones y suponiendo que haya operaciones de menos de 4 pips la mayoria. Esto es justamente lo que se llama sobreoptimizacion, en este caso no por los variables propias del ea sino por el spread usado y los pips de las operaciones ganadoras. Lo primero, un diferencial de 2 puntos no lo encontramos ni en cuenta real, puede que algunos momentos este en 2 puntos ( pero con la consiguiente comision añadida, que tb hay que contar ), por no menciona slippages, aumento del spread etc. Al optimizar con tan poco spread, ademas ocurre que es facil salir con pocos pips de beneficio, con lo cual cualquier estrategia parece rentable y os aseguro que asi no lo es.
Para optimizar hacerlo con al menos 10 puntos o 1 pip ( y aun asi seran pocos ) y que las operaciones de salida sean de al menos 4 pips. Tened tb en cuenta que las operaciones de pocos pips suelen ser menos rentables de lo que parece a largo plazo, porque a esos 4 pips hay que quitarle la comision y no es lo mismo quitarle la comision a 4 pips que a 10 por ejemplo. Me explico, que tus 4 pips pasen a ser 3 por la comision a que de 10 pase a 9, no es lo mismo, en una se te va la cuarta parte de lo ganado y en el otro solo una decima parte.
Otra cuestion, respecto al Money Managment, el Money Managment lo haces tu no el ea, lo que vosotros estais llamando Money Managment es simplemente interes compuesto. Money Managment es mucho mas que eso. Por ejemplo a la hora de implentar una estrategia a otra, estudiar a que lotaje poner cada una de ellas, estudiando su frecuencia de operaciones, correlacion entre ellas, maximo DD etc...
Hola amigos del foro!!!!!
.......
Saludos!!!!!
Hola MCSoft. Gracias por tu estima pero no creo que sea un maestro en estos temas.
No soy un experto en Backtesting, pero mi sentido comun me dice que has actuado muy inteligentemente, respecto a la sobreoptimización. Pienso que efectimanete los valores de optimización no se deben elegir los mejores, sino los mas estables auenque no sean los que dan la mayor ganancia en un periodo determinado.
Y sobre los resultados, a mi me parecen bastante buenos cuando usas MM. Buena tasa de aciertos, aceptable PF y buen DD. Pero como digo no soy experto en esto.
Gracias por tu aportación.
Saludos.
manusenda
04-04-2024 13:10,
Hola amigos del foro!!!!!
He desaparecido un tiempo por cuestiones de trabajo pero vuelvo a la carga!!!!!!.
Someto a vuestra consideración la ultima idea en la que he estado trabajando: Un EA basado en bollinger.
La operatoria es super sencilla, se basa en las bandas de bollinger, buscando aprovechar el rebote del precio entre las bandas, y se ayuda de una media exponencial para determinar la tendencia, a fin de no abrir operaciones en contra de la misma.
He logrado comprender la importancia del trailing stop y el break even para proteger las operaciones y tratar de sacarles "el jugo" al máximo.
Este es el EA:
28935
Estos son los resultados de la simulación entre 01/01/2004 y 07/07/2014 en TF 1H
(parametros por defecto, MM deshabilitado)
28934
Y esta es una simulación entre enero de 2010 y junio de 2014 TF 1H con MM habilitado para controlar el riesgo.
28933
Creo que los resultados son muy prometedores (por favor corrijanme si estoy equivocado)
En este corto tiempo tiempo he aprendido mucho sobre la terminología del trading, y la importancia de una estrategia integral, que incluya money management, como asi también todos los artilugios posibles para maximizar las ganancias cuando le pegamos a un movimiento a nuestro favor, y disminuir las perdidas cuando el universo se vuelve en nuestra contra ja ja, con esto me refiero a los stop loss, trailing stop, break even, etc.
Para la optimización de parametos me he guiado por articulos que he leido acerca de los peligros de la sobreoptimización. Por ello, realice primero las simulaciones sin trailing stop, break even ni money management, solo buscando parametros para los indicadores.
De los resultados, no elegí los mejores absolutos, sino que elegí un set de parametros que se encontraban dentro de un grupo de mayor densidad de resultados. Luego hice la siguiente prueba: Optimice el sistema para un año particular, y luego lo extendi a 10 años. Los resultados de beneficio disminuyeron, pero el sistema siguió dando beneficios, lo que demuestra que no se sobreoptimizo para un periodo particular.
Como siempre recurro a los maestros Hermo y Ciclo que me han ayudado mucho en este corto camino que estoy recorriendo desde que me uni al foro (sin desmerecer el aliento y la ayuda del resto), para que opinen sobre los resultados que he obtenido, y si podemos tomar este EA como nuestra nueva base para lograr un sistema que llegue a operar algún dia en real.
Espero vuestros comentarios.
Saludos!!!!!
Gran trabajo compañero, te curras muy bien las cosas, todo muy bien explicado, me gusta.
Por supuesto te mando reputación por todo el trabajo que estas haciendo y te ánimo a seguir con las ganas y el empeño que pones que es la base de todo.
Un Saludo! :)
Hola amigos del foro!!!!!
He desaparecido un tiempo por cuestiones de trabajo pero vuelvo a la carga!!!!!!.
Someto a vuestra consideración la ultima idea en la que he estado trabajando: Un EA basado en bollinger.
La operatoria es super sencilla, se basa en las bandas de bollinger, buscando aprovechar el rebote del precio entre las bandas, y se ayuda de una media exponencial para determinar la tendencia, a fin de no abrir operaciones en contra de la misma.
He logrado comprender la importancia del trailing stop y el break even para proteger las operaciones y tratar de sacarles "el jugo" al máximo.
Este es el EA:
28935
Estos son los resultados de la simulación entre 01/01/2004 y 07/07/2014 en TF 1H
(parametros por defecto, MM deshabilitado)
28934
Y esta es una simulación entre enero de 2010 y junio de 2014 TF 1H con MM habilitado para controlar el riesgo.
28933
Creo que los resultados son muy prometedores (por favor corrijanme si estoy equivocado)
En este corto tiempo tiempo he aprendido mucho sobre la terminología del trading, y la importancia de una estrategia integral, que incluya money management, como asi también todos los artilugios posibles para maximizar las ganancias cuando le pegamos a un movimiento a nuestro favor, y disminuir las perdidas cuando el universo se vuelve en nuestra contra ja ja, con esto me refiero a los stop loss, trailing stop, break even, etc.
Para la optimización de parametos me he guiado por articulos que he leido acerca de los peligros de la sobreoptimización. Por ello, realice primero las simulaciones sin trailing stop, break even ni money management, solo buscando parametros para los indicadores.
De los resultados, no elegí los mejores absolutos, sino que elegí un set de parametros que se encontraban dentro de un grupo de mayor densidad de resultados. Luego hice la siguiente prueba: Optimice el sistema para un año particular, y luego lo extendi a 10 años. Los resultados de beneficio disminuyeron, pero el sistema siguió dando beneficios, lo que demuestra que no se sobreoptimizo para un periodo particular.
Como siempre recurro a los maestros Hermo y Ciclo que me han ayudado mucho en este corto camino que estoy recorriendo desde que me uni al foro (sin desmerecer el aliento y la ayuda del resto), para que opinen sobre los resultados que he obtenido, y si podemos tomar este EA como nuestra nueva base para lograr un sistema que llegue a operar algún dia en real.
Espero vuestros comentarios.
Saludos!!!!!
Hola, bueno acá tengo algunas pruebas que confirma lo que comenta el compañero Hermo.
Las dos pruebas están realizadas con el mismo par, en la misma temporalidad y en el mismo periodo de tiempo pero dan resultados totalmente opuestos, también pongo las imágenes de la pestaña Diario de las dos pruebas donde se ven algunos errores.
Broker 1
28719
28720
Broker 2
28721
28722
Gorowin.
Gorowin, gracias por dedicarle tiempo a las pruebas. Como comente en un mensaje previo, mas allá de que la estrategia no genere ganancias, lo importante es todo lo que estamos aprendiendo (como codificar funciones del trading como el money management o el trailing stop en un EA, backtesting, etc).
Sinceramente no se me ocurre porque dos brokers distintos dan tanta diferencia de resultados, me tendría que poner a ver con mas detenimiento y tratar de ver en detalle las diferencias. En cuanto a los errores, creo que puede ser por lo siguiente:
Broker 1: Los errores son al intentar modificar las ordenes (trailingstop) eso se puede deber a que dependiendo del broker, hay un limite impuesto a la distancia mínima que se puede poner el stop, eso varia segun el broker. La lógica correcta (que actualmente no esta implementada por completo) es que el EA consulte el stop minimo que se puede poner a una orden, y si el calculo del trailing da menos que eso, optar por dos alternativas: dejar la orden sin modificar hasta el proximo tick, o poner el stop a la distancia que permite el broker.
Broker 2: Los errores que aparecen son de falta de dinero. La prueba es con los parametros originales, que tienen el money management deshabilitado y trabaja con lote fijo de valor 1, entonces cuando no queda dinero suficiente aparecen los errores.
Bueno, seguimos trabajando, esperemos tener novedades pronto.
Saludos!!!!!!
Buenas tardes a todos:
Aunque el tiempo no me lo permite, os observo de cerca, :feliz3:.
Muchas gracias por todo vuestro trabajo.
No es exactamente lo que tiene que hacer.
Te explico, quitaste el parametro trailing_take_profit, perfecto.
El parametro trailing_star, lo que realmente busca es dejar correr un cierto numero de pips a nuestro favor antes de activar el trailing_stop. En ejemplo.
Compramos el EURUSD a 1.30000
Trailing_Star = 40 Pips.
Trailing_Stop = 20 Pips.
Cuando el precio llegue a 1.30400 se activa el Trailing Stop.
Como el Trailing Stop lo tenemos a 20, entonces el Stop Loss se situara a 1.30200. Ok
No es necesario que cuando el Trailing_Star se active borre el Take Profit, es mejor que cuando se trabaja con Trailing Stop, tener ya de antemano desactivado el Take Profit es decir valor 0, si lo que pretendemos es dejar correr el beneficio, aunque yo esto prefiero probarlo, es decir, dejar las dos opciones, si tengo un valor en el Take Profit, que no se borre por que se active el Trailing_Star, asi se pueden buscar mas valores en las optimizaciones.
Evidentemente el Take Profit puede tener valor 0 pero el Stop Loss no, ya que no funcionaria el Trailing, excepto que programes virtualmente el stop pero esto ya es harina de otro costal.
Hola Ciclo
Yo soy un gran probador de martingalas, me parece bien que se introduzca dentro del codigo, pero ojo, cuando te digo esto me refiero a que no te fies mucho de las maximas perdidas consecutivas que te da el resultado de Metatrader, aunque parezca mentira y sea un calculo de primaria, no siempre lo hace bien, el por que, sencillamente te respondo que es Metatrader.
El codigo de la Martingala que pides, esta dentro del codigo ejemplo que adjunte, por lo tanto solo seria introducirselo a la version correspondiente y a partir de ahi realizar pruebas.
Buenas tardes y bienvenido al foro, solo aclararte un poco por encima tu pregunta.
Cuando pones en el probador de MT Diferencial 2 te estas refiriendo a que quieres que tu estrategia se pruebe con un spread fijo de 2 puntos, esto es la mayor tonteria del mundo, ya que el diferencial no es fijo ni en los broker que te dicen que es fijo, por lo tanto lo idoneo seria que fuese el Diferencial de trabajo o como MT lo llama, Diferencial Current, pero aqui viene la controversia, ¿tienes datos que te proporcionen esta informacion?. Casi te garantizo que no.
Espero que en breve los compañeros del grupo de backtest nos den una leccion sobre todo lo que han descubierto respecto de este tema y otros muchos relacionados con los backtest y optimizaciones en MT. Seguramente os sorprendan y no gratamente precisamente, pero bueno todo se puede hacer.
Para terminar, no quiero desalentar a nadie, pero por favor, cuando realiceis pruebas, tened en cuenta:
El spread, bueno esto un poco complicado por lo que acabo de explicar.
El deslizamiento, super importante y la gran putada es que esto si que no se puede controlar en ningun backtest ni optimizacion. Incluso es diferente en una cuenta demo que en una real, este factor lo manipula el broker para cada cuenta y os aseguro que influye muchisimo en los resultados.
Las comisiones, que parece que se os han olvidado, siempre y cuando existan, claro esta, pero bueno si no os cobran comisiones, seguramente el diferencial se las trae incluidas.
Y esto solo para empezar, que he visto operaciones en vuestras pruebas que son negativas y figuran como positivas.
Con todo esto no quiero entrar en el desanimo, sencillamente que vayais perfilando vuestra cabeza para cuando programeis algo que querais poner en real. Teneis que tener en cuenta todas estas cosas y alguna mas que ya iremos comentando.
Un fuerte abrazo.
Hermo.
Hola a todos!!!!
Hermo, como siempre, un agradecimiento por tus comentarios, tu experiencia es invaluable para alguien que recién se inicia como yo en el trading. Quiero aprovechar para hacerte unas consultas, que seguro tu sabrás responder desde tu experiencia:
He intentado optimizar los valores del EA, pero los mejores resultados siempre se obtienen con margenes muy pequeños de take profit (4 o 5 pips). Lo que estoy viendo es que en general la estrategia (el cruce de las 3 medias) da señales algo tardías, por eso no se puede obtener un beneficio mayor. Es posible que con esos valores el EA pueda llegar a operar en la realidad? es posible que nos encontremos con situaciones con spread=2? (podriamos poner el filtro de spread como me comentaste previamente, para asegurarnos que los trades se den solo en esas condiciones).
También quería pedirles a todos que no se desanimen si el programa no da resultados positivos, yo creo que lo mas valorable aqui es la experiencia de intentar llevar una estrategia al software y que todo el camino recorrido nos sirve independientemente de que cambiemos la estrategia, porque ya tenemos codigo que funciona para el money management, para el trailing stop, etc, que era el objetivo inicial del post.
Si alguien a probado con otros parametros, o ha analizado filtros extra para mejorar las señales, estamos abiertos a cualquier sugerencia para modificar o cambiar la estrategia de este experto y seguir avanzando.
Saludos!!!!!
Hola, bueno acá tengo algunas pruebas que confirma lo que comenta el compañero Hermo.
Las dos pruebas están realizadas con el mismo par, en la misma temporalidad y en el mismo periodo de tiempo pero dan resultados totalmente opuestos, también pongo las imágenes de la pestaña Diario de las dos pruebas donde se ven algunos errores.
Broker 1
28719
28720
Broker 2
28721
28722
Gorowin.
os debo reputación colegas
Buenas tardes a todos:
Aunque el tiempo no me lo permite, os observo de cerca, :feliz3:.
Muchas gracias por todo vuestro trabajo.
HERMO:
- He tomado la observación que hiciste sobre la modificación del TakeProfit, y la he implementado de la misma manera, ahora desaparecio la opcion "trailing_take_profit" (la cual habia bautizado con ese nombre desde mi inexperiencia ja ja), y ahora, cuando el trailing stop detecta que la operacion logró los beneficios indicados en "trailing_start", simplemente le quita el takeprofit a la orden y actua corriendo solo el stoploss, para que la orden pueda tomar todos los beneficios posibles.
No es exactamente lo que tiene que hacer.
Te explico, quitaste el parametro trailing_take_profit, perfecto.
El parametro trailing_star, lo que realmente busca es dejar correr un cierto numero de pips a nuestro favor antes de activar el trailing_stop. En ejemplo.
Compramos el EURUSD a 1.30000
Trailing_Star = 40 Pips.
Trailing_Stop = 20 Pips.
Cuando el precio llegue a 1.30400 se activa el Trailing Stop.
Como el Trailing Stop lo tenemos a 20, entonces el Stop Loss se situara a 1.30200. Ok
No es necesario que cuando el Trailing_Star se active borre el Take Profit, es mejor que cuando se trabaja con Trailing Stop, tener ya de antemano desactivado el Take Profit es decir valor 0, si lo que pretendemos es dejar correr el beneficio, aunque yo esto prefiero probarlo, es decir, dejar las dos opciones, si tengo un valor en el Take Profit, que no se borre por que se active el Trailing_Star, asi se pueden buscar mas valores en las optimizaciones.
Evidentemente el Take Profit puede tener valor 0 pero el Stop Loss no, ya que no funcionaria el Trailing, excepto que programes virtualmente el stop pero esto ya es harina de otro costal.
Parece que el sistema sigue mejorando.
Otra idea para mejorar las ganancias.
Dado que la tasa de aciertos es mayor del 80% y que el maximo numero de perdidas consecutivas es de 4, y la media de perdidas consecutivas es de 1, se me ocurre así a bote pronto una martingala soft.
Ya que la media de perdidas consecutivas es de 1, quiere decir que la mayoria de las perdias consecutivas es de 1. Por tanto una martingala de 1 una vez podria mejorar compensar esa perdida. Por ejemplo se pierde una operacion y la siguiente doblamos el tamaño por ejemplo de 1 a 2. Si ganamos la proxima operación volvemos a 1 lote y hemos compensado la perdida anterior, si perdemos nos quedamos con una perdida de 3 lotes, por que igualmente nuestra proxima operacion sera de un lote. Como la mayoria de las perdias consecutivas es una vez, lo logico es que la mayoria de las veces nuestra martingala sea ganadora.
No se que os parece.
Saludos.
Hola Ciclo
Yo soy un gran probador de martingalas, me parece bien que se introduzca dentro del codigo, pero ojo, cuando te digo esto me refiero a que no te fies mucho de las maximas perdidas consecutivas que te da el resultado de Metatrader, aunque parezca mentira y sea un calculo de primaria, no siempre lo hace bien, el por que, sencillamente te respondo que es Metatrader.
El codigo de la Martingala que pides, esta dentro del codigo ejemplo que adjunte, por lo tanto solo seria introducirselo a la version correspondiente y a partir de ahi realizar pruebas.
Hola, ahora si jaja.
Con esos parámetros los resultados son similares.
Entonces quiere decir que poniendo el parámetro Diferencial en 2, estamos trabajando con un Spread máximo de 2 pips por operación ?
Gorowin
Buenas tardes y bienvenido al foro, solo aclararte un poco por encima tu pregunta.
Cuando pones en el probador de MT Diferencial 2 te estas refiriendo a que quieres que tu estrategia se pruebe con un spread fijo de 2 puntos, esto es la mayor tonteria del mundo, ya que el diferencial no es fijo ni en los broker que te dicen que es fijo, por lo tanto lo idoneo seria que fuese el Diferencial de trabajo o como MT lo llama, Diferencial Current, pero aqui viene la controversia, ¿tienes datos que te proporcionen esta informacion?. Casi te garantizo que no.
Espero que en breve los compañeros del grupo de backtest nos den una leccion sobre todo lo que han descubierto respecto de este tema y otros muchos relacionados con los backtest y optimizaciones en MT. Seguramente os sorprendan y no gratamente precisamente, pero bueno todo se puede hacer.
Para terminar, no quiero desalentar a nadie, pero por favor, cuando realiceis pruebas, tened en cuenta:
El spread, bueno esto un poco complicado por lo que acabo de explicar.
El deslizamiento, super importante y la gran putada es que esto si que no se puede controlar en ningun backtest ni optimizacion. Incluso es diferente en una cuenta demo que en una real, este factor lo manipula el broker para cada cuenta y os aseguro que influye muchisimo en los resultados.
Las comisiones, que parece que se os han olvidado, siempre y cuando existan, claro esta, pero bueno si no os cobran comisiones, seguramente el diferencial se las trae incluidas.
Y esto solo para empezar, que he visto operaciones en vuestras pruebas que son negativas y figuran como positivas.
Con todo esto no quiero entrar en el desanimo, sencillamente que vayais perfilando vuestra cabeza para cuando programeis algo que querais poner en real. Teneis que tener en cuenta todas estas cosas y alguna mas que ya iremos comentando.
Un fuerte abrazo.
Hermo.
Hola, ahora si jaja.
Con esos parámetros los resultados son similares.
Entonces quiere decir que poniendo el parámetro Diferencial en 2, estamos trabajando con un Spread máximo de 2 pips por operación ?
Gorowin
Saludos amigos!!!!!
Estoy de nuevo con otra actualización del EA, en este caso es la version 1.4. No postee en ningun momento la 1.3 porque comence a hacer modificaciones y me parecio conveniente directamente lanzar la 1.4
Los cambios entre versiones hasta hora son (estan en el codigo fuente, pero para que todos lo vean):
VERSIONES:
- v1.0 - 26/06/2014 - MCSoft
Version inicial desarrollada en base al indicador "3MAS Cross Alert v2.mq4"
proporcionado por Ciclo.
- v1.1 - 25/06/2014 - MCSoft
Se agregó media 200 (ma4) para filtrar la tendencia a largo plazo
se habilitaron operaciones de venta
- v1.2 - 25/06/2014 - Hermo/MCsoft
Siguiendo recomendaciones de Hermo, se acomodó el código de una manera mas legible
Se modifico el calculo de los indicadores, para que el valor actual de cada indicador
se calcule al cierre de la vela. El calculo previo era tick a tick y provocaba muchas
veces apertura y cierre de operaciones en la misma vela
- v1.3 - 25/06/2014 - Ciclo/MCsoft
Se agregó la opción del horario de trading
- v1.4 - 27/06/2014 - Hermo/MCsoft
Se agregó el calculo automatico del valor del pip de acuerdo a la cantidad de digitos del broker
Se programo nuevamente el money management para calcular el tamaño de cada operación en funcion del stop loss
de la orden, y el porcentaje maximo de perdida de la cuenta en caso de que la operacion sea perdedora
Creo que mas allá de los resultados que pueda dar este EA en dinero, creo que hemos logrado mucho aportando ideas y viendo como se aplican a un programa real.
Respondo a todos en este post para no llenar el tema de mensajes individuales:
CICLO:
- En este EA esta implementado el control de horario. Esta hecho de una forma básica (horario de inicio y de final del trading) y aun no tiene la opcion de cerrar posiciones el viernes, pero creo que podemos empezar a hacer pruebas con ello. Luego le agregamos los dias permitidos de trading y la opcion de cerrar posiciones el viernes
- En cuanto al MM, he implementado código nuevo, pero también he leido que es conveniente probar la estrategia con lote fijo para ver la efectividad sin la ayuda del MM.
HERMO:
- Aun no esta implementado el control del spread, pero si agregue la compensacion para los brokers de 3/5 y 6 digitos.
- He tomado la observación que hiciste sobre la modificación del TakeProfit, y la he implementado de la misma manera, ahora desaparecio la opcion "trailing_take_profit" (la cual habia bautizado con ese nombre desde mi inexperiencia ja ja), y ahora, cuando el trailing stop detecta que la operacion logró los beneficios indicados en "trailing_start", simplemente le quita el takeprofit a la orden y actua corriendo solo el stoploss, para que la orden pueda tomar todos los beneficios posibles.
- Sobre la compensacion del valor del pip: Comence mis pruebas con un metatrader limpio (bajado de la web metaquotes, no ligado a ningun broker), operando a 4 digitos, y luego, descargue otra versión con una cuenta demo de un broker de 5 digitos y a partir de ese momento el programa me comenzo a dar resultados positivos. Luego, cuando hablamos el tema de la compensación del pip, me termino de cerrar lo que estaba pasando: al pasar de un broker de 4 digitos a uno de 5 digitos, mis parametros por defecto de vieron divididos por 10 (porque no habia compensacion por los digitos), entonces el EA esta trabajando con un TP de 5 pips, un SL de 9 pips y un trailing de 1 pip, haciendo una especie de scalping, por eso las posiciones se abren y cierran en su mayoria en la misma vela de 30 minutos. Ahora que la compensacion esta programada, reduje los parametros por defecto por 10 para seguir trabajando con los resultados previos. Mas adelante discuto los parametros por defecto y como podemos homogeneizar nuestros resultados para las pruebas.
GOROWIN:
bienvenido colega de Argentina, y gracias por interesarte en el tema. En cuanto a los resultados que has obtenido, yo creo que puede deberse a alguna de las siguientes cuestiones:
- Inicialmente comence desarrollando y probando con un broker de 4 digitos, y ahora lo estoy haciendo con uno de 5 digitos, en ese momento el EA comenzo a dar resultados positivos, creo que porque los valores de TP, SL y trailing quedaron divididos por 10. Ahora estoy adjuntando la version 1.4 que contempla los digitos que tiene el broker y lo compensa.
- Estuve realizando las pruebas con un spread fijo de 2, y veo que tu reporte tiene un spread configurado en "current" de 16
A TODOS LOS PARTICIPANTES QUE ESTEN PROBANDO Y ANALIZANDO EL EA:
He sido un poco desordenado con las pruebas, y estamos obteniendo resultados dispares (gracias Gorowin por la observacion), por ello, me parece que deberíamos fijar las condiciones en las que hacemos las pruebas, para que cada uno de nosotros obtenga los mismos resultados y pueda proponer mejoras y parametros que les sean utiles al resto.
Esta es la configuracion con la que estoy haciendo las pruebas:
- Par: EURUSD
- Parametros: Por defecto como estan en el EA que adjunto a continuacion
- Timeframe: 30M (he obtenido buenos resultados con 4H y 1D con los mismos parametros)
- Money Management: Por defecto ahora esta deshabilitado y opera con un lote fijo de 1 (mas abajo aclaro porque he fijado el valor de lote=1) para que veamos solamente la efectividad de la estrategia.
- Spread: fijado en el estrategy tester en 2
- Periodo: 2010.01.01 al 2014.06.01 (4 años y 5 meses)
- Simulación: cada tick
Este es el EA version 1.4 con todos sus parametros seteados a valores por defecto:
28677
Y estos son los resultados de la estrategia que yo estoy obteniendo con la configuración comentada:
Strategy Tester Report
MCSoft_EA_3MA_v1.4
AlpariUK-Demo-Market (Build 646)
Símbolo
EURUSD (Euro vs US Dollar)
Período
30 minutos (M30) 2010.01.04 00:00 - 2014.05.30 23:30 (2010.01.01 - 2014.06.01)
Modelo
Cada tick (el método más preciso basado en todos los períodos menores disponibles)
Parámetros
ea_nombre="=== MCSoft_EA_3MA_v1.3 ==="; parametros_generales="===== PARAMETROS GENERALES ====="; ea_magic_number=12345; slip_page_en_pips=2; control_ordenes="===== CONTROL ORDENES ====="; permitir_ordenes_multiples=false; procesar_en_cierre=true; MoneyManagement="===== CONFIGURACION MONEY MANAGEMENT ====="; calcular_lotes=false; lotes_por_trade=1; porcentaje_riesgo_por_trade=1; HorarioTrading="===== CONTROL HORARIO ====="; habilitar_horario_trading=false; hora_inicio_trading="16:00"; hora_cierre_trading="11:30"; ControlPosiciones="===== CONTROL POSICIONES ====="; take_profit_en_pips=5; stop_loss_en_pips=9; TrailingStop="----- Configuracion Trailing Stop -----"; habilitar_trailing_stop=true; trailing_start_en_pips=1; trailing_stop_en_pips=1; SettingIndicadores="===== SETTING INDICADORES ====="; _Indicator="===== 3EMAS Cross Alert - Ciclo ====="; periodo_ma1=4; periodo_ma2=18; periodo_ma3=40; periodo_ma4=200;
Barras en la prueba
55653
Ticks modelados
65152566
Calidad del modelado
90.00%
Errores de gráficos mal agrupados
0
Depósito inicial
10000.00
Diferencial
2
Beneficio neto total
8381.20
Beneficio bruto
33266.60
Pérdida bruta
-24885.40
Factor de beneficio
1.34
Rentabilidad esperada
4.55
Disminución absoluta
459.00
Disminución maximal
736.00 (3.98%)
Disminución relativa
5.56% (684.00)
Total de operaciones
1840
Posiciones cortas (ganado %)
864 (83.91%)
Posiciones largas (ganado %)
976 (84.22%)
Operaciones de beneficios (% del total)
1547 (84.08%)
Operaciones de pérdidas (% del total)
293 (15.92%)
Mayor
Operaciones de beneficios
133.00
Operaciones de pérdidas
-90.00
Media
Operaciones de beneficios
21.50
Operaciones de pérdidas
-84.93
Máximo
ganancias consecutivas (beneficios en dinero)
61 (1552.00)
pérdidas consecutivas (pérdidas en dinero)
4 (-304.00)
Máximo
beneficios consecutivos (número de ganancias)
1552.00 (61)
pérdidas consecutivas (número de pérdidas)
-304.00 (4)
Media
ganancias consecutivas
6
pérdidas consecutivas
1
28675
Quiero hacer un comentario, ya que el tema del money management y calculo del valor de la posicion es nuevo para mi, y quiero ver si lo estoy entendiendo correctamente:
Con los parámetros por defecto, en cada trade el EA "se esta jugando" un valor de lote fijo de 1, lo que en EURUSD significa un valor de PIP de: Valor lote x tamaño lote x pip = 100000 x 1 x 0.0001 = 10 USD. Como el stop loss esta fijado en 9, la pérdida que se da si la orden alcanza el stoploss son 90 dolares, lo que para la cuenta de 10000 significa el 0.9%. Entonces, inicialmente podríamos aguantar una racha de hasta 111 operaciones perdedoras de 90 dolares sin reventar la cuenta (nuevamente, pido me corrijan si estoy calculando o interpretando algo mal).
Este valor se mantiene fijo en todo el periodo de prueba, entonces, a medida que nuesta cuenta va creciendo, arriesgamos cada vez menos, y podríamos sobrevivir a rachas perdedoras mas largas.
Por otro lado, con el money management habilitado, la cantidad de lotes con que se abre cada operación se calcula teniendo en cuenta la cantidad porcentual máxima que estamos dispuestos a perder en caso que la operación no resulte, es decir, el cáculo es al revés. Si ingresamos como parametro 0.9 en el parametro riesgo, inicialmente estamos en la misma situacion que antes, es decir, estamos dispuestos a perder el 0.9% de nuestra cuenta si la operacion no resulta, entonces el EA calcula un valor de lote de 1 (para la cuenta inicial de 10000 dolares), y hace la operacion, pero a medida que la cuenta va creciendo, se realizan operaciones más grandes, pero siempre manteniendo el porcentaje, por lo que siempre aguantaríamos la misma cantidad consecutiva de operaciones perdidas (en realidad con el MM la cosa mejora, porque a medida que vamos perdiendo el tamaño de lote decrece) A modo solo de observacion voy a postear los resultados con MM habilitado, un riesgo de 0.9% y manteniendo el resto de los parametros por defecto:
Strategy Tester Report
MCSoft_EA_3MA_v1.4
AlpariUK-Demo-Market (Build 646)
Símbolo
EURUSD (Euro vs US Dollar)
Período
30 minutos (M30) 2010.01.04 00:00 - 2014.05.30 23:30 (2010.01.01 - 2014.06.01)
Modelo
Cada tick (el método más preciso basado en todos los períodos menores disponibles)
Parámetros
ea_nombre="=== MCSoft_EA_3MA_v1.3 ==="; parametros_generales="===== PARAMETROS GENERALES ====="; ea_magic_number=12345; slip_page_en_pips=2; control_ordenes="===== CONTROL ORDENES ====="; permitir_ordenes_multiples=false; procesar_en_cierre=true; MoneyManagement="===== CONFIGURACION MONEY MANAGEMENT ====="; calcular_lotes=true; lotes_por_trade=1; porcentaje_riesgo_por_trade=0.9; HorarioTrading="===== CONTROL HORARIO ====="; habilitar_horario_trading=false; hora_inicio_trading="16:00"; hora_cierre_trading="11:30"; ControlPosiciones="===== CONTROL POSICIONES ====="; take_profit_en_pips=5; stop_loss_en_pips=9; TrailingStop="----- Configuracion Trailing Stop -----"; habilitar_trailing_stop=true; trailing_start_en_pips=1; trailing_stop_en_pips=1; SettingIndicadores="===== SETTING INDICADORES ====="; _Indicator="===== 3EMAS Cross Alert - Ciclo ====="; periodo_ma1=4; periodo_ma2=18; periodo_ma3=40; periodo_ma4=200;
Barras en la prueba
55653
Ticks modelados
65152566
Calidad del modelado
90.00%
Errores de gráficos mal agrupados
0
Depósito inicial
10000.00
Diferencial
2
Beneficio neto total
12640.64
Beneficio bruto
53574.30
Pérdida bruta
-40933.66
Factor de beneficio
1.31
Rentabilidad esperada
6.87
Disminución absoluta
457.67
Disminución maximal
1648.42 (7.17%)
Disminución relativa
7.17% (1648.42)
Total de operaciones
1840
Posiciones cortas (ganado %)
864 (83.91%)
Posiciones largas (ganado %)
976 (84.22%)
Operaciones de beneficios (% del total)
1547 (84.08%)
Operaciones de pérdidas (% del total)
293 (15.92%)
Mayor
Operaciones de beneficios
214.08
Operaciones de pérdidas
-207.00
Media
Operaciones de beneficios
34.63
Operaciones de pérdidas
-139.71
Máximo
ganancias consecutivas (beneficios en dinero)
61 (2257.96)
pérdidas consecutivas (pérdidas en dinero)
4 (-673.30)
Máximo
beneficios consecutivos (número de ganancias)
2257.96 (61)
pérdidas consecutivas (número de pérdidas)
-673.30 (4)
Media
ganancias consecutivas
6
pérdidas consecutivas
1
28676
Este ultimo backtest lo hice para verificar el funcionamiento del MM, pero creo que debemos seguir manejandonos con lote fijo en 1 (parametro por defecto) asi trabajamos todos sobre la misma base.
Espero sus comentarios.
Saludos a todos!!!!!!
Saludos amigos!!!!!
Estoy de nuevo con otra actualización del EA, en este caso es la version 1.4. No postee en ningun momento la 1.3 porque comence a hacer modificaciones y me parecio conveniente directamente lanzar la 1.4
Los cambios entre versiones hasta hora son (estan en el codigo fuente, pero para que todos lo vean):
VERSIONES:
- v1.0 - 26/06/2014 - MCSoft
Version inicial desarrollada en base al indicador "3MAS Cross Alert v2.mq4"
proporcionado por Ciclo.
- v1.1 - 25/06/2014 - MCSoft
Se agregó media 200 (ma4) para filtrar la tendencia a largo plazo
se habilitaron operaciones de venta
- v1.2 - 25/06/2014 - Hermo/MCsoft
Siguiendo recomendaciones de Hermo, se acomodó el código de una manera mas legible
Se modifico el calculo de los indicadores, para que el valor actual de cada indicador
se calcule al cierre de la vela. El calculo previo era tick a tick y provocaba muchas
veces apertura y cierre de operaciones en la misma vela
- v1.3 - 25/06/2014 - Ciclo/MCsoft
Se agregó la opción del horario de trading
- v1.4 - 27/06/2014 - Hermo/MCsoft
Se agregó el calculo automatico del valor del pip de acuerdo a la cantidad de digitos del broker
Se programo nuevamente el money management para calcular el tamaño de cada operación en funcion del stop loss
de la orden, y el porcentaje maximo de perdida de la cuenta en caso de que la operacion sea perdedora
Creo que mas allá de los resultados que pueda dar este EA en dinero, creo que hemos logrado mucho aportando ideas y viendo como se aplican a un programa real.
Respondo a todos en este post para no llenar el tema de mensajes individuales:
CICLO:
- En este EA esta implementado el control de horario. Esta hecho de una forma básica (horario de inicio y de final del trading) y aun no tiene la opcion de cerrar posiciones el viernes, pero creo que podemos empezar a hacer pruebas con ello. Luego le agregamos los dias permitidos de trading y la opcion de cerrar posiciones el viernes
- En cuanto al MM, he implementado código nuevo, pero también he leido que es conveniente probar la estrategia con lote fijo para ver la efectividad sin la ayuda del MM.
HERMO:
- Aun no esta implementado el control del spread, pero si agregue la compensacion para los brokers de 3/5 y 6 digitos.
- He tomado la observación que hiciste sobre la modificación del TakeProfit, y la he implementado de la misma manera, ahora desaparecio la opcion "trailing_take_profit" (la cual habia bautizado con ese nombre desde mi inexperiencia ja ja), y ahora, cuando el trailing stop detecta que la operacion logró los beneficios indicados en "trailing_start", simplemente le quita el takeprofit a la orden y actua corriendo solo el stoploss, para que la orden pueda tomar todos los beneficios posibles.
- Sobre la compensacion del valor del pip: Comence mis pruebas con un metatrader limpio (bajado de la web metaquotes, no ligado a ningun broker), operando a 4 digitos, y luego, descargue otra versión con una cuenta demo de un broker de 5 digitos y a partir de ese momento el programa me comenzo a dar resultados positivos. Luego, cuando hablamos el tema de la compensación del pip, me termino de cerrar lo que estaba pasando: al pasar de un broker de 4 digitos a uno de 5 digitos, mis parametros por defecto de vieron divididos por 10 (porque no habia compensacion por los digitos), entonces el EA esta trabajando con un TP de 5 pips, un SL de 9 pips y un trailing de 1 pip, haciendo una especie de scalping, por eso las posiciones se abren y cierran en su mayoria en la misma vela de 30 minutos. Ahora que la compensacion esta programada, reduje los parametros por defecto por 10 para seguir trabajando con los resultados previos. Mas adelante discuto los parametros por defecto y como podemos homogeneizar nuestros resultados para las pruebas.
GOROWIN:
bienvenido colega de Argentina, y gracias por interesarte en el tema. En cuanto a los resultados que has obtenido, yo creo que puede deberse a alguna de las siguientes cuestiones:
- Inicialmente comence desarrollando y probando con un broker de 4 digitos, y ahora lo estoy haciendo con uno de 5 digitos, en ese momento el EA comenzo a dar resultados positivos, creo que porque los valores de TP, SL y trailing quedaron divididos por 10. Ahora estoy adjuntando la version 1.4 que contempla los digitos que tiene el broker y lo compensa.
- Estuve realizando las pruebas con un spread fijo de 2, y veo que tu reporte tiene un spread configurado en "current" de 16
A TODOS LOS PARTICIPANTES QUE ESTEN PROBANDO Y ANALIZANDO EL EA:
He sido un poco desordenado con las pruebas, y estamos obteniendo resultados dispares (gracias Gorowin por la observacion), por ello, me parece que deberíamos fijar las condiciones en las que hacemos las pruebas, para que cada uno de nosotros obtenga los mismos resultados y pueda proponer mejoras y parametros que les sean utiles al resto.
Esta es la configuracion con la que estoy haciendo las pruebas:
- Par: EURUSD
- Parametros: Por defecto como estan en el EA que adjunto a continuacion
- Timeframe: 30M (he obtenido buenos resultados con 4H y 1D con los mismos parametros)
- Money Management: Por defecto ahora esta deshabilitado y opera con un lote fijo de 1 (mas abajo aclaro porque he fijado el valor de lote=1) para que veamos solamente la efectividad de la estrategia.
- Spread: fijado en el estrategy tester en 2
- Periodo: 2010.01.01 al 2014.06.01 (4 años y 5 meses)
- Simulación: cada tick
Este es el EA version 1.4 con todos sus parametros seteados a valores por defecto:
28677
Y estos son los resultados de la estrategia que yo estoy obteniendo con la configuración comentada:
Strategy Tester Report
MCSoft_EA_3MA_v1.4
AlpariUK-Demo-Market (Build 646)
Símbolo
EURUSD (Euro vs US Dollar)
Período
30 minutos (M30) 2010.01.04 00:00 - 2014.05.30 23:30 (2010.01.01 - 2014.06.01)
Modelo
Cada tick (el método más preciso basado en todos los períodos menores disponibles)
Parámetros
ea_nombre="=== MCSoft_EA_3MA_v1.3 ==="; parametros_generales="===== PARAMETROS GENERALES ====="; ea_magic_number=12345; slip_page_en_pips=2; control_ordenes="===== CONTROL ORDENES ====="; permitir_ordenes_multiples=false; procesar_en_cierre=true; MoneyManagement="===== CONFIGURACION MONEY MANAGEMENT ====="; calcular_lotes=false; lotes_por_trade=1; porcentaje_riesgo_por_trade=1; HorarioTrading="===== CONTROL HORARIO ====="; habilitar_horario_trading=false; hora_inicio_trading="16:00"; hora_cierre_trading="11:30"; ControlPosiciones="===== CONTROL POSICIONES ====="; take_profit_en_pips=5; stop_loss_en_pips=9; TrailingStop="----- Configuracion Trailing Stop -----"; habilitar_trailing_stop=true; trailing_start_en_pips=1; trailing_stop_en_pips=1; SettingIndicadores="===== SETTING INDICADORES ====="; _Indicator="===== 3EMAS Cross Alert - Ciclo ====="; periodo_ma1=4; periodo_ma2=18; periodo_ma3=40; periodo_ma4=200;
Barras en la prueba
55653
Ticks modelados
65152566
Calidad del modelado
90.00%
Errores de gráficos mal agrupados
0
Depósito inicial
10000.00
Diferencial
2
Beneficio neto total
8381.20
Beneficio bruto
33266.60
Pérdida bruta
-24885.40
Factor de beneficio
1.34
Rentabilidad esperada
4.55
Disminución absoluta
459.00
Disminución maximal
736.00 (3.98%)
Disminución relativa
5.56% (684.00)
Total de operaciones
1840
Posiciones cortas (ganado %)
864 (83.91%)
Posiciones largas (ganado %)
976 (84.22%)
Operaciones de beneficios (% del total)
1547 (84.08%)
Operaciones de pérdidas (% del total)
293 (15.92%)
Mayor
Operaciones de beneficios
133.00
Operaciones de pérdidas
-90.00
Media
Operaciones de beneficios
21.50
Operaciones de pérdidas
-84.93
Máximo
ganancias consecutivas (beneficios en dinero)
61 (1552.00)
pérdidas consecutivas (pérdidas en dinero)
4 (-304.00)
Máximo
beneficios consecutivos (número de ganancias)
1552.00 (61)
pérdidas consecutivas (número de pérdidas)
-304.00 (4)
Media
ganancias consecutivas
6
pérdidas consecutivas
1
28675
Quiero hacer un comentario, ya que el tema del money management y calculo del valor de la posicion es nuevo para mi, y quiero ver si lo estoy entendiendo correctamente:
Con los parámetros por defecto, en cada trade el EA "se esta jugando" un valor de lote fijo de 1, lo que en EURUSD significa un valor de PIP de: Valor lote x tamaño lote x pip = 100000 x 1 x 0.0001 = 10 USD. Como el stop loss esta fijado en 9, la pérdida que se da si la orden alcanza el stoploss son 90 dolares, lo que para la cuenta de 10000 significa el 0.9%. Entonces, inicialmente podríamos aguantar una racha de hasta 111 operaciones perdedoras de 90 dolares sin reventar la cuenta (nuevamente, pido me corrijan si estoy calculando o interpretando algo mal).
Este valor se mantiene fijo en todo el periodo de prueba, entonces, a medida que nuesta cuenta va creciendo, arriesgamos cada vez menos, y podríamos sobrevivir a rachas perdedoras mas largas.
Por otro lado, con el money management habilitado, la cantidad de lotes con que se abre cada operación se calcula teniendo en cuenta la cantidad porcentual máxima que estamos dispuestos a perder en caso que la operación no resulte, es decir, el cáculo es al revés. Si ingresamos como parametro 0.9 en el parametro riesgo, inicialmente estamos en la misma situacion que antes, es decir, estamos dispuestos a perder el 0.9% de nuestra cuenta si la operacion no resulta, entonces el EA calcula un valor de lote de 1 (para la cuenta inicial de 10000 dolares), y hace la operacion, pero a medida que la cuenta va creciendo, se realizan operaciones más grandes, pero siempre manteniendo el porcentaje, por lo que siempre aguantaríamos la misma cantidad consecutiva de operaciones perdidas (en realidad con el MM la cosa mejora, porque a medida que vamos perdiendo el tamaño de lote decrece) A modo solo de observacion voy a postear los resultados con MM habilitado, un riesgo de 0.9% y manteniendo el resto de los parametros por defecto:
Strategy Tester Report
MCSoft_EA_3MA_v1.4
AlpariUK-Demo-Market (Build 646)
Símbolo
EURUSD (Euro vs US Dollar)
Período
30 minutos (M30) 2010.01.04 00:00 - 2014.05.30 23:30 (2010.01.01 - 2014.06.01)
Modelo
Cada tick (el método más preciso basado en todos los períodos menores disponibles)
Parámetros
ea_nombre="=== MCSoft_EA_3MA_v1.3 ==="; parametros_generales="===== PARAMETROS GENERALES ====="; ea_magic_number=12345; slip_page_en_pips=2; control_ordenes="===== CONTROL ORDENES ====="; permitir_ordenes_multiples=false; procesar_en_cierre=true; MoneyManagement="===== CONFIGURACION MONEY MANAGEMENT ====="; calcular_lotes=true; lotes_por_trade=1; porcentaje_riesgo_por_trade=0.9; HorarioTrading="===== CONTROL HORARIO ====="; habilitar_horario_trading=false; hora_inicio_trading="16:00"; hora_cierre_trading="11:30"; ControlPosiciones="===== CONTROL POSICIONES ====="; take_profit_en_pips=5; stop_loss_en_pips=9; TrailingStop="----- Configuracion Trailing Stop -----"; habilitar_trailing_stop=true; trailing_start_en_pips=1; trailing_stop_en_pips=1; SettingIndicadores="===== SETTING INDICADORES ====="; _Indicator="===== 3EMAS Cross Alert - Ciclo ====="; periodo_ma1=4; periodo_ma2=18; periodo_ma3=40; periodo_ma4=200;
Barras en la prueba
55653
Ticks modelados
65152566
Calidad del modelado
90.00%
Errores de gráficos mal agrupados
0
Depósito inicial
10000.00
Diferencial
2
Beneficio neto total
12640.64
Beneficio bruto
53574.30
Pérdida bruta
-40933.66
Factor de beneficio
1.31
Rentabilidad esperada
6.87
Disminución absoluta
457.67
Disminución maximal
1648.42 (7.17%)
Disminución relativa
7.17% (1648.42)
Total de operaciones
1840
Posiciones cortas (ganado %)
864 (83.91%)
Posiciones largas (ganado %)
976 (84.22%)
Operaciones de beneficios (% del total)
1547 (84.08%)
Operaciones de pérdidas (% del total)
293 (15.92%)
Mayor
Operaciones de beneficios
214.08
Operaciones de pérdidas
-207.00
Media
Operaciones de beneficios
34.63
Operaciones de pérdidas
-139.71
Máximo
ganancias consecutivas (beneficios en dinero)
61 (2257.96)
pérdidas consecutivas (pérdidas en dinero)
4 (-673.30)
Máximo
beneficios consecutivos (número de ganancias)
2257.96 (61)
pérdidas consecutivas (número de pérdidas)
-673.30 (4)
Media
ganancias consecutivas
6
pérdidas consecutivas
1
28676
Este ultimo backtest lo hice para verificar el funcionamiento del MM, pero creo que debemos seguir manejandonos con lote fijo en 1 (parametro por defecto) asi trabajamos todos sobre la misma base.
Espero sus comentarios.
Saludos a todos!!!!!!
Parece que el sistema sigue mejorando.
Otra idea para mejorar las ganancias.
Dado que la tasa de aciertos es mayor del 80% y que el maximo numero de perdidas consecutivas es de 4, y la media de perdidas consecutivas es de 1, se me ocurre así a bote pronto una martingala soft.
Ya que la media de perdidas consecutivas es de 1, quiere decir que la mayoria de las perdias consecutivas es de 1. Por tanto una martingala de 1 una vez podria mejorar compensar esa perdida. Por ejemplo se pierde una operacion y la siguiente doblamos el tamaño por ejemplo de 1 a 2. Si ganamos la proxima operación volvemos a 1 lote y hemos compensado la perdida anterior, si perdemos nos quedamos con una perdida de 3 lotes, por que igualmente nuestra proxima operacion sera de un lote. Como la mayoria de las perdias consecutivas es una vez, lo logico es que la mayoria de las veces nuestra martingala sea ganadora.
No se que os parece.
Saludos.
¡Gran trabajo amigo MCSoft! Estoy de acuerdo contigo con lo del MM. Esá sera nuestra segunda baza.
Un abrazo.
;)
Saludos amigos!!!!!
Estoy de nuevo con otra actualización del EA, en este caso es la version 1.4. No postee en ningun momento la 1.3 porque comence a hacer modificaciones y me parecio conveniente directamente lanzar la 1.4
Los cambios entre versiones hasta hora son (estan en el codigo fuente, pero para que todos lo vean):
VERSIONES:
- v1.0 - 26/06/2014 - MCSoft
Version inicial desarrollada en base al indicador "3MAS Cross Alert v2.mq4"
proporcionado por Ciclo.
- v1.1 - 25/06/2014 - MCSoft
Se agregó media 200 (ma4) para filtrar la tendencia a largo plazo
se habilitaron operaciones de venta
- v1.2 - 25/06/2014 - Hermo/MCsoft
Siguiendo recomendaciones de Hermo, se acomodó el código de una manera mas legible
Se modifico el calculo de los indicadores, para que el valor actual de cada indicador
se calcule al cierre de la vela. El calculo previo era tick a tick y provocaba muchas
veces apertura y cierre de operaciones en la misma vela
- v1.3 - 25/06/2014 - Ciclo/MCsoft
Se agregó la opción del horario de trading
- v1.4 - 27/06/2014 - Hermo/MCsoft
Se agregó el calculo automatico del valor del pip de acuerdo a la cantidad de digitos del broker
Se programo nuevamente el money management para calcular el tamaño de cada operación en funcion del stop loss
de la orden, y el porcentaje maximo de perdida de la cuenta en caso de que la operacion sea perdedora
Creo que mas allá de los resultados que pueda dar este EA en dinero, creo que hemos logrado mucho aportando ideas y viendo como se aplican a un programa real.
Respondo a todos en este post para no llenar el tema de mensajes individuales:
CICLO:
- En este EA esta implementado el control de horario. Esta hecho de una forma básica (horario de inicio y de final del trading) y aun no tiene la opcion de cerrar posiciones el viernes, pero creo que podemos empezar a hacer pruebas con ello. Luego le agregamos los dias permitidos de trading y la opcion de cerrar posiciones el viernes
- En cuanto al MM, he implementado código nuevo, pero también he leido que es conveniente probar la estrategia con lote fijo para ver la efectividad sin la ayuda del MM.
HERMO:
- Aun no esta implementado el control del spread, pero si agregue la compensacion para los brokers de 3/5 y 6 digitos.
- He tomado la observación que hiciste sobre la modificación del TakeProfit, y la he implementado de la misma manera, ahora desaparecio la opcion "trailing_take_profit" (la cual habia bautizado con ese nombre desde mi inexperiencia ja ja), y ahora, cuando el trailing stop detecta que la operacion logró los beneficios indicados en "trailing_start", simplemente le quita el takeprofit a la orden y actua corriendo solo el stoploss, para que la orden pueda tomar todos los beneficios posibles.
- Sobre la compensacion del valor del pip: Comence mis pruebas con un metatrader limpio (bajado de la web metaquotes, no ligado a ningun broker), operando a 4 digitos, y luego, descargue otra versión con una cuenta demo de un broker de 5 digitos y a partir de ese momento el programa me comenzo a dar resultados positivos. Luego, cuando hablamos el tema de la compensación del pip, me termino de cerrar lo que estaba pasando: al pasar de un broker de 4 digitos a uno de 5 digitos, mis parametros por defecto de vieron divididos por 10 (porque no habia compensacion por los digitos), entonces el EA esta trabajando con un TP de 5 pips, un SL de 9 pips y un trailing de 1 pip, haciendo una especie de scalping, por eso las posiciones se abren y cierran en su mayoria en la misma vela de 30 minutos. Ahora que la compensacion esta programada, reduje los parametros por defecto por 10 para seguir trabajando con los resultados previos. Mas adelante discuto los parametros por defecto y como podemos homogeneizar nuestros resultados para las pruebas.
GOROWIN:
bienvenido colega de Argentina, y gracias por interesarte en el tema. En cuanto a los resultados que has obtenido, yo creo que puede deberse a alguna de las siguientes cuestiones:
- Inicialmente comence desarrollando y probando con un broker de 4 digitos, y ahora lo estoy haciendo con uno de 5 digitos, en ese momento el EA comenzo a dar resultados positivos, creo que porque los valores de TP, SL y trailing quedaron divididos por 10. Ahora estoy adjuntando la version 1.4 que contempla los digitos que tiene el broker y lo compensa.
- Estuve realizando las pruebas con un spread fijo de 2, y veo que tu reporte tiene un spread configurado en "current" de 16
A TODOS LOS PARTICIPANTES QUE ESTEN PROBANDO Y ANALIZANDO EL EA:
He sido un poco desordenado con las pruebas, y estamos obteniendo resultados dispares (gracias Gorowin por la observacion), por ello, me parece que deberíamos fijar las condiciones en las que hacemos las pruebas, para que cada uno de nosotros obtenga los mismos resultados y pueda proponer mejoras y parametros que les sean utiles al resto.
Esta es la configuracion con la que estoy haciendo las pruebas:
- Par: EURUSD
- Parametros: Por defecto como estan en el EA que adjunto a continuacion
- Timeframe: 30M (he obtenido buenos resultados con 4H y 1D con los mismos parametros)
- Money Management: Por defecto ahora esta deshabilitado y opera con un lote fijo de 1 (mas abajo aclaro porque he fijado el valor de lote=1) para que veamos solamente la efectividad de la estrategia.
- Spread: fijado en el estrategy tester en 2
- Periodo: 2010.01.01 al 2014.06.01 (4 años y 5 meses)
- Simulación: cada tick
Este es el EA version 1.4 con todos sus parametros seteados a valores por defecto:
28677
Y estos son los resultados de la estrategia que yo estoy obteniendo con la configuración comentada:
Strategy Tester Report
MCSoft_EA_3MA_v1.4
AlpariUK-Demo-Market (Build 646)
Símbolo
EURUSD (Euro vs US Dollar)
Período
30 minutos (M30) 2010.01.04 00:00 - 2014.05.30 23:30 (2010.01.01 - 2014.06.01)
Modelo
Cada tick (el método más preciso basado en todos los períodos menores disponibles)
Parámetros
ea_nombre="=== MCSoft_EA_3MA_v1.3 ==="; parametros_generales="===== PARAMETROS GENERALES ====="; ea_magic_number=12345; slip_page_en_pips=2; control_ordenes="===== CONTROL ORDENES ====="; permitir_ordenes_multiples=false; procesar_en_cierre=true; MoneyManagement="===== CONFIGURACION MONEY MANAGEMENT ====="; calcular_lotes=false; lotes_por_trade=1; porcentaje_riesgo_por_trade=1; HorarioTrading="===== CONTROL HORARIO ====="; habilitar_horario_trading=false; hora_inicio_trading="16:00"; hora_cierre_trading="11:30"; ControlPosiciones="===== CONTROL POSICIONES ====="; take_profit_en_pips=5; stop_loss_en_pips=9; TrailingStop="----- Configuracion Trailing Stop -----"; habilitar_trailing_stop=true; trailing_start_en_pips=1; trailing_stop_en_pips=1; SettingIndicadores="===== SETTING INDICADORES ====="; _Indicator="===== 3EMAS Cross Alert - Ciclo ====="; periodo_ma1=4; periodo_ma2=18; periodo_ma3=40; periodo_ma4=200;
Barras en la prueba
55653
Ticks modelados
65152566
Calidad del modelado
90.00%
Errores de gráficos mal agrupados
0
Depósito inicial
10000.00
Diferencial
2
Beneficio neto total
8381.20
Beneficio bruto
33266.60
Pérdida bruta
-24885.40
Factor de beneficio
1.34
Rentabilidad esperada
4.55
Disminución absoluta
459.00
Disminución maximal
736.00 (3.98%)
Disminución relativa
5.56% (684.00)
Total de operaciones
1840
Posiciones cortas (ganado %)
864 (83.91%)
Posiciones largas (ganado %)
976 (84.22%)
Operaciones de beneficios (% del total)
1547 (84.08%)
Operaciones de pérdidas (% del total)
293 (15.92%)
Mayor
Operaciones de beneficios
133.00
Operaciones de pérdidas
-90.00
Media
Operaciones de beneficios
21.50
Operaciones de pérdidas
-84.93
Máximo
ganancias consecutivas (beneficios en dinero)
61 (1552.00)
pérdidas consecutivas (pérdidas en dinero)
4 (-304.00)
Máximo
beneficios consecutivos (número de ganancias)
1552.00 (61)
pérdidas consecutivas (número de pérdidas)
-304.00 (4)
Media
ganancias consecutivas
6
pérdidas consecutivas
1
28675
Quiero hacer un comentario, ya que el tema del money management y calculo del valor de la posicion es nuevo para mi, y quiero ver si lo estoy entendiendo correctamente:
Con los parámetros por defecto, en cada trade el EA "se esta jugando" un valor de lote fijo de 1, lo que en EURUSD significa un valor de PIP de: Valor lote x tamaño lote x pip = 100000 x 1 x 0.0001 = 10 USD. Como el stop loss esta fijado en 9, la pérdida que se da si la orden alcanza el stoploss son 90 dolares, lo que para la cuenta de 10000 significa el 0.9%. Entonces, inicialmente podríamos aguantar una racha de hasta 111 operaciones perdedoras de 90 dolares sin reventar la cuenta (nuevamente, pido me corrijan si estoy calculando o interpretando algo mal).
Este valor se mantiene fijo en todo el periodo de prueba, entonces, a medida que nuesta cuenta va creciendo, arriesgamos cada vez menos, y podríamos sobrevivir a rachas perdedoras mas largas.
Por otro lado, con el money management habilitado, la cantidad de lotes con que se abre cada operación se calcula teniendo en cuenta la cantidad porcentual máxima que estamos dispuestos a perder en caso que la operación no resulte, es decir, el cáculo es al revés. Si ingresamos como parametro 0.9 en el parametro riesgo, inicialmente estamos en la misma situacion que antes, es decir, estamos dispuestos a perder el 0.9% de nuestra cuenta si la operacion no resulta, entonces el EA calcula un valor de lote de 1 (para la cuenta inicial de 10000 dolares), y hace la operacion, pero a medida que la cuenta va creciendo, se realizan operaciones más grandes, pero siempre manteniendo el porcentaje, por lo que siempre aguantaríamos la misma cantidad consecutiva de operaciones perdidas (en realidad con el MM la cosa mejora, porque a medida que vamos perdiendo el tamaño de lote decrece) A modo solo de observacion voy a postear los resultados con MM habilitado, un riesgo de 0.9% y manteniendo el resto de los parametros por defecto:
Strategy Tester Report
MCSoft_EA_3MA_v1.4
AlpariUK-Demo-Market (Build 646)
Símbolo
EURUSD (Euro vs US Dollar)
Período
30 minutos (M30) 2010.01.04 00:00 - 2014.05.30 23:30 (2010.01.01 - 2014.06.01)
Modelo
Cada tick (el método más preciso basado en todos los períodos menores disponibles)
Parámetros
ea_nombre="=== MCSoft_EA_3MA_v1.3 ==="; parametros_generales="===== PARAMETROS GENERALES ====="; ea_magic_number=12345; slip_page_en_pips=2; control_ordenes="===== CONTROL ORDENES ====="; permitir_ordenes_multiples=false; procesar_en_cierre=true; MoneyManagement="===== CONFIGURACION MONEY MANAGEMENT ====="; calcular_lotes=true; lotes_por_trade=1; porcentaje_riesgo_por_trade=0.9; HorarioTrading="===== CONTROL HORARIO ====="; habilitar_horario_trading=false; hora_inicio_trading="16:00"; hora_cierre_trading="11:30"; ControlPosiciones="===== CONTROL POSICIONES ====="; take_profit_en_pips=5; stop_loss_en_pips=9; TrailingStop="----- Configuracion Trailing Stop -----"; habilitar_trailing_stop=true; trailing_start_en_pips=1; trailing_stop_en_pips=1; SettingIndicadores="===== SETTING INDICADORES ====="; _Indicator="===== 3EMAS Cross Alert - Ciclo ====="; periodo_ma1=4; periodo_ma2=18; periodo_ma3=40; periodo_ma4=200;
Barras en la prueba
55653
Ticks modelados
65152566
Calidad del modelado
90.00%
Errores de gráficos mal agrupados
0
Depósito inicial
10000.00
Diferencial
2
Beneficio neto total
12640.64
Beneficio bruto
53574.30
Pérdida bruta
-40933.66
Factor de beneficio
1.31
Rentabilidad esperada
6.87
Disminución absoluta
457.67
Disminución maximal
1648.42 (7.17%)
Disminución relativa
7.17% (1648.42)
Total de operaciones
1840
Posiciones cortas (ganado %)
864 (83.91%)
Posiciones largas (ganado %)
976 (84.22%)
Operaciones de beneficios (% del total)
1547 (84.08%)
Operaciones de pérdidas (% del total)
293 (15.92%)
Mayor
Operaciones de beneficios
214.08
Operaciones de pérdidas
-207.00
Media
Operaciones de beneficios
34.63
Operaciones de pérdidas
-139.71
Máximo
ganancias consecutivas (beneficios en dinero)
61 (2257.96)
pérdidas consecutivas (pérdidas en dinero)
4 (-673.30)
Máximo
beneficios consecutivos (número de ganancias)
2257.96 (61)
pérdidas consecutivas (número de pérdidas)
-673.30 (4)
Media
ganancias consecutivas
6
pérdidas consecutivas
1
28676
Este ultimo backtest lo hice para verificar el funcionamiento del MM, pero creo que debemos seguir manejandonos con lote fijo en 1 (parametro por defecto) asi trabajamos todos sobre la misma base.
Espero sus comentarios.
Saludos a todos!!!!!!
Hola MCSoft (http://www.tradingunited.es/foro/members/mcsoft.html)
Como comente en otro mensaje me puse a trabajar con el BackTest del EA, la idea era probarlo en diferentes temporalidades y pares, para comenzar utilice el EURUSD en M30 y desde el 01/01/2010 al 26/06/2014 como en los test de tu post pero mis resultados son muy diferentes, utilice el EA sin tocar la configuración, aquí dejo el gráfico de la prueba.
28668
Mirando un Webinar en el foro sobre BackTest logre un modelado de datos de 99.90% pero igualmente los resultados no fueron buenos.
Podrías decirme si tengo que configurarlo de alguna forma en especial para poder obtener un resultado como el tuyo y así poder seguir con las pruebas.
Saludos
Gorowin.
Saludos amigos, estoy de nuevo con novedades sobre el EA 3EMA:
Hermo, me gusto mucho el estilo de codificación y las modificaciones que realizaste sobre el código, creo que ahora es mucho mas legible. Solo hice modificaciones menores y agregue algunos comentarios extra, pero me parece que ahora se entiende mucho mejor.
En cuanto a la operativa, la principal modificación que realice y por ello le cambié la versión a 1.2, es la siguiente:
Anteriormente el EA, procesaba al inicio de la barra, y calculaba los indicadores sobre el tick actual, por lo tanto, el valor actual de las EMAs, siempre se calculaba sobre la apertura de la barra. Ese comportamiento provocaba señales erroneas, porque muchas veces ocurría que una barra mientras se esta formando genera cruces de EMAs, y al terminar de formarse, el cruce desaparece. Entonces, si la barra al abrir mostraba una tendencia y al cerrar mostraba otra, provocaba que una operacion se abriera con la barra y se cerrara con la barra siguiente, no se si me explico bien.
La modificación consiste en reemplazar todos los indices de los calculos de los indicadores para que se calculen sobre la vela cerrada previa (vela 1) y la anterior (vela 2), al tick que se esta ejecutando.
Solo con esa modificación, el backtest paso de esto:
28585
Informe:
Backtesting entre 01/01/2010 -> 25/06/2014 - TF 30M
Depósito inicial: 10000.00
Diferencial: 2
Beneficio neto total: 6713.01
Factor de beneficio: 1.45
Rentabilidad esperada: 6.78
Disminución absoluta: 46.21
Disminución maximal: 962.23 (8.17%)
Disminución relativa: 8.17% (962.23)
Total de operaciones: 990
Posiciones cortas (ganado %): 468 (86.97%)
Posiciones largas (ganado %): 522 (87.36%)
Operaciones de beneficios (% del total): 863 (87.17%)
Operaciones de pérdidas (% del total): 127 (12.83%)
Mayor Operaciones de beneficios: 206.64
Mayor Operaciones de pérdidas: -153.00
Media Operaciones de beneficios: 25.12
Media Operaciones de pérdidas: -117.84
Máximo ganancias consecutivas (beneficios en dinero): 27 (826.18)
Máximo pérdidas consecutivas (pérdidas en dinero): 4 (-531.90)
Media ganancias consecutivas: 8
Media pérdidas consecutivas: 1
a esto:
28586
Informe:
Backtesting entre 01/01/2010 -> 25/06/2014 - TF 30M
Depósito inicial 10000.00
Diferencial 2
Beneficio neto total: 13768.01
Factor de beneficio: 1.33
Rentabilidad esperada: 7.34
Disminución absoluta: 458.45
Disminución maximal: 1659.23 (7.19%)
Disminución relativa: 7.19% (1659.23)
Total de operaciones: 1875
Posiciones cortas (ganado %) : 881 (84.00%)
Posiciones largas (ganado %): 994 (84.51%)
Operaciones de beneficios (% del total): 1580 (84.27%)
Operaciones de pérdidas (% del total): 295 (15.73%)
Mayor Operaciones de beneficios: 215.04
Mayor Operaciones de pérdidas: -216.00
Media Operaciones de beneficios: 35.16
Media Operaciones de pérdidas: -141.63
Máximo ganancias consecutivas (beneficios en dinero): 61 (2268.07)
Máximo pérdidas consecutivas (pérdidas en dinero): 4 (-677.24)
Media ganancias consecutivas: 7
Media pérdidas consecutivas: 1
Ahora me esta gustando mucho mas ja ja ja!!!!
Creo que con la modificacion que le realice se soluciona el problema que mencionabas sobre posiciones abiertas en el momento incorrecto, ahora las abre a vela cerrada, con el cruce confirmado.
En cuanto a los demás comentarios:
1- Sobre el stop_loss = 0 y take profit=0: Ya lo solucione con una pequeña modificacion a las funciones abrir_orden_buy y abrir_orden_sell. Dichas funciones, al intentar convertir pips a precio, generaban un precio erroneo cuando los pips pasados como parametro eran 0, entonces la orden se rechazaba.
2- "Echo de menos un control de spread, que se incluiria en los parametros generales."
Sinceramente no conozco que significa el control de spread (recuerda que soy muy novato en el trading). Si tienes una explicación o link que me puedas proporcionar lo veo y discutimos como implementarlo
3- "Echo de menos un autocontrol de digitos del broker, esto evitaria, como en este caso, tener que realizar multiplicaciones tanto del Take Profit, Stop Loss, Trailing... etc., dependiendo si trabajamos con un broker de 4 digitos o 5 digitos."
Voy a analizar el fragmento de código que me proporcionaste y lo voy a incluir en la proxima versión
4- "Y ya por ultimo que me expliques mejor por favor, estos dos parámetros:
calcular_lotes = true; // Calcular valor del lote
Este parámetro entiendo que quieres utilizar un tanto % del valor de la Equity si no me equivoco, corrígeme si estoy en lo cierto."
Es correcto, quiero calcular el valor del lote a emplear en base al riesgo que deseo tomar en cada operación, esto es algo que aún lo tengo muy verde en mi cabeza, por eso acepto sugerencias y recomendaciones
5- "La opcion habilitar_trailing_take_profit"
Esta opcion la codifique con mi poco conocimiento de la jerga del trading, por ello espero que me corrijan. La idea es que cuando esta opcion esta habilitada, al momento de hacer trailing stop sobre una orden, si se modifica el mismo, el take profit también se modifique siguiendolo. En principio, esto permite que las operaciones que estan ganando, por ejemplo compras, vayan aumentando stop loss para proteger los beneficios ganandos y tambien subiendo al mismo tiempo el take profit con la esperanza de agarrar una tendencia larga y obtener mas beneficios.
Vuelvo a repetir, no se si hay un nombre especial para este comportamiento, si es asi lo cambiamos para que quede correcto.
Adjunto entonces la nueva version del EA y espero comentarios:
28587
Saludos!!!!
Hola.
Primero que nada agradecer a todos por su trabajo y dedicación.
Verdaderamente es muy interesante el tema, si bien no soy programador estoy tratando de comprender un poco mas el funcionamiento de estos EA.
En primer lugar voy a tratar de ver el código y luego voy a hacer un Back Test en diferentes temporalidades y con diferentes pares a ver como resulta.
Luego tratare de publicar los diferentes resultados.
Gorowin.
Buenas tardes a todos.
Hola MCSoft:
1 - Respecto al primer punto todavía no he tenido tiempo de revisar y hacer las pertinentes comprobaciones, según tenga un ratito me pongo con ello y os cuento.
2 -Tema spread, en esta EA puede ser no relevante, aunque con matices y ya que existen matices y estamos tratando el tema de automatización, no podemos dejarlo a un lado, el tema del spread es muy importante, cualquier programación seria tiene que contemplarlo y no solo eso, si no también tener en cuenta las posibles consecuencias que ello genera, me explico. Es fácil programar que hacer si en el momento de ejecutar la orden el spread existente en ese momento supera el límite permitido, pero lo más complicado es como tiene que reaccionar la EA ante esa circunstancia, lo más habitual es que no opere, que no lance ordenes, pero también tenemos que programar cuando volver a dejarla operar ... etc, como cada programación es diferente, bueno cada estrategia es diferente, en el caso de esta Ea yo lo tengo claro, si te pasas del spread permitido en un cruce, hasta que se vuelva a dar otro cruce diferente no te dejo operar. Parece una chorrada pero como este tema lo tenemos que ver en una situación real, esto tiene que quedar bien claro.
Para que te hagas una idea te adjunto un código de un EA que lo contempla, después tu, ya lo tienes que adaptar a las circunstancias de este EA, la gran mayoría de los códigos que contienen este control, solo contemplan el que hacer en ese momento y no lo que tienen que hacer después de que eso suceda, y para mi es tan importante uno como otro.
3 - Lo tienes también en el código que te adjunto, es mas menos las líneas de código que te adjunto en un post anterior, lo mismo, que cuando pongamos en Take Profit = 50 sean 50 pips en un bróker de 4 o 5 dígitos, es la Ea la que tiene que saberlo y hacer el cálculo pertinente.
4 - Respecto de este tema comparto lo que dice Ciclo, lo vemos más adelante, primero lo básico, que todo funcione correctamente, después las mejoras. De todos modos también tienes ejemplos en el código que te adjunto.
5 - Con el Trailing sobre el Take profit, me has sorprendido es la primera vez que lo veo, y de entrada te digo que sobra, si está bien programado el precio nunca lo alcanzaría por mucho que corra el precio, tendrías que programarlo con condicionantes para que en algún momento el precio lo pudiera alcanzar, piensa que es más sencillo, un trailing Stop sin Take Profit, es decir, yo he visto EAs que una vez que el Trailing Stop se activa y está por encima o debajo del nivel de entrada, el stop loss me refiero, es decir estamos en beneficio, la EA elimina el Take Profit, por lo tanto ya tiene cancha el precio para correr todo lo que quiera, no tiene techo, de ese modo lo veo más factible.
Hola Ciclo:
6 - Ya conteste si no me equivoco, comparto lo que dice Ciclo, aunque claro está, es un trabajo que estas realizando tú para la comunidad, si lo tuviera que encargar a un desarrollador, yo solicitaría el máximo número de MoneyManagement posibles, ya después filtraríamos.
7 - Para lo que comenta Ciclo en el punto 7, es tan sencillo como añadir un filtro horario, tienes un buen ejemplo en el código que te adjunto, incluso tiene selección de servidor y opción de cierre de posición el viernes.
8 - Ciclo, si no te he entendido bien, corrígeme, pero la EA ya tiene la opción de deshabilitar el Trailing Stop o de ponérselo mas holgado, como tú quieras, no le he probado, es decir no sé si funciona correctamente, pero en los parámetros de la EA figura.
28612
Otro concepto que en determinadas EAs funciona muy bien es añadirle el parámetro Step al Trailing Stop, un condicionante mas para el movimiento del Trailing, le obligas a que espere el valor que tu hayas establecido en este parámetro es decir se lo suma al Trailing, también está incluido en el código que te adjunto, por si te interesa verlo y añadirlo.
Bueno cuando tenga un ratito reviso el funcionamiento de la nueva versión y comento.
Un saludo.
Hermo.
:)
Hola Hermo.
Fenomenal. Buena informacion, con eso yo creo que tendriamos un Experto bastante completo.
Lo del apartado 8, me refiero a que los bactesting se podrian probar o bien deshabilitando el trailing stop (desde el programa claro) o bien dando mas holgura a trailing para dar oportunidad de hacer grandes recorridos. Aunque supongo que el momento de la optimizacion sera una tarea algo larga para comprobar cual es la mejor combinacion de parametros. Especialmente el tema de los trailing, los stops etc. El stop hace poca falta con las propias medias y menos falta aun con el propio trailing stop.
Yo en principio no tocacaria las medias. Si acaso al final las tocaria pero sin sobreoptimizar mucho. Pero no soy un experto en ese tema, solo puedo sugerir ideas mas o menos válidas.
Saludos y gracias por el gran aporte.
1- Sobre el stop_loss = 0 y take profit=0: Ya lo solucione con una pequeña modificacion a las funciones abrir_orden_buy y abrir_orden_sell. Dichas funciones, al intentar convertir pips a precio, generaban un precio erroneo cuando los pips pasados como parametro eran 0, entonces la orden se rechazaba.
2- "Echo de menos un control de spread, que se incluiria en los parametros generales."
Sinceramente no conozco que significa el control de spread (recuerda que soy muy novato en el trading). Si tienes una explicación o link que me puedas proporcionar lo veo y discutimos como implementarlo
3- "Echo de menos un autocontrol de digitos del broker, esto evitaria, como en este caso, tener que realizar multiplicaciones tanto del Take Profit, Stop Loss, Trailing... etc., dependiendo si trabajamos con un broker de 4 digitos o 5 digitos."
Voy a analizar el fragmento de código que me proporcionaste y lo voy a incluir en la proxima versión
4- "Y ya por ultimo que me expliques mejor por favor, estos dos parámetros:
calcular_lotes = true; // Calcular valor del lote
Este parámetro entiendo que quieres utilizar un tanto % del valor de la Equity si no me equivoco, corrígeme si estoy en lo cierto."
Es correcto, quiero calcular el valor del lote a emplear en base al riesgo que deseo tomar en cada operación, esto es algo que aún lo tengo muy verde en mi cabeza, por eso acepto sugerencias y recomendaciones
5- "La opcion habilitar_trailing_take_profit"
Esta opcion la codifique con mi poco conocimiento de la jerga del trading, por ello espero que me corrijan. La idea es que cuando esta opcion esta habilitada, al momento de hacer trailing stop sobre una orden, si se modifica el mismo, el take profit también se modifique siguiendolo. En principio, esto permite que las operaciones que estan ganando, por ejemplo compras, vayan aumentando stop loss para proteger los beneficios ganandos y tambien subiendo al mismo tiempo el take profit con la esperanza de agarrar una tendencia larga y obtener mas beneficios.
Vuelvo a repetir, no se si hay un nombre especial para este comportamiento, si es asi lo cambiamos para que quede correcto.
6- Lo de la gestion de lotes y riesgo etc, yo lo dejaria para el final. Yo creo que tengo buenas ideas para eso y no es dificil. Yo de momento operaria con una unidad, 1 lote, 1 minilote etc. para ver el comportamiento del sistema sin ayuda de MM.
7 - Sugerencia para mejorar el sistema: Abrir operaciones solo entre la apertura de Frankfur y el cierre de Londres. Creo que esto puede mejorar mucho la estadistica por que nos ahorramos los rangos que suele haber en la sesion asiatica.
8 -Con esto yo probaria a inhabilitar el trailing stop o darle mas espacio, por que aunque mejora el porcentaje de ganadoras, cierra las operaciones muy pronto. Si conseguimos aumentar el porcentaje de ganadoras sin el trailing stop, o un trailing mas holgado, podremos aumentar el ratio W/L de forma espectacular y aumentar bastante el Factor de beneficio que lo veo algo pobre.
Buenas tardes a todos.
Hola MCSoft:
1 - Respecto al primer punto todavía no he tenido tiempo de revisar y hacer las pertinentes comprobaciones, según tenga un ratito me pongo con ello y os cuento.
2 -Tema spread, en esta EA puede ser no relevante, aunque con matices y ya que existen matices y estamos tratando el tema de automatización, no podemos dejarlo a un lado, el tema del spread es muy importante, cualquier programación seria tiene que contemplarlo y no solo eso, si no también tener en cuenta las posibles consecuencias que ello genera, me explico. Es fácil programar que hacer si en el momento de ejecutar la orden el spread existente en ese momento supera el límite permitido, pero lo más complicado es como tiene que reaccionar la EA ante esa circunstancia, lo más habitual es que no opere, que no lance ordenes, pero también tenemos que programar cuando volver a dejarla operar ... etc, como cada programación es diferente, bueno cada estrategia es diferente, en el caso de esta Ea yo lo tengo claro, si te pasas del spread permitido en un cruce, hasta que se vuelva a dar otro cruce diferente no te dejo operar. Parece una chorrada pero como este tema lo tenemos que ver en una situación real, esto tiene que quedar bien claro.
Para que te hagas una idea te adjunto un código de un EA que lo contempla, después tu, ya lo tienes que adaptar a las circunstancias de este EA, la gran mayoría de los códigos que contienen este control, solo contemplan el que hacer en ese momento y no lo que tienen que hacer después de que eso suceda, y para mi es tan importante uno como otro.
3 - Lo tienes también en el código que te adjunto, es mas menos las líneas de código que te adjunto en un post anterior, lo mismo, que cuando pongamos en Take Profit = 50 sean 50 pips en un bróker de 4 o 5 dígitos, es la Ea la que tiene que saberlo y hacer el cálculo pertinente.
4 - Respecto de este tema comparto lo que dice Ciclo, lo vemos más adelante, primero lo básico, que todo funcione correctamente, después las mejoras. De todos modos también tienes ejemplos en el código que te adjunto.
5 - Con el Trailing sobre el Take profit, me has sorprendido es la primera vez que lo veo, y de entrada te digo que sobra, si está bien programado el precio nunca lo alcanzaría por mucho que corra el precio, tendrías que programarlo con condicionantes para que en algún momento el precio lo pudiera alcanzar, piensa que es más sencillo, un trailing Stop sin Take Profit, es decir, yo he visto EAs que una vez que el Trailing Stop se activa y está por encima o debajo del nivel de entrada, el stop loss me refiero, es decir estamos en beneficio, la EA elimina el Take Profit, por lo tanto ya tiene cancha el precio para correr todo lo que quiera, no tiene techo, de ese modo lo veo más factible.
Hola Ciclo:
6 - Ya conteste si no me equivoco, comparto lo que dice Ciclo, aunque claro está, es un trabajo que estas realizando tú para la comunidad, si lo tuviera que encargar a un desarrollador, yo solicitaría el máximo número de MoneyManagement posibles, ya después filtraríamos.
7 - Para lo que comenta Ciclo en el punto 7, es tan sencillo como añadir un filtro horario, tienes un buen ejemplo en el código que te adjunto, incluso tiene selección de servidor y opción de cierre de posición el viernes.
8 - Ciclo, si no te he entendido bien, corrígeme, pero la EA ya tiene la opción de deshabilitar el Trailing Stop o de ponérselo mas holgado, como tú quieras, no le he probado, es decir no sé si funciona correctamente, pero en los parámetros de la EA figura.
28612
Otro concepto que en determinadas EAs funciona muy bien es añadirle el parámetro Step al Trailing Stop, un condicionante mas para el movimiento del Trailing, le obligas a que espere el valor que tu hayas establecido en este parámetro es decir se lo suma al Trailing, también está incluido en el código que te adjunto, por si te interesa verlo y añadirlo.
Bueno cuando tenga un ratito reviso el funcionamiento de la nueva versión y comento.
Un saludo.
Hermo.
Hola mc esta es tu empresa? McSoft | Software a medida | Dise (http://www.mcsoft.cl/) me gustaria desarrollar un proyecto en C + es decir metatrader y expert advisor si te interesa manda un correo a
[email protected] (
[email protected]) puede funcionar bien con tus conocimientos de programacion y mi experiencia en forex .Feliz dia
thebarbarian, buenos dias.
Me interesaria saber mas del proyecto, envié un mail pero no recibi respuesta. Mi correo es
[email protected]
Saludos
Saludos amigos, estoy de nuevo con novedades sobre el EA 3EMA:
Hermo, me gusto mucho el estilo de codificación y las modificaciones que realizaste sobre el código, creo que ahora es mucho mas legible. Solo hice modificaciones menores y agregue algunos comentarios extra, pero me parece que ahora se entiende mucho mejor.
En cuanto a la operativa, la principal modificación que realice y por ello le cambié la versión a 1.2, es la siguiente:
Anteriormente el EA, procesaba al inicio de la barra, y calculaba los indicadores sobre el tick actual, por lo tanto, el valor actual de las EMAs, siempre se calculaba sobre la apertura de la barra. Ese comportamiento provocaba señales erroneas, porque muchas veces ocurría que una barra mientras se esta formando genera cruces de EMAs, y al terminar de formarse, el cruce desaparece. Entonces, si la barra al abrir mostraba una tendencia y al cerrar mostraba otra, provocaba que una operacion se abriera con la barra y se cerrara con la barra siguiente, no se si me explico bien.
La modificación consiste en reemplazar todos los indices de los calculos de los indicadores para que se calculen sobre la vela cerrada previa (vela 1) y la anterior (vela 2), al tick que se esta ejecutando.
Solo con esa modificación, el backtest paso de esto:
28585
Informe:
Backtesting entre 01/01/2010 -> 25/06/2014 - TF 30M
Depósito inicial: 10000.00
Diferencial: 2
Beneficio neto total: 6713.01
Factor de beneficio: 1.45
Rentabilidad esperada: 6.78
Disminución absoluta: 46.21
Disminución maximal: 962.23 (8.17%)
Disminución relativa: 8.17% (962.23)
Total de operaciones: 990
Posiciones cortas (ganado %): 468 (86.97%)
Posiciones largas (ganado %): 522 (87.36%)
Operaciones de beneficios (% del total): 863 (87.17%)
Operaciones de pérdidas (% del total): 127 (12.83%)
Mayor Operaciones de beneficios: 206.64
Mayor Operaciones de pérdidas: -153.00
Media Operaciones de beneficios: 25.12
Media Operaciones de pérdidas: -117.84
Máximo ganancias consecutivas (beneficios en dinero): 27 (826.18)
Máximo pérdidas consecutivas (pérdidas en dinero): 4 (-531.90)
Media ganancias consecutivas: 8
Media pérdidas consecutivas: 1
a esto:
28586
Informe:
Backtesting entre 01/01/2010 -> 25/06/2014 - TF 30M
Depósito inicial 10000.00
Diferencial 2
Beneficio neto total: 13768.01
Factor de beneficio: 1.33
Rentabilidad esperada: 7.34
Disminución absoluta: 458.45
Disminución maximal: 1659.23 (7.19%)
Disminución relativa: 7.19% (1659.23)
Total de operaciones: 1875
Posiciones cortas (ganado %) : 881 (84.00%)
Posiciones largas (ganado %): 994 (84.51%)
Operaciones de beneficios (% del total): 1580 (84.27%)
Operaciones de pérdidas (% del total): 295 (15.73%)
Mayor Operaciones de beneficios: 215.04
Mayor Operaciones de pérdidas: -216.00
Media Operaciones de beneficios: 35.16
Media Operaciones de pérdidas: -141.63
Máximo ganancias consecutivas (beneficios en dinero): 61 (2268.07)
Máximo pérdidas consecutivas (pérdidas en dinero): 4 (-677.24)
Media ganancias consecutivas: 7
Media pérdidas consecutivas: 1
Ahora me esta gustando mucho mas ja ja ja!!!!
Creo que con la modificacion que le realice se soluciona el problema que mencionabas sobre posiciones abiertas en el momento incorrecto, ahora las abre a vela cerrada, con el cruce confirmado.
En cuanto a los demás comentarios:
1- Sobre el stop_loss = 0 y take profit=0: Ya lo solucione con una pequeña modificacion a las funciones abrir_orden_buy y abrir_orden_sell. Dichas funciones, al intentar convertir pips a precio, generaban un precio erroneo cuando los pips pasados como parametro eran 0, entonces la orden se rechazaba.
2- "Echo de menos un control de spread, que se incluiria en los parametros generales."
Sinceramente no conozco que significa el control de spread (recuerda que soy muy novato en el trading). Si tienes una explicación o link que me puedas proporcionar lo veo y discutimos como implementarlo
3- "Echo de menos un autocontrol de digitos del broker, esto evitaria, como en este caso, tener que realizar multiplicaciones tanto del Take Profit, Stop Loss, Trailing... etc., dependiendo si trabajamos con un broker de 4 digitos o 5 digitos."
Voy a analizar el fragmento de código que me proporcionaste y lo voy a incluir en la proxima versión
4- "Y ya por ultimo que me expliques mejor por favor, estos dos parámetros:
calcular_lotes = true; // Calcular valor del lote
Este parámetro entiendo que quieres utilizar un tanto % del valor de la Equity si no me equivoco, corrígeme si estoy en lo cierto."
Es correcto, quiero calcular el valor del lote a emplear en base al riesgo que deseo tomar en cada operación, esto es algo que aún lo tengo muy verde en mi cabeza, por eso acepto sugerencias y recomendaciones
5- "La opcion habilitar_trailing_take_profit"
Esta opcion la codifique con mi poco conocimiento de la jerga del trading, por ello espero que me corrijan. La idea es que cuando esta opcion esta habilitada, al momento de hacer trailing stop sobre una orden, si se modifica el mismo, el take profit también se modifique siguiendolo. En principio, esto permite que las operaciones que estan ganando, por ejemplo compras, vayan aumentando stop loss para proteger los beneficios ganandos y tambien subiendo al mismo tiempo el take profit con la esperanza de agarrar una tendencia larga y obtener mas beneficios.
Vuelvo a repetir, no se si hay un nombre especial para este comportamiento, si es asi lo cambiamos para que quede correcto.
Adjunto entonces la nueva version del EA y espero comentarios:
28587
Saludos!!!!
:)
Lo de la gestion de lotes y riesgo etc, yo lo dejaria para el final. Yo creo que tengo buenas ideas para eso y no es dificil. Yo de momento operaria con una unidad, 1 lote, 1 minilote etc. para ver el comportamiento del sistema sin ayuda de MM.
Sugerencia para mejorar el sistema: Abrir operaciones solo entre la apertura de Frankfur y el cierre de Londres. Creo que esto puede mejorar mucho la estadistica por que nos ahorramos los rangos que suele haber en la sesion asiatica.
Con esto yo probaria a inhabilitar el trailing stop o darle mas espacio, por que aunque mejora el porcentaje de ganadoras, cierra las operaciones muy pronto. Si conseguimos aumentar el porcentaje de ganadoras sin el trailing stop, o un trailing mas holgado, podremos aumentar el ratio W/L de forma espectacular y aumentar bastante el Factor de beneficio que lo veo algo pobre.
Saludos.
:contento2:
Saludos amigos, estoy de nuevo con novedades sobre el EA 3EMA:
Hermo, me gusto mucho el estilo de codificación y las modificaciones que realizaste sobre el código, creo que ahora es mucho mas legible. Solo hice modificaciones menores y agregue algunos comentarios extra, pero me parece que ahora se entiende mucho mejor.
En cuanto a la operativa, la principal modificación que realice y por ello le cambié la versión a 1.2, es la siguiente:
Anteriormente el EA, procesaba al inicio de la barra, y calculaba los indicadores sobre el tick actual, por lo tanto, el valor actual de las EMAs, siempre se calculaba sobre la apertura de la barra. Ese comportamiento provocaba señales erroneas, porque muchas veces ocurría que una barra mientras se esta formando genera cruces de EMAs, y al terminar de formarse, el cruce desaparece. Entonces, si la barra al abrir mostraba una tendencia y al cerrar mostraba otra, provocaba que una operacion se abriera con la barra y se cerrara con la barra siguiente, no se si me explico bien.
La modificación consiste en reemplazar todos los indices de los calculos de los indicadores para que se calculen sobre la vela cerrada previa (vela 1) y la anterior (vela 2), al tick que se esta ejecutando.
Solo con esa modificación, el backtest paso de esto:
28585
Informe:
Backtesting entre 01/01/2010 -> 25/06/2014 - TF 30M
Depósito inicial: 10000.00
Diferencial: 2
Beneficio neto total: 6713.01
Factor de beneficio: 1.45
Rentabilidad esperada: 6.78
Disminución absoluta: 46.21
Disminución maximal: 962.23 (8.17%)
Disminución relativa: 8.17% (962.23)
Total de operaciones: 990
Posiciones cortas (ganado %): 468 (86.97%)
Posiciones largas (ganado %): 522 (87.36%)
Operaciones de beneficios (% del total): 863 (87.17%)
Operaciones de pérdidas (% del total): 127 (12.83%)
Mayor Operaciones de beneficios: 206.64
Mayor Operaciones de pérdidas: -153.00
Media Operaciones de beneficios: 25.12
Media Operaciones de pérdidas: -117.84
Máximo ganancias consecutivas (beneficios en dinero): 27 (826.18)
Máximo pérdidas consecutivas (pérdidas en dinero): 4 (-531.90)
Media ganancias consecutivas: 8
Media pérdidas consecutivas: 1
a esto:
28586
Informe:
Backtesting entre 01/01/2010 -> 25/06/2014 - TF 30M
Depósito inicial 10000.00
Diferencial 2
Beneficio neto total: 13768.01
Factor de beneficio: 1.33
Rentabilidad esperada: 7.34
Disminución absoluta: 458.45
Disminución maximal: 1659.23 (7.19%)
Disminución relativa: 7.19% (1659.23)
Total de operaciones: 1875
Posiciones cortas (ganado %) : 881 (84.00%)
Posiciones largas (ganado %): 994 (84.51%)
Operaciones de beneficios (% del total): 1580 (84.27%)
Operaciones de pérdidas (% del total): 295 (15.73%)
Mayor Operaciones de beneficios: 215.04
Mayor Operaciones de pérdidas: -216.00
Media Operaciones de beneficios: 35.16
Media Operaciones de pérdidas: -141.63
Máximo ganancias consecutivas (beneficios en dinero): 61 (2268.07)
Máximo pérdidas consecutivas (pérdidas en dinero): 4 (-677.24)
Media ganancias consecutivas: 7
Media pérdidas consecutivas: 1
Ahora me esta gustando mucho mas ja ja ja!!!!
Creo que con la modificacion que le realice se soluciona el problema que mencionabas sobre posiciones abiertas en el momento incorrecto, ahora las abre a vela cerrada, con el cruce confirmado.
En cuanto a los demás comentarios:
1- Sobre el stop_loss = 0 y take profit=0: Ya lo solucione con una pequeña modificacion a las funciones abrir_orden_buy y abrir_orden_sell. Dichas funciones, al intentar convertir pips a precio, generaban un precio erroneo cuando los pips pasados como parametro eran 0, entonces la orden se rechazaba.
2- "Echo de menos un control de spread, que se incluiria en los parametros generales."
Sinceramente no conozco que significa el control de spread (recuerda que soy muy novato en el trading). Si tienes una explicación o link que me puedas proporcionar lo veo y discutimos como implementarlo
3- "Echo de menos un autocontrol de digitos del broker, esto evitaria, como en este caso, tener que realizar multiplicaciones tanto del Take Profit, Stop Loss, Trailing... etc., dependiendo si trabajamos con un broker de 4 digitos o 5 digitos."
Voy a analizar el fragmento de código que me proporcionaste y lo voy a incluir en la proxima versión
4- "Y ya por ultimo que me expliques mejor por favor, estos dos parámetros:
calcular_lotes = true; // Calcular valor del lote
Este parámetro entiendo que quieres utilizar un tanto % del valor de la Equity si no me equivoco, corrígeme si estoy en lo cierto."
Es correcto, quiero calcular el valor del lote a emplear en base al riesgo que deseo tomar en cada operación, esto es algo que aún lo tengo muy verde en mi cabeza, por eso acepto sugerencias y recomendaciones
5- "La opcion habilitar_trailing_take_profit"
Esta opcion la codifique con mi poco conocimiento de la jerga del trading, por ello espero que me corrijan. La idea es que cuando esta opcion esta habilitada, al momento de hacer trailing stop sobre una orden, si se modifica el mismo, el take profit también se modifique siguiendolo. En principio, esto permite que las operaciones que estan ganando, por ejemplo compras, vayan aumentando stop loss para proteger los beneficios ganandos y tambien subiendo al mismo tiempo el take profit con la esperanza de agarrar una tendencia larga y obtener mas beneficios.
Vuelvo a repetir, no se si hay un nombre especial para este comportamiento, si es asi lo cambiamos para que quede correcto.
Adjunto entonces la nueva version del EA y espero comentarios:
28587
Saludos!!!!
:reir:
Bueno, el que ponia solo compra sera igual pero he habilitado la venta y he quitado del titulo lo de "solo compra" y ya está.
Está magnifico MCSoft, se nota que eres un profesional. Todavia no me lo he mirado a fondo por que tiene bastante tela y quiero imprimirlo primero para estudiarlo mejor.
Una preguntilla (seguro que habrá mas). ¿La habilitacion del trailing_take_profit que es lo que hace?
¿La operacion se cierra por lo primero que ocurra entre stop loss, situacion no ordenada de medias y take profit?
Un saludo amigo
:D
Gracias Ciclo por el cumplido.
En cuanto a la opción trailing_take_profit, funciona en conjunto con el trailing stop de la siguiente manera (lo escribo en pseudocodigo):
Este bloque de codigo se ejecuta para todas las ordenes abiertas y en cada tick:
habilitar_trailing_stop es igual a true?
SI:
{
La orden abierta tiene un beneficio mayor a trailing_start_en_pips?
SI:
{
Calcular un valor de stop loss a una distancia trailing_stop_en_pips del stop loss actual de la orden.
El nuevo stop loss esta arriba (orden buy) o debajo (orden sell) del stop actual de la orden?
SI:
{
modificar el stop loss de la orden, seteando el stop loss calculado
habilitar_trailing_take_profit es igual a true?
SI:
{
mover el take profit de la orden el mismo numero de pips que se movio el stop loss
}
}
}
}
La opcion habilitar_trailing_take_profit indica si al modificar el stop_loss de la orden, el take profit se modifica o no.
Si esta habilitado, una operación buy cuando esta abierta y el precio sube iria subiendo al mismo tiempo el stop loss y el take profit, y solo se cerraria si el precio retrocede y alcanza el nuevo stop loss (en realidad se puede cerrar por take profir si el precio sube lo suficientemente rapido entre un tick y el siguiente).
Estoy describiendo el detalle de como opera esta funcion porque seguramente ese comportamiento tenga otro nombre en la jerga del trading, que yo sinceramente desconozco. Pido por favor a la gente mas experimentada si este comportamiento tiene otro nombre lo modifico para que refleje la realidad.
En cuanto a tu segunda pregunta, si, las operaciones se cierran por take profit, stop loss (ambas cerradas por el broker) o por el cruce de alguna media que genere un cambio de tendencia (como lo hace el indicador cuando coloca un simbolo "X" en el gráfico).
Espero comentarios para seguir avanzando, y cualquier duda sobre el código la responderé con gusto, creo que es importante que se entienda bien lo que se hizo hasta ahora para seguir adelante.
Saludos!!!!!
A mi me funciona la descarga, pero no hay problema, te los acabo de enviar por correo.
Saludos!!!!
:reir:
Bueno, el que ponia solo compra sera igual pero he habilitado la venta y he quitado del titulo lo de "solo compra" y ya está.
Está magnifico MCSoft, se nota que eres un profesional. Todavia no me lo he mirado a fondo por que tiene bastante tela y quiero imprimirlo primero para estudiarlo mejor.
Una preguntilla (seguro que habrá mas). ¿La habilitacion del trailing_take_profit que es lo que hace?
¿La operacion se cierra por lo primero que ocurra entre stop loss, situacion no ordenada de medias y take profit?
Un saludo amigo
:D
:contento2:
Hola MCSoft, No se que pasa pero no me funciona, no puedo bajar estos dos archivos.
Saludos.
A mi me funciona la descarga, pero no hay problema, te los acabo de enviar por correo.
Saludos!!!!
Ciclo buenos dias,
adjunto el EA original (solo hace operaciones de compra, las operaciones de venta estan como comentario pero se pueden habilitar), y su modificacion con el agregado de la media de 200 para verificar la tendencia a largo plazo (version 1.1 hace operaciones de compra y venta).
En una respuesta a Hermo aparece el backtesting del ultimo y es mucho mas prometedor que el primero (tener en cuenta que todavia no se han hecho optimizaciones)
28568
28570
Saludos!!!!
:contento2:
Hola MCSoft, No se que pasa pero no me funciona, no puedo bajar estos dos archivos.
Saludos.
MCSoft este archivo es el indicador, no es el EA. ¿Puedes subirlo por favor? Gracias.
Ciclo buenos dias,
adjunto el EA original (solo hace operaciones de compra, las operaciones de venta estan como comentario pero se pueden habilitar), y su modificacion con el agregado de la media de 200 para verificar la tendencia a largo plazo (version 1.1 hace operaciones de compra y venta).
En una respuesta a Hermo aparece el backtesting del ultimo y es mucho mas prometedor que el primero (tener en cuenta que todavia no se han hecho optimizaciones)
28568
28570
Saludos!!!!
Buenas tardes a todos:
Hola MCSoft, como ya comente en mi ultimo post en este tema, lo primero es lo primero.
Una vez que la parte de programacion a terminado el primer prototipo, toca probarlo y cuando digo probarlo, me refiero, a si hace las cosas correctamente, no a sacar buenos resultados o malos resultados.
Lo primero comentarte que le he dado un repaso al codigo y a sus explicaciones y me he atrevido a ordenarlo segun mi criterio, espero que esto cause debate, es decir, por intuicion he colocado los apartados de otro modo a como tu los tenias, espero y ruego no te moleste esto por favor, ahora toca saber si lo he realizado correctamente. Cuando digo que lo ordenado, me refiero a que lo poco que se de codigo, nos dice que aunque la colocacion realmente no es importante a la hora de leerlo la maquina si que influye en rapidez, por lo tanto, he tratado de seguir una logica, espero que me comentes si es coherente la logica que he seguido o no.
A continuacion hice un backtest de prueba, es decir, lanza correctamente las operaciones, te adelanto que por desgracia o estoy equivocado en la logica de la EA o no lo hace correctamente.
Imagen que muestra donde las ha lanzado y donde las deberia de haber lanzado.
28561
Por lo tanto eso es lo primero que debemos de corregir, en el setting de la EA tenia configurado que ejecutase las ordenes a cierre de vela, o lo que es lo mismo, a la apertura de la nueva vela despues de la señal.
Por otro lado tambien hice la siguiente prueba, que desde la logica que yo entiendo de la EA, deberia de funcionar en modo semicontinuo, es decir si Take Profit y Stop Loss = 0, cuando se dan las condiciones de compra, compro y se cerraria la operacion cuando una de las medias no este alineada, lo mismo para las ventas.
Y como puedes comprobar en la imagen no hace nada, adjunto imagen del setting utilizado para esta segunda prueba.
28562
28563
Y ya puestos a pedir, pidamos:
1º Echo de menos un control de spread, que se incluiria en los parametros generales.
2º Echo de menos un autocontrol de digitos del broker, esto evitaria, como en este caso, tener que realizar multiplicaciones tanto del Take Profit, Stop Loss, Trailing... etc., dependiendo si trabajamos con un broker de 4 digitos o 5 digitos.
Algo parecido a esto:
int DecimalPoints, digit, pipMultiplier;
//***********************************************
int OnInit()
{
DecimalPoints = 1;
double x = MarketInfo(Symbol(), MODE_LOTSTEP) * 10;
while (x < 1)
{
x *= 10; DecimalPoints += 1;
}
digit = _Digits;
if (digit==2 || digit==4) pipMultiplier = 1;
if (digit==3 || digit==5) pipMultiplier = 10;
if (digit==6) pipMultiplier = 100;
return(INIT_SUCCEEDED);
}
3º Echo de menos, aunque de momento no es importante, en los parámetros generales un control de que si el Bróker es ECN o no, por el tema de modificación de órdenes.
Y ya por ultimo que me expliques mejor por favor, estos dos parámetros:
calcular_lotes = true; // Calcular valor del lote.
Este parámetro entiendo que quieres utilizar un tanto % del valor de la Equity si no me equivoco, corrígeme si estoy en lo cierto.
habilitar_trailing_take_profit = false;
Con este me matas, no lo entiendo, ¿desplazar el take profit según vaya la operación a nuestro favor?¿que valores utiliza para desplazarlo?. No sé si lo que pregunto tiene coherencia pero es lo que me vino a la cabeza.
Espero no ser muy molesto, pero esto es asi.
Un fuerte abrazo.
Y muchas gracias por el gran trabajo que estas realizando.
Hermo.
PD. Adjunto el EA tal y como yo la deje, por favor ruego compruebes que no he metido la pata en nada y espero que no te moleste esta incursion en tu codigo.
Hermo buenos dias.
Antes que nada, en respuesta a tu consulta y en general para cualquiera de los participantes del tema quiero aclarar que no me molesta en absoluto que modifiquen el código, todo lo contrario, me gustaría que todos hagamos modificaciones, ya que no hay una sola manera de hacer las cosas.
Voy a descargar el codigo modificado y a analizarlo paso por paso sobre las cuestiones que me indicas.
Quería adelantar que segui la sugerencia de Ciclo y le agregue una media de promedio 200 para verificar la tendencia a largo plazo, y este es el resultado que he obtenido:
28566
Informe:
Backtesting entre 01/01/2010 -> 25/06/2014 - TF 30M
Depósito inicial: 10000.00
Diferencial: 2
Beneficio neto total: 6713.01
Factor de beneficio: 1.45
Rentabilidad esperada: 6.78
Disminución absoluta: 46.21
Disminución maximal: 962.23 (8.17%)
Disminución relativa: 8.17% (962.23)
Total de operaciones: 990
Posiciones cortas (ganado %): 468 (86.97%)
Posiciones largas (ganado %): 522 (87.36%)
Operaciones de beneficios (% del total): 863 (87.17%)
Operaciones de pérdidas (% del total): 127 (12.83%)
Mayor Operaciones de beneficios: 206.64
Mayor Operaciones de pérdidas: -153.00
Media Operaciones de beneficios: 25.12
Media Operaciones de pérdidas: -117.84
Máximo ganancias consecutivas (beneficios en dinero): 27 (826.18)
Máximo pérdidas consecutivas (pérdidas en dinero): 4 (-531.90)
Media ganancias consecutivas: 8
Media pérdidas consecutivas: 1
Con el agregado de la condicion de la media 200 ahora el EA esta haciendo operaciones tanto de compra como de venta.
Adjunto esta nueva versión:
28567
Luego de analizar el codigo que subiste voy a fusionar ambos para ir manteniendo el orden, cualquier sugerencia como siempre es bienvenida.
Saludos!!!!
Este es el código completo del EA:
28529
MCSoft este archivo es el indicador, no es el EA. ¿Puedes subirlo por favor? Gracias.
Buenas tardes a todos:
Hola MCSoft, como ya comente en mi ultimo post en este tema, lo primero es lo primero.
Una vez que la parte de programacion a terminado el primer prototipo, toca probarlo y cuando digo probarlo, me refiero, a si hace las cosas correctamente, no a sacar buenos resultados o malos resultados.
Lo primero comentarte que le he dado un repaso al codigo y a sus explicaciones y me he atrevido a ordenarlo segun mi criterio, espero que esto cause debate, es decir, por intuicion he colocado los apartados de otro modo a como tu los tenias, espero y ruego no te moleste esto por favor, ahora toca saber si lo he realizado correctamente. Cuando digo que lo ordenado, me refiero a que lo poco que se de codigo, nos dice que aunque la colocacion realmente no es importante a la hora de leerlo la maquina si que influye en rapidez, por lo tanto, he tratado de seguir una logica, espero que me comentes si es coherente la logica que he seguido o no.
A continuacion hice un backtest de prueba, es decir, lanza correctamente las operaciones, te adelanto que por desgracia o estoy equivocado en la logica de la EA o no lo hace correctamente.
Imagen que muestra donde las ha lanzado y donde las deberia de haber lanzado.
28561
Por lo tanto eso es lo primero que debemos de corregir, en el setting de la EA tenia configurado que ejecutase las ordenes a cierre de vela, o lo que es lo mismo, a la apertura de la nueva vela despues de la señal.
Por otro lado tambien hice la siguiente prueba, que desde la logica que yo entiendo de la EA, deberia de funcionar en modo semicontinuo, es decir si Take Profit y Stop Loss = 0, cuando se dan las condiciones de compra, compro y se cerraria la operacion cuando una de las medias no este alineada, lo mismo para las ventas.
Y como puedes comprobar en la imagen no hace nada, adjunto imagen del setting utilizado para esta segunda prueba.
28562
28563
Y ya puestos a pedir, pidamos:
1º Echo de menos un control de spread, que se incluiria en los parametros generales.
2º Echo de menos un autocontrol de digitos del broker, esto evitaria, como en este caso, tener que realizar multiplicaciones tanto del Take Profit, Stop Loss, Trailing... etc., dependiendo si trabajamos con un broker de 4 digitos o 5 digitos.
Algo parecido a esto:
int DecimalPoints, digit, pipMultiplier;
//***********************************************
int OnInit()
{
DecimalPoints = 1;
double x = MarketInfo(Symbol(), MODE_LOTSTEP) * 10;
while (x < 1)
{
x *= 10; DecimalPoints += 1;
}
digit = _Digits;
if (digit==2 || digit==4) pipMultiplier = 1;
if (digit==3 || digit==5) pipMultiplier = 10;
if (digit==6) pipMultiplier = 100;
return(INIT_SUCCEEDED);
}
3º Echo de menos, aunque de momento no es importante, en los parámetros generales un control de que si el Bróker es ECN o no, por el tema de modificación de órdenes.
Y ya por ultimo que me expliques mejor por favor, estos dos parámetros:
calcular_lotes = true; // Calcular valor del lote.
Este parámetro entiendo que quieres utilizar un tanto % del valor de la Equity si no me equivoco, corrígeme si estoy en lo cierto.
habilitar_trailing_take_profit = false;
Con este me matas, no lo entiendo, ¿desplazar el take profit según vaya la operación a nuestro favor?¿que valores utiliza para desplazarlo?. No sé si lo que pregunto tiene coherencia pero es lo que me vino a la cabeza.
Espero no ser muy molesto, pero esto es asi.
Un fuerte abrazo.
Y muchas gracias por el gran trabajo que estas realizando.
Hermo.
PD. Adjunto el EA tal y como yo la deje, por favor ruego compruebes que no he metido la pata en nada y espero que no te moleste esta incursion en tu codigo.
Magnifico trabajo MCSoft. Mi gratitud
Todavia no he mirado el codigo, pero lo estudiaré a fondo, sobre todo para saber el KnowHow de un Expert. Creo que es una buena idea añadir _EA al final del titulo para saber a simple vista que es un EA y no un indicador.
Respecto a lo de la tasa de aciertos de un sistema a bote pronto diré que este sistema es un seguidor de tendencia, es decir funcionará mal cuando el mercado esté en rango y muy muy bien cuando haya tendencia. Esto significa que cuando el mercado esté en congestión el sistema de medias va a perder muchas veces y cuando esté en tendencia va ha tener una grandisima ganancia. Esto es debido a que, que yo sepa, nada puede batir a las medias moviles para operar en tendencia.
Por tanto, en teoria deberíamos tener un sistema con una tasa de aciertos baja y un ratio ganadoras/ perdedoras alto.
Antes de seguir, haré una disgresion.
La formula de la esperanza matematica EM = pW+ qL
Siendo W (Win) El valor medio de la operaciones ganadoras,
L (Loss), el valor medio de las operaciones cuando se pierde,
p= tasa de operaciones ganadoras, q= tasa de operaciones perdedoras.
W tiene signo positivo, L tiene signo negativo => -L.
p lo representamos en tanto por uno y q lo podemos representar como una funcion de p, es decir, q= 1-p, todo lo que no son ganadoras son perdedoras. (el BE no se considera). Así que tenemos:
EM= pW- (1-p)L esto son unidades por operacion y dependerá del tamaño de la apuesta. Para que la esperanza sea positiva el resultado tiene que ser mayor que cero.
Es mejor ver esta formula de manera relativa mediante la formula de el Factor de Beneficio (PF)
PF= [pW] / [(1-p)L] Que nos da la relacion entre ganadora y perdedoras. Podemos reescribir la formula del siguiente modo.
PF= [p/(1-p)] x (W/L)
En esta formula para que la esperanza sea positiv el valor del PF tiene que ser mayor que 1.
El primer factor p/(1-p) es un numero que es funcion de p
El segundo factor W/L , es el ratio W/L que es la inversa de la famosa tasa riesgo / beneficio.
Cuanto mayor se W/L mejor, y cuanto mayor sea p mejor. Pero desgraciadamente para aumentar p generalmente es a costa de disminuir W/L y viceversa si queremos un alto ratio W/L generalmente vendrá acompañado de una disminucion de p.
En nuestro caso este sistema de medias moviles, como ya he dicho, es un sistema seguidor de tendencia. Las operaciones perdedoras seran mas que las ganadoras pero las pocas ganadoras deberan compensar a las perdidas de las perdedoras. Es decir el ratio W/L debera ser alto y p seguramente sea menor del 50%.
¿Que podemos hacer para mejorar el sistema? pues introducir algun filtro? El problema de los filtro es que filtra la malas operaciones pero si el filtro es muy fuerte, tambien filtrará operaciones buenas y con este sistema no nos podemos permitir ese lujo.
A bote pronto se me ocurren dos filtros:
1) Verificar que despues del cruce la medias se van separando durante n velas, y si no se cumple no se entra. Quizas se podria mirar tambien que el ADX ha estado por debajo de un valor n durante m velas.
2) Solo entrar cuando el precio está por debajo /encima de una cuarta media que nos de la tendencia de largo plazo, para solo entrar largo cuando la tendencia general sea alcista y solo corto cuando la tendencia general sea bajista, por ejemplo la MA 200 o EMA200. Con esto tendremos menos operaciones, pero seguramente aumentemos p. De hacer esto necesitariamos tener ordenada una cuarta media y la entrada en compra seria ma1>ma2>ma3>ma4
Este sistema puede admitir filtrar buenas operaciones mediante este segundo filtro por que el triple cruce de la muerte normalmente se opera en M1 y este TF no proporcionaria muchas entradas.
Pero bueno a ver otras ideas.
De momento me voy a mirar como funciona el EA original que en principio es lo mas importate para mi.
Un abrazo
;)
indovinello
12-04-2024 05:57,
Buenas tardes amigos!!!!
aquí estamos de nuevo, el compañero Ciclo hizo la punta proponiendo un indicador como generador de señales para nuestro EA.
Como El no ha podido subirlo al foro lo hago yo en este post:
28529
Estuve analizando el código del indicador. Este indicador genera una alerta a partir del cruce de 3 medias móviles, que en sus valores por defecto son:
media1 = periodo 4
media2 = periodo 18
media3 = periodo 40
El algoritmo que emplea el indicador para generar la alerta es el siguiente:
1- Si las 3 medias estan una por encima de la otra, es decir media1 > media2 > media3, entonces la tendencia es alcista.
2- Si las 3 medias estan una por debajo de la otra, es decir media1 < media2 < media3, entonces la tendencia es bajista.
3- Si no se cumple ninguna de las condiciones previas, la tendencia es indeterminada.
- El indicador genera una alerta de compra cuando la tendencia pasa de bajista (2) o indeterminada (3) a alcista (1).
- El indicador genera una alerta de venta cuando la tendencia pasa de alcista (1) o indeterminada (3) a bajista (2).
- El indicador genera una alerta para salir de la posición de compra cuando la tendencia cambia de alcista (1) a bajista (2) o indeterminada (3)
- El indicador genera una alerta para salir de la posición de venta cuando la tendencia cambia de bajista (2) a alcista (1) o indeterminada (3)
Este es el indicador en el terminal, el mismo solo muestra las flechas para abrir posiciones, y las cruces para indicar el cierre, yo agregue por mi cuenta las medias para observar en que se basa en indicador:
28532
Aunque parezca complejo, el codigo es bastante sencillo, por eso decidí incluir la logica en el EA, y no hacer una llamada al indicador.
Como les comente unos renglones mas arriba, la alerta se genera por un cambio de tendencia. Para detectar un cambio de tendencia, o hablando mas genericamente un CAMBIO en cualquier condicion (cambio de un valor, cruce de medias, etc), necesitamos comparar la condición actual con la condición previa.
En el codigo del EA, las 3 medias se calculan para el tick actual que esta corriendo y para la vela previa, es decir, 2 valores por cada media, el valor actual y el valor previo (de la vela previa). Esto nos permite tener los valores de la condicion actual y la condicion previa para comparar.
Adjunto el EA mas abajo, pero lo unico en que se diferencia con el template en blanco es el calculo de las medias actual y previa:
// --------------------------------------
// Calcular indicadores
// --------------------------------------
//
// ################################################## ####
// aqui se calculan los indicadores necesarios para la estrategia
// En este caso, calculamos 3 medias moviles de tipo Exponencial sobre el precio de cierre.
// Calculamos 6 valores, porque para detectar los cruces necesitamos el valor de cada media
// en el instante actual y de la misma media sobre la berra anterior a la actual.
// Valor de ma1 en el tick actual
double ma1_actual = iMA(Symbol(), 0, periodo_ma1, 0, MODE_EMA, PRICE_CLOSE, 0);
// valor de ma1 en la barra o vela previa (ver el parametro 1 al final de la
// funcion, si fuese 10 por ejemplo, seria el valor de la media sobre la decima
// vela anterior a la actual)
double ma1_previa = iMA(Symbol(), 0, periodo_ma1, 0, MODE_EMA, PRICE_CLOSE, 1);
double ma2_actual = iMA(Symbol(), 0, periodo_ma2, 0, MODE_EMA, PRICE_CLOSE, 0);
double ma2_previa = iMA(Symbol(), 0, periodo_ma2, 0, MODE_EMA, PRICE_CLOSE, 1);
double ma3_actual = iMA(Symbol(), 0, periodo_ma3, 0, MODE_EMA, PRICE_CLOSE, 0);
double ma3_previa = iMA(Symbol(), 0, periodo_ma3, 0, MODE_EMA, PRICE_CLOSE, 1);
// ################################################## ####
iMA es la funcion de MQL que nos permite calcular una media movil obre el precio. Tiene como parametros: El simbolo sobre el que se calcula (en este caso se emplea Symbol(), que indica calcular sobre el simbolo del chart en el que se encuentra corriendo el EA), el timeframe sobre le cual calcular el indicador (en este caso 0, para denotar el timeframe del chart actual), el periodo (se ha dejado como variable input del EA para luego optimizar los valores de las medias), el desplazamiento (se dejo en 0), em modo de calculo (en este caso se fijo en MODE_EMA, es una media Exponencial, aunque se podría haber dejado tambien como variable del EA para optimizar y ver que da mejores resultados), el precio sobre el cual se aplica el calculo (en este caso PRICE_CLOSE es sobre el precio de cierre de cada vela), y el ultima parametro de la funcion iMA, le indica cual es el punto del indicador que queremos que nos calcule. Si el ultimo parametro es 0, la funcion nos retorna la media movil calculada sobre el precio actual en este tick, mientras que si el parametro es 1, retorna el valor del indicador calculado sobre la vela previa, 2, sobre la anterior y asi sucesivamente.
En este caso estamos calculando cada media sobre el tick actual (iMA con parametro final = 0), y sobre la vela previa (parametro=1).
Los resultados de los indicadores los guardamos en variables, entonces tendremos 6 variables, 2 para cada media, una conteniendo el valor de la media para el tick actual y otra para la vela previa.
Ya que tenemos los calculos de las medias en el instante actual y en la vela previa, resta comprobar las condiciones y disparar las señales:
// --------------------------------------
// Generar señales de compra y venta
// --------------------------------------
// Verificar condiciones de compra
// -------------------
// Verificar si se dan las condiciones de compra de acuerdo a la
// estrategia(indicadores, tiempo, etc).
// Si las condiciones se cumplen, se setea la señal senal_abrir_buy
// ################################################## ####
// En este caso, el EA determina la tendencia actual del precio y la
// compara con la tendencia previa. Si la tendencia ha cambiado a
// alcista, dispara una señal de compra, y de lo contrario, una señal de
// venta.
double tendencia_previa;
double tendencia_ahora;
// setear tendencia actual y previa en 0 (indeterminada)
tendencia_previa = 0;
tendencia_ahora = 0;
// las variables tendencia_previa y tendencia_actual contendran el estado de
// la tendencia en la vela previa y en la vela actual respectivamente.
// cada una de las dos variables puede contener:
// valor 1: tendencia alcista
// valor 0: tendencia indeterminada
// valor -1: tendencia bajista
// para determinar la tendencia se realiza la siguiente comprobación:
// si ma1 > ma2 > ma3 se considera tendencia alcista
// si ma1 < ma2 < ma3 se considera tendencia bajista
// si no se cumple ninguna de las condiciones anteriores, la tendencia es
// indeterminada.
// verificar la tendencia en el tick actual ( barra 0).
// si las tres medias estan una arriba de la otra, la tendencia es alcista (1)
if ( ma1_actual > ma2_actual && ma2_actual > ma3_actual)
// ma1 > ma2 > ma3 en el tick actual (0)
tendencia_ahora = 1;
// verificar la tendencia en la barra previa (barra + 1)
if ( ma1_previa > ma2_previa && ma2_previa > ma3_previa)
tendencia_previa = 1;
// si las tres medias estan una debajo de la otra, la tendencia es bajista (-1)
if ( ma1_actual < ma2_actual && ma2_actual < ma3_actual)
tendencia_ahora = -1;
// verificar la tendencia en la barra previa
if ( ma1_previa < ma2_previa && ma2_previa < ma3_previa)
tendencia_previa = -1;
// al comienzo del bloque de comparaciones, se habian seteado tendencia_previa
// y tendencia_actual en 0.
// si la tendencia actual es positiva (1) y la tendencia previa es distinta de 1
// (0 indeterminada y -1 negativa), significa que la tendencia paso de bajista o
// indeterminada a ser alcista, entonces es una señal de compra
if ( tendencia_ahora == 1 && tendencia_previa != 1)
senal_abrir_buy = 1;
// ################################################## ####
// Verificar condiciones de venta
// -------------------
// Verificar si se dan las condiciones de venta de acuerdo a la
// estrategia(indicadores, tiempo, etc).
// Si las condiciones se cumplen, se setea la señal senal_abrir_buy
// ################################################## ####
// si por el contrario, la tendencia actual es negativa (-1) y la tendencia previa
// no era negativa, se genera una señal de venta
if ( tendencia_ahora == -1 && tendencia_previa != -1)
senal_abrir_sell = 1;
// ################################################## ####
// --------------------------------------
Nota: En el codigo he dejado los delimitadores ######### que habia puesto para que se observe como se ha completado el código sobre el template en blanco.
Creo que los comentarios son bastante explicativos, aún asi, cualquier duda que tengan será respondida con gusto.
Con las comprobaciones realizadas generamos las señales de compra (senal_abrir_buy=1) y de venta (senal_abrir_sell=1).
Ahora solo restan las comproaciones para cerrar posiciones:
// --------------------------------------
// Generar señales de cierre
// --------------------------------------
// Verificar cierre de compras
// -------------------
// Verificar si se dan las condiciones para cerrar las operaciones
// de compra abiertas (cambio de tendencia alcista a bajista por ejemplo)
// si se determina que las condiciones indican cerrar las posiciones buy,
// setear la señal senal_cerrar_buy
// ################################################## ####
// la señal de cierre de operaciones de compra se da cuando la
// tendencia pasa de alcista a indeterminada o bajista
if ( tendencia_previa == 1 && tendencia_ahora != 1 )
senal_cerrar_buy = 1;
// ################################################## ####
// Verificar cierre de ventas
// -------------------
// Verificar si se dan las condiciones para cerrar las operaciones
// de venta abiertas (cambio de tendencia bajista a alcista por ejemplo)
// si se determina que las condiciones indican cerrar las posiciones sell,
// setear la señal senal_cerrar_sell
// ################################################## ####
// la señal de cierre de operaciones de venta se da cuando la
// tendencia pasa de bajista a indeterminada o alcista
if ( tendencia_previa == -1 && tendencia_ahora != -1 )
senal_cerrar_sell = 1;
// ################################################## ####
// --------------------------------------
Este es el código completo del EA:
28529
Desde ya voy adelantando que el resultado por defecto no es muy satisfactorio, este es un backtesting entre 01/01/2012 y 01/01/2014 (2 años):
28530
He obtenido mejores resultando eliminando los bloques de cierre de operaciones y la generacion de señales de venta, e decir, solo dejando la generacion de señales de compra, y dejando que las operaciones se cierren por stop o por profit (el trailing stop esta activado), se obtiene un resultado mejor:
28534
Este es el EA que solo genera señales de compra (no genera señales de venta ni de cierre):
28533
Aunque la curva del balance no se vea muy alentadora, el reporte del test indica 79% de operaciones ganadoras. Pregunto a los traders experimentados: con ese porcentaje de operaciones ganadoras, este EA tiene esperanzas de llegar a ser beneficioso?
Bueno amigos, espero vuestros comentarios, me gustaría que prueben el código, lo optimicen y propongamos entre todos que mejoras se pueden hacer para tratar de que este EA de beneficios.
Saludos!!!!!
En mi opinión todas las EA's pueden llegar a ser ganadoras mientras no se demuestre lo contrario.
Ahora bien, como bien te ha dicho Robertomar, el por centaje de operaciones ganadoras, por sí solo, no es un buen indicador del beneficio potencial de la EA. Por ejemplo, El metatrader ofrece un ratio que es el profit factor (PF) que oriente bastante.
PF = "promedio de lo ganado en operaciones ganadoras"/"promedio perdido en operaciones perdedoras"
Este ratio debe estar siempre por encima de 1 (metatrader no muestra optimizaciones que con ratio menor, pues son perdedoras) y tendente tanto como se pueda a 2.
Un sistema con sólo 40% de operaciones ganadoras puede ser un sistema muy provechoso.
Saludos-
Hermo, Robertomar, agradezco sinceramente sus comentarios, eso es justo lo que yo estaba buscando cuando me uní al foro, gente con experiencia en trading y en estrategias con la cual podamos complementar nuestros conocimientos.
Gracias robertomar por la aclaracion sobre el porcentaje de operaciones ganadas, yo, desde mi inexperiencia ya estaba mirando ese numerito con mucha esperanza!!!!!.
Por otro lado, Hermo, me parece muy buena la idea, voy a abrir un tema nuevo para analizar este EA y ver si trabajando entre todos se puede mejorar.
Saludos!!!!!
robertomar
12-04-2024 11:59,
Buenas tardes amigos!!!!
aquí estamos de nuevo, el compañero Ciclo hizo la punta proponiendo un indicador como generador de señales para nuestro EA.
Como El no ha podido subirlo al foro lo hago yo en este post:
28529
Estuve analizando el código del indicador. Este indicador genera una alerta a partir del cruce de 3 medias móviles, que en sus valores por defecto son:
media1 = periodo 4
media2 = periodo 18
media3 = periodo 40
El algoritmo que emplea el indicador para generar la alerta es el siguiente:
1- Si las 3 medias estan una por encima de la otra, es decir media1 > media2 > media3, entonces la tendencia es alcista.
2- Si las 3 medias estan una por debajo de la otra, es decir media1 < media2 < media3, entonces la tendencia es bajista.
3- Si no se cumple ninguna de las condiciones previas, la tendencia es indeterminada.
- El indicador genera una alerta de compra cuando la tendencia pasa de bajista (2) o indeterminada (3) a alcista (1).
- El indicador genera una alerta de venta cuando la tendencia pasa de alcista (1) o indeterminada (3) a bajista (2).
- El indicador genera una alerta para salir de la posición de compra cuando la tendencia cambia de alcista (1) a bajista (2) o indeterminada (3)
- El indicador genera una alerta para salir de la posición de venta cuando la tendencia cambia de bajista (2) a alcista (1) o indeterminada (3)
Este es el indicador en el terminal, el mismo solo muestra las flechas para abrir posiciones, y las cruces para indicar el cierre, yo agregue por mi cuenta las medias para observar en que se basa en indicador:
28532
Aunque parezca complejo, el codigo es bastante sencillo, por eso decidí incluir la logica en el EA, y no hacer una llamada al indicador.
Como les comente unos renglones mas arriba, la alerta se genera por un cambio de tendencia. Para detectar un cambio de tendencia, o hablando mas genericamente un CAMBIO en cualquier condicion (cambio de un valor, cruce de medias, etc), necesitamos comparar la condición actual con la condición previa.
En el codigo del EA, las 3 medias se calculan para el tick actual que esta corriendo y para la vela previa, es decir, 2 valores por cada media, el valor actual y el valor previo (de la vela previa). Esto nos permite tener los valores de la condicion actual y la condicion previa para comparar.
Adjunto el EA mas abajo, pero lo unico en que se diferencia con el template en blanco es el calculo de las medias actual y previa:
// --------------------------------------
// Calcular indicadores
// --------------------------------------
//
// ################################################## ####
// aqui se calculan los indicadores necesarios para la estrategia
// En este caso, calculamos 3 medias moviles de tipo Exponencial sobre el precio de cierre.
// Calculamos 6 valores, porque para detectar los cruces necesitamos el valor de cada media
// en el instante actual y de la misma media sobre la berra anterior a la actual.
// Valor de ma1 en el tick actual
double ma1_actual = iMA(Symbol(), 0, periodo_ma1, 0, MODE_EMA, PRICE_CLOSE, 0);
// valor de ma1 en la barra o vela previa (ver el parametro 1 al final de la
// funcion, si fuese 10 por ejemplo, seria el valor de la media sobre la decima
// vela anterior a la actual)
double ma1_previa = iMA(Symbol(), 0, periodo_ma1, 0, MODE_EMA, PRICE_CLOSE, 1);
double ma2_actual = iMA(Symbol(), 0, periodo_ma2, 0, MODE_EMA, PRICE_CLOSE, 0);
double ma2_previa = iMA(Symbol(), 0, periodo_ma2, 0, MODE_EMA, PRICE_CLOSE, 1);
double ma3_actual = iMA(Symbol(), 0, periodo_ma3, 0, MODE_EMA, PRICE_CLOSE, 0);
double ma3_previa = iMA(Symbol(), 0, periodo_ma3, 0, MODE_EMA, PRICE_CLOSE, 1);
// ################################################## ####
iMA es la funcion de MQL que nos permite calcular una media movil obre el precio. Tiene como parametros: El simbolo sobre el que se calcula (en este caso se emplea Symbol(), que indica calcular sobre el simbolo del chart en el que se encuentra corriendo el EA), el timeframe sobre le cual calcular el indicador (en este caso 0, para denotar el timeframe del chart actual), el periodo (se ha dejado como variable input del EA para luego optimizar los valores de las medias), el desplazamiento (se dejo en 0), em modo de calculo (en este caso se fijo en MODE_EMA, es una media Exponencial, aunque se podría haber dejado tambien como variable del EA para optimizar y ver que da mejores resultados), el precio sobre el cual se aplica el calculo (en este caso PRICE_CLOSE es sobre el precio de cierre de cada vela), y el ultima parametro de la funcion iMA, le indica cual es el punto del indicador que queremos que nos calcule. Si el ultimo parametro es 0, la funcion nos retorna la media movil calculada sobre el precio actual en este tick, mientras que si el parametro es 1, retorna el valor del indicador calculado sobre la vela previa, 2, sobre la anterior y asi sucesivamente.
En este caso estamos calculando cada media sobre el tick actual (iMA con parametro final = 0), y sobre la vela previa (parametro=1).
Los resultados de los indicadores los guardamos en variables, entonces tendremos 6 variables, 2 para cada media, una conteniendo el valor de la media para el tick actual y otra para la vela previa.
Ya que tenemos los calculos de las medias en el instante actual y en la vela previa, resta comprobar las condiciones y disparar las señales:
// --------------------------------------
// Generar señales de compra y venta
// --------------------------------------
// Verificar condiciones de compra
// -------------------
// Verificar si se dan las condiciones de compra de acuerdo a la
// estrategia(indicadores, tiempo, etc).
// Si las condiciones se cumplen, se setea la señal senal_abrir_buy
// ################################################## ####
// En este caso, el EA determina la tendencia actual del precio y la
// compara con la tendencia previa. Si la tendencia ha cambiado a
// alcista, dispara una señal de compra, y de lo contrario, una señal de
// venta.
double tendencia_previa;
double tendencia_ahora;
// setear tendencia actual y previa en 0 (indeterminada)
tendencia_previa = 0;
tendencia_ahora = 0;
// las variables tendencia_previa y tendencia_actual contendran el estado de
// la tendencia en la vela previa y en la vela actual respectivamente.
// cada una de las dos variables puede contener:
// valor 1: tendencia alcista
// valor 0: tendencia indeterminada
// valor -1: tendencia bajista
// para determinar la tendencia se realiza la siguiente comprobación:
// si ma1 > ma2 > ma3 se considera tendencia alcista
// si ma1 < ma2 < ma3 se considera tendencia bajista
// si no se cumple ninguna de las condiciones anteriores, la tendencia es
// indeterminada.
// verificar la tendencia en el tick actual ( barra 0).
// si las tres medias estan una arriba de la otra, la tendencia es alcista (1)
if ( ma1_actual > ma2_actual && ma2_actual > ma3_actual)
// ma1 > ma2 > ma3 en el tick actual (0)
tendencia_ahora = 1;
// verificar la tendencia en la barra previa (barra + 1)
if ( ma1_previa > ma2_previa && ma2_previa > ma3_previa)
tendencia_previa = 1;
// si las tres medias estan una debajo de la otra, la tendencia es bajista (-1)
if ( ma1_actual < ma2_actual && ma2_actual < ma3_actual)
tendencia_ahora = -1;
// verificar la tendencia en la barra previa
if ( ma1_previa < ma2_previa && ma2_previa < ma3_previa)
tendencia_previa = -1;
// al comienzo del bloque de comparaciones, se habian seteado tendencia_previa
// y tendencia_actual en 0.
// si la tendencia actual es positiva (1) y la tendencia previa es distinta de 1
// (0 indeterminada y -1 negativa), significa que la tendencia paso de bajista o
// indeterminada a ser alcista, entonces es una señal de compra
if ( tendencia_ahora == 1 && tendencia_previa != 1)
senal_abrir_buy = 1;
// ################################################## ####
// Verificar condiciones de venta
// -------------------
// Verificar si se dan las condiciones de venta de acuerdo a la
// estrategia(indicadores, tiempo, etc).
// Si las condiciones se cumplen, se setea la señal senal_abrir_buy
// ################################################## ####
// si por el contrario, la tendencia actual es negativa (-1) y la tendencia previa
// no era negativa, se genera una señal de venta
if ( tendencia_ahora == -1 && tendencia_previa != -1)
senal_abrir_sell = 1;
// ################################################## ####
// --------------------------------------
Nota: En el codigo he dejado los delimitadores ######### que habia puesto para que se observe como se ha completado el código sobre el template en blanco.
Creo que los comentarios son bastante explicativos, aún asi, cualquier duda que tengan será respondida con gusto.
Con las comprobaciones realizadas generamos las señales de compra (senal_abrir_buy=1) y de venta (senal_abrir_sell=1).
Ahora solo restan las comproaciones para cerrar posiciones:
// --------------------------------------
// Generar señales de cierre
// --------------------------------------
// Verificar cierre de compras
// -------------------
// Verificar si se dan las condiciones para cerrar las operaciones
// de compra abiertas (cambio de tendencia alcista a bajista por ejemplo)
// si se determina que las condiciones indican cerrar las posiciones buy,
// setear la señal senal_cerrar_buy
// ################################################## ####
// la señal de cierre de operaciones de compra se da cuando la
// tendencia pasa de alcista a indeterminada o bajista
if ( tendencia_previa == 1 && tendencia_ahora != 1 )
senal_cerrar_buy = 1;
// ################################################## ####
// Verificar cierre de ventas
// -------------------
// Verificar si se dan las condiciones para cerrar las operaciones
// de venta abiertas (cambio de tendencia bajista a alcista por ejemplo)
// si se determina que las condiciones indican cerrar las posiciones sell,
// setear la señal senal_cerrar_sell
// ################################################## ####
// la señal de cierre de operaciones de venta se da cuando la
// tendencia pasa de bajista a indeterminada o alcista
if ( tendencia_previa == -1 && tendencia_ahora != -1 )
senal_cerrar_sell = 1;
// ################################################## ####
// --------------------------------------
Este es el código completo del EA:
28529
Desde ya voy adelantando que el resultado por defecto no es muy satisfactorio, este es un backtesting entre 01/01/2012 y 01/01/2014 (2 años):
28530
He obtenido mejores resultando eliminando los bloques de cierre de operaciones y la generacion de señales de venta, e decir, solo dejando la generacion de señales de compra, y dejando que las operaciones se cierren por stop o por profit (el trailing stop esta activado), se obtiene un resultado mejor:
28534
Este es el EA que solo genera señales de compra (no genera señales de venta ni de cierre):
28533
Aunque la curva del balance no se vea muy alentadora, el reporte del test indica 79% de operaciones ganadoras. Pregunto a los traders experimentados: con ese porcentaje de operaciones ganadoras, este EA tiene esperanzas de llegar a ser beneficioso?
Bueno amigos, espero vuestros comentarios, me gustaría que prueben el código, lo optimicen y propongamos entre todos que mejoras se pueden hacer para tratar de que este EA de beneficios.
Saludos!!!!!
Pues en relación a lo que preguntas, hay muchísimos parámetros que ofrecen diferentes puntos de vista de análisis y dan una mejor o peor idea de la eficiencia y consistencia de la estrategia.
En mi opinión, el porcentaje de operaciones ganadoras sólo es uno de ellos, pero creo que hay que mirarlos todos en su conjunto y valorarlos globalmente para saber si una estrategia tiene potencial o no. Date cuenta que, en este caso, si solo hablamos de dicho porcentaje, dependerá muchísimo del ratio riesgo/beneficio que tenga la estrategia, el cual va directamente relacionado con el SL y el TP. Si este ratio es digamos 2:1 o 3:1 (es decir que el SL sea el triple del TP, entonces es normal que acierte más porcentaje, pero a lo mejor el resultado final es negativo), en cambio con un ratio por ejemplo de 1:2 (es decir el TP el doble que el SL) lo normal es que el porcentaje de acierto baje, pero a lo mejor con un 40% es suficiente y nos da muchos beneficios la estrategia.
Una estrategia con un 99% de operaciones ganadoras puede ser un desastre completo y fundirnos la cuenta si el ratio es muy muy muy malo para nosotros (imaginemos el caso extremo que le ponemos un TP de 1 pip y un SL de 1000 pips, pues es normal que acierte casi siempre, pero la vez que falle funde la cuenta). Igualmente una estrategia con un porcentaje de operaciones ganadoras de un 25% por ejemplo o incluso menos, puede ser muy rentable, por la razón contraria. Por eso creo que hay que mirar todos los ratios globalmente y no fijarse en cada uno de ellos aisladamente, puesto que nos daría unas conclusiones sesgadas.
Saludos y abrazos
Buenas tardes amigos!!!!
Este es el código completo del EA:
28529
Desde ya voy adelantando que el resultado por defecto no es muy satisfactorio, este es un backtesting entre 01/01/2012 y 01/01/2014 (2 años):
28530
He obtenido mejores resultando eliminando los bloques de cierre de operaciones y la generacion de señales de venta, e decir, solo dejando la generacion de señales de compra, y dejando que las operaciones se cierren por stop o por profit (el trailing stop esta activado), se obtiene un resultado mejor:
28534
Este es el EA que solo genera señales de compra (no genera señales de venta ni de cierre):
28533
Aunque la curva del balance no se vea muy alentadora, el reporte del test indica 79% de operaciones ganadoras. Pregunto a los traders experimentados: con ese porcentaje de operaciones ganadoras, este EA tiene esperanzas de llegar a ser beneficioso?
Bueno amigos, espero vuestros comentarios, me gustaría que prueben el código, lo optimicen y propongamos entre todos que mejoras se pueden hacer para tratar de que este EA de beneficios.
Saludos!!!!!
Buenos días MCSoft:
Por partes:
* ENORME CON EL TRABAJO DE PROGRAMACION, todavía no he visto el código, pero solo por el trabajo que has realizado te mereces todo mi respeto.28540
* Antes de ponerme con el código, insisto y para no mezclar churras con merinas ("dos razas de ovejas diferentes"), deberíamos de diferenciar pasos.
A la hora de plantearnos automatizar una estrategia existen varios pasos que aunque correlacionados os daréis cuenta que no tienen nada que ver unos con otros. Voy a tratar de resumir los que yo considero más importantes.
1º Paso, Borrador de la estrategia, por ejemplo este paso nos lo hemos saltado, también es cierto que el tema no trata de proponer estrategias para programar, si no de programación, pero bueno, creo que es un paso importante y que todo el mundo debería de realizar antes de ponerse a programar nada, dejar claras todas las normas y condiciones de su sistema ya sea en un cuaderno viejo, en un Word, en bloc de notas, en la pared de su dormitorio... etc.
2º Paso, Programar, evidentemente paso vinculado a saber de programación, este es en el tema que estamos, súper interesante y que tiene para largo.
3º Paso, Comprobación, TODO FUNCIONA CORRECTAMENTE, no pongo en duda que lo que has programado está bien MCSoft, solo lo digo para que la gente se acostumbre a los buenos hábitos, antes de buscar resultados en una Ea, deberíamos de comprobar que todo funciona correctamente y que hace lo que tiene que hacer sin excepción. Ya sea con pruebas visuales en cuentas demo ya sea en un backtest.
4º Paso, Análisis, así le llamamos en el Grupo de trabajo al que pertenezco, esto ya es otro tema que como he dicho antes aunque correlacionado, no tiene nada que ver con programación, esto ya es otro debate infinito y que sería maravilloso escuchar todo lo que podáis aportar sobre el análisis de una EA y sus resultado. Me refiero a las pruebas de optimización, posterior backtest y por poner un punto y final, conclusiones. Como podéis ver a este último paso tendría sus diferentes apartados, aunque os parezca un rollo, no lo es, sé que es engorroso, pero o se hace bien o no se hace, eso es lo que tenéis que tener claro. Con este cuarto paso te contesto a lo que te remarco en rojo MCSoft. Por lo tanto te propongo, ya que has iniciado tú el Tema, que hagas exactamente lo mismo, abre un tema nuevo proponiendo el Análisis de esta EA y las que puedan venir, así separas los diferentes pasos y queda todo más limpio.
Yo a lo largo del día veré ese fantástico código y seguro que te preguntare cosillas.
Un fuerte abrazo y muchísimas gracias a todos.
Hermo.
PD. Es una propuesta, no significa que yo tenga razon o que lo querais hacer de otro modo, ok.
Buenas tardes amigos!!!!
aquí estamos de nuevo, el compañero Ciclo hizo la punta proponiendo un indicador como generador de señales para nuestro EA.
Como El no ha podido subirlo al foro lo hago yo en este post:
28529
Estuve analizando el código del indicador. Este indicador genera una alerta a partir del cruce de 3 medias móviles, que en sus valores por defecto son:
media1 = periodo 4
media2 = periodo 18
media3 = periodo 40
El algoritmo que emplea el indicador para generar la alerta es el siguiente:
1- Si las 3 medias estan una por encima de la otra, es decir media1 > media2 > media3, entonces la tendencia es alcista.
2- Si las 3 medias estan una por debajo de la otra, es decir media1 < media2 < media3, entonces la tendencia es bajista.
3- Si no se cumple ninguna de las condiciones previas, la tendencia es indeterminada.
- El indicador genera una alerta de compra cuando la tendencia pasa de bajista (2) o indeterminada (3) a alcista (1).
- El indicador genera una alerta de venta cuando la tendencia pasa de alcista (1) o indeterminada (3) a bajista (2).
- El indicador genera una alerta para salir de la posición de compra cuando la tendencia cambia de alcista (1) a bajista (2) o indeterminada (3)
- El indicador genera una alerta para salir de la posición de venta cuando la tendencia cambia de bajista (2) a alcista (1) o indeterminada (3)
Este es el indicador en el terminal, el mismo solo muestra las flechas para abrir posiciones, y las cruces para indicar el cierre, yo agregue por mi cuenta las medias para observar en que se basa en indicador:
28532
Aunque parezca complejo, el codigo es bastante sencillo, por eso decidí incluir la logica en el EA, y no hacer una llamada al indicador.
Como les comente unos renglones mas arriba, la alerta se genera por un cambio de tendencia. Para detectar un cambio de tendencia, o hablando mas genericamente un CAMBIO en cualquier condicion (cambio de un valor, cruce de medias, etc), necesitamos comparar la condición actual con la condición previa.
En el codigo del EA, las 3 medias se calculan para el tick actual que esta corriendo y para la vela previa, es decir, 2 valores por cada media, el valor actual y el valor previo (de la vela previa). Esto nos permite tener los valores de la condicion actual y la condicion previa para comparar.
Adjunto el EA mas abajo, pero lo unico en que se diferencia con el template en blanco es el calculo de las medias actual y previa:
// --------------------------------------
// Calcular indicadores
// --------------------------------------
//
// ################################################## ####
// aqui se calculan los indicadores necesarios para la estrategia
// En este caso, calculamos 3 medias moviles de tipo Exponencial sobre el precio de cierre.
// Calculamos 6 valores, porque para detectar los cruces necesitamos el valor de cada media
// en el instante actual y de la misma media sobre la berra anterior a la actual.
// Valor de ma1 en el tick actual
double ma1_actual = iMA(Symbol(), 0, periodo_ma1, 0, MODE_EMA, PRICE_CLOSE, 0);
// valor de ma1 en la barra o vela previa (ver el parametro 1 al final de la
// funcion, si fuese 10 por ejemplo, seria el valor de la media sobre la decima
// vela anterior a la actual)
double ma1_previa = iMA(Symbol(), 0, periodo_ma1, 0, MODE_EMA, PRICE_CLOSE, 1);
double ma2_actual = iMA(Symbol(), 0, periodo_ma2, 0, MODE_EMA, PRICE_CLOSE, 0);
double ma2_previa = iMA(Symbol(), 0, periodo_ma2, 0, MODE_EMA, PRICE_CLOSE, 1);
double ma3_actual = iMA(Symbol(), 0, periodo_ma3, 0, MODE_EMA, PRICE_CLOSE, 0);
double ma3_previa = iMA(Symbol(), 0, periodo_ma3, 0, MODE_EMA, PRICE_CLOSE, 1);
// ################################################## ####
iMA es la funcion de MQL que nos permite calcular una media movil obre el precio. Tiene como parametros: El simbolo sobre el que se calcula (en este caso se emplea Symbol(), que indica calcular sobre el simbolo del chart en el que se encuentra corriendo el EA), el timeframe sobre le cual calcular el indicador (en este caso 0, para denotar el timeframe del chart actual), el periodo (se ha dejado como variable input del EA para luego optimizar los valores de las medias), el desplazamiento (se dejo en 0), em modo de calculo (en este caso se fijo en MODE_EMA, es una media Exponencial, aunque se podría haber dejado tambien como variable del EA para optimizar y ver que da mejores resultados), el precio sobre el cual se aplica el calculo (en este caso PRICE_CLOSE es sobre el precio de cierre de cada vela), y el ultima parametro de la funcion iMA, le indica cual es el punto del indicador que queremos que nos calcule. Si el ultimo parametro es 0, la funcion nos retorna la media movil calculada sobre el precio actual en este tick, mientras que si el parametro es 1, retorna el valor del indicador calculado sobre la vela previa, 2, sobre la anterior y asi sucesivamente.
En este caso estamos calculando cada media sobre el tick actual (iMA con parametro final = 0), y sobre la vela previa (parametro=1).
Los resultados de los indicadores los guardamos en variables, entonces tendremos 6 variables, 2 para cada media, una conteniendo el valor de la media para el tick actual y otra para la vela previa.
Ya que tenemos los calculos de las medias en el instante actual y en la vela previa, resta comprobar las condiciones y disparar las señales:
// --------------------------------------
// Generar señales de compra y venta
// --------------------------------------
// Verificar condiciones de compra
// -------------------
// Verificar si se dan las condiciones de compra de acuerdo a la
// estrategia(indicadores, tiempo, etc).
// Si las condiciones se cumplen, se setea la señal senal_abrir_buy
// ################################################## ####
// En este caso, el EA determina la tendencia actual del precio y la
// compara con la tendencia previa. Si la tendencia ha cambiado a
// alcista, dispara una señal de compra, y de lo contrario, una señal de
// venta.
double tendencia_previa;
double tendencia_ahora;
// setear tendencia actual y previa en 0 (indeterminada)
tendencia_previa = 0;
tendencia_ahora = 0;
// las variables tendencia_previa y tendencia_actual contendran el estado de
// la tendencia en la vela previa y en la vela actual respectivamente.
// cada una de las dos variables puede contener:
// valor 1: tendencia alcista
// valor 0: tendencia indeterminada
// valor -1: tendencia bajista
// para determinar la tendencia se realiza la siguiente comprobación:
// si ma1 > ma2 > ma3 se considera tendencia alcista
// si ma1 < ma2 < ma3 se considera tendencia bajista
// si no se cumple ninguna de las condiciones anteriores, la tendencia es
// indeterminada.
// verificar la tendencia en el tick actual ( barra 0).
// si las tres medias estan una arriba de la otra, la tendencia es alcista (1)
if ( ma1_actual > ma2_actual && ma2_actual > ma3_actual)
// ma1 > ma2 > ma3 en el tick actual (0)
tendencia_ahora = 1;
// verificar la tendencia en la barra previa (barra + 1)
if ( ma1_previa > ma2_previa && ma2_previa > ma3_previa)
tendencia_previa = 1;
// si las tres medias estan una debajo de la otra, la tendencia es bajista (-1)
if ( ma1_actual < ma2_actual && ma2_actual < ma3_actual)
tendencia_ahora = -1;
// verificar la tendencia en la barra previa
if ( ma1_previa < ma2_previa && ma2_previa < ma3_previa)
tendencia_previa = -1;
// al comienzo del bloque de comparaciones, se habian seteado tendencia_previa
// y tendencia_actual en 0.
// si la tendencia actual es positiva (1) y la tendencia previa es distinta de 1
// (0 indeterminada y -1 negativa), significa que la tendencia paso de bajista o
// indeterminada a ser alcista, entonces es una señal de compra
if ( tendencia_ahora == 1 && tendencia_previa != 1)
senal_abrir_buy = 1;
// ################################################## ####
// Verificar condiciones de venta
// -------------------
// Verificar si se dan las condiciones de venta de acuerdo a la
// estrategia(indicadores, tiempo, etc).
// Si las condiciones se cumplen, se setea la señal senal_abrir_buy
// ################################################## ####
// si por el contrario, la tendencia actual es negativa (-1) y la tendencia previa
// no era negativa, se genera una señal de venta
if ( tendencia_ahora == -1 && tendencia_previa != -1)
senal_abrir_sell = 1;
// ################################################## ####
// --------------------------------------
Nota: En el codigo he dejado los delimitadores ######### que habia puesto para que se observe como se ha completado el código sobre el template en blanco.
Creo que los comentarios son bastante explicativos, aún asi, cualquier duda que tengan será respondida con gusto.
Con las comprobaciones realizadas generamos las señales de compra (senal_abrir_buy=1) y de venta (senal_abrir_sell=1).
Ahora solo restan las comproaciones para cerrar posiciones:
// --------------------------------------
// Generar señales de cierre
// --------------------------------------
// Verificar cierre de compras
// -------------------
// Verificar si se dan las condiciones para cerrar las operaciones
// de compra abiertas (cambio de tendencia alcista a bajista por ejemplo)
// si se determina que las condiciones indican cerrar las posiciones buy,
// setear la señal senal_cerrar_buy
// ################################################## ####
// la señal de cierre de operaciones de compra se da cuando la
// tendencia pasa de alcista a indeterminada o bajista
if ( tendencia_previa == 1 && tendencia_ahora != 1 )
senal_cerrar_buy = 1;
// ################################################## ####
// Verificar cierre de ventas
// -------------------
// Verificar si se dan las condiciones para cerrar las operaciones
// de venta abiertas (cambio de tendencia bajista a alcista por ejemplo)
// si se determina que las condiciones indican cerrar las posiciones sell,
// setear la señal senal_cerrar_sell
// ################################################## ####
// la señal de cierre de operaciones de venta se da cuando la
// tendencia pasa de bajista a indeterminada o alcista
if ( tendencia_previa == -1 && tendencia_ahora != -1 )
senal_cerrar_sell = 1;
// ################################################## ####
// --------------------------------------
Este es el código completo del EA:
28529
Desde ya voy adelantando que el resultado por defecto no es muy satisfactorio, este es un backtesting entre 01/01/2012 y 01/01/2014 (2 años):
28530
He obtenido mejores resultando eliminando los bloques de cierre de operaciones y la generacion de señales de venta, e decir, solo dejando la generacion de señales de compra, y dejando que las operaciones se cierren por stop o por profit (el trailing stop esta activado), se obtiene un resultado mejor:
28534
Este es el EA que solo genera señales de compra (no genera señales de venta ni de cierre):
28533
Aunque la curva del balance no se vea muy alentadora, el reporte del test indica 79% de operaciones ganadoras. Pregunto a los traders experimentados: con ese porcentaje de operaciones ganadoras, este EA tiene esperanzas de llegar a ser beneficioso?
Bueno amigos, espero vuestros comentarios, me gustaría que prueben el código, lo optimicen y propongamos entre todos que mejoras se pueden hacer para tratar de que este EA de beneficios.
Saludos!!!!!
Puedes intentar meterlo en un zip o incluso intentar el anexo desde otro navegador. Es lo que se me ocurre.
Saludos.
Hola Indovinelo. Ni siquiera me da acceso a mis archivos, el boton sencillamente no funciona.
Ciclo buenas tardes!!!!
Espero con ansiedad que me envíes el indicador para analizarlo, y ver como lo integramos al EA para que todos los seguidores del tema puedan ver como integrar un indicador en un EA.
Si aun no te funciona la opcion de subir archivos me lo puedes enviar por correo a
[email protected], y yo lo subo al post
Desde ya voy adelantando que cuando tenemos un indicador y queremos integrarlo en el EA, hay dos alternativas:
1- Copiar el codigo del indicador (la parte de calculo) dentro del EA
2- Solicitar desde el EA la ejecucion del indicador y obtener el calculo del mismo en cada tick
La segunda opción es la mas sencilla, pero requiere distribuir el indicador (compilado en ex4) junto con nuestro EA para que funcione.
Espero entonces que me envíes el archivo para subirlo y comenzar.
Saludos
:)
Enviado, MCSoft.
Yo preferiria que no se hicieran llamadas al indicador sino que se implementara el codigo dentro del EA y se sustituyeran las flechas por ordenes de entrada y salida. Pero, al final tu criterio manda.
Saludos.
robertomar
13-04-2024 10:52,
robertomar, me falto solo una aclaración sobre las variables input y extern que mencionas en tu mensaje:
Las variables input y extern tienen el mismo comportamiento desde el punto de vista del ingreso de parametros al EA, también, ambos tipos de variables se pueden optimizar.
La unica diferencia entre las variables input y extern es que las primeras, son constantes dentro del programa (no se les puede asignar un valor nuevo por código mientras el EA esta corriendo), mientras que las extern se pueden modificar dentro del código:
Extern variables - MQL4 Documentation (http://docs.mql4.com/basis/variables/externvariables)
Saludos!!!!!
Ok, era un tema de la build con las variables de tipo bool. Yo, como bien sabe Ciclo, uso varias builds diferentes para distintas tareas. Pues bien, en la build 610, las variables de tipo bool no nos permite optimizarlas. Aquí la captura:
28511
Em cambio a partir de la build 625 sí que nos permite optimizarlas para ver si nos interesa más tenerlas en true o en false. Aquí la captura:
28512
Era por eso, sólo por la build que estamos usando.
Muchas gracias de nuevo y ánimo. A ver si surgen más ideas de la gente compañero.
Saludos y abrazos.
indovinello
13-04-2024 12:29,
:) Aclarado.
MCSoft, mira este indicador, a ver si se puede implementar como un criterio en la plantilla EA como un ejemplo. Tiene tanto criterio de entrada como de salida. Seria interesante que a simple vista se pudiera distinguir entre el codigo de plantilla el el codigo de criterio por decirlo de alguna manera.
Si no se entiende bien algo me lo dices y aclaro cualquier punto.
Si crees que no es de interés pues nada, pero viendo esto ya pordiamos implementar otros criterios o añadir filtros y cosas.
Abrazos.
;)
No consigo subir el archivo. No me funciona el sistema de subida de archivos, el boton de seleccionar archivos. ¿A alguien mas le pasa?
Puedes intentar meterlo en un zip o incluso intentar el anexo desde otro navegador. Es lo que se me ocurre.
Saludos.
robertomar, gracias por tu interes en el tema.
Estoy 100% de acuerdo contigo, hay miles de formas de programar, yo mismo he pasado por varias etapas en mi vida como programador (programacion procedimental, funcional, orientada a eventos, multithreading, maquinas de estados, etc).
Lo que menos pretendo es obligar o plantear una unica manera de hacer las cosas, todo lo contrario, solo pretendia comenzar con un código sencillo, principalmente para los no programadores, para alentarlos a que discutan y pregunten, porque hay muchas maneras de hacer las cosas, y depende mucho de la funcionalidad que se necesite.
aprovecho para comentarles a todos que he abierto un nuevo tema comenzando con la plantilla de un indicador en blanco. Lo hice en un nuevo tema porque no quiero mezclar la programacion de EAs con la de indicadores, ya que requieren enfoques diferentes.
Saludos a todos!!!! y por favor, sigan planteando ideas y discusiones que es la unica manera de mejorar!!!!!
robertomar, me falto solo una aclaración sobre las variables input y extern que mencionas en tu mensaje:
Las variables input y extern tienen el mismo comportamiento desde el punto de vista del ingreso de parametros al EA, también, ambos tipos de variables se pueden optimizar.
La unica diferencia entre las variables input y extern es que las primeras, son constantes dentro del programa (no se les puede asignar un valor nuevo por código mientras el EA esta corriendo), mientras que las extern se pueden modificar dentro del código:
Extern variables - MQL4 Documentation (http://docs.mql4.com/basis/variables/externvariables)
Saludos!!!!!
Muchísimas gracias por la iniciativa MRCSoft. Me parece un buen punto de partida para muchas personas que son traders pero no se han adentrado en el mundo del trading automático, y hasta les da casi miedo abrir el código y las entrañas del EA.
Mi humilde opinión es que, como bien dice Hermo, yo prefiero programar directamente las condiciones de mi estrategia y, dependiende de qué cosas vaya a usar o meterle a la misma (BreakEven, TrailingStop, Money Management, etc etc etc) entonces le voy añadiendo lo necesario, pero solo y exclusivamente lo necesario. Pienso que tener una plantilla con todo es posible que le pueda facilitar el trabajo a quien no ha abierto nunca el código de un EA y que, por tanto, pueda meter en la parte correspondiente el bloque de su estrategia y tirar para adelante, pero como bien sabes en el propio código, en la propia estrategia, y en los propios indicadores que ésta pueda usar hay 1000 matices y cada una requerirá unos procesos y una codificación diferente.
Por ejemplo, es posible que por necesidades de la propia estrategia y de cómo y cuándo compruebe sus señales, o cúando vaya modificando su SL o su Trailing, etc, sea necesario usar otras funciones adicionales al OnTick(), como por ejemplo en ciertas estrategias puede ser necesario usar el OnTimer(), el OnCalculate, o el OnChartEvent(). Por lo que no veo tan sencillo ni tan óptimo en cuanto a resultado final codificado, meterle unas señales de entrada o salida exclusivamente ahí a una plantilla con todos los bloques. Yo más bien veo estas plantillas muy útiles para, por ejemplo, si yo no se como hacer un Trailing, pues cojo y en mi EA donde ya tengo programada la estrategia, sus señales, tengo externalizadas las variables de mis indicadores, etc etc y todo optimizado en base a sus necesidades, entonces le meto sólo el bloque del Trailing que lleva la plantilla. Veo más óptimo el proceso de esta forma como dice Hermo.
También estas plantillas nos pueden valer para darnos ideas si hay algunas cosas que no sabemos cómo hacerlas y llevan el módulo correspondiente que nos podemos copiar en nuestros EAs.
Igualmente hay programas que te generan código sin tener que saber programar, tú solo le pones las condiciones de tu estrategia en un entorno gráfico y ellos ya te generan todo el código, pero para mí tienen el mismo problema, y es que usan el mismo concepto este , con una plantilla digamos "global" donde van todas, absolutamente todas las funciones posibles que puedes pedirle al EA, por si acaso luego las vas a usar, pero a lo mejor de 100 funciones tú y tu estrategia al final solo usas 6 u 8, con lo cual tienes miles de líneas de código inútilmente. Te pongo el ejemplo de un EA generado por este sistema, que tardaba 35 minutos en realizar un backtest por el método del 99% con datos de tick (un simple backtest y no una optimización), y encima nos generaba un archivo de log hipermegasuper detallado que nos ocupaba 4,5 GB (si Gigabytes, habeis leíddo bien, jeje). Pues bien, empecé a eliminar todas las funciones que no se usaban (cientos), y a recolocar aquellas que, por ejemplo no era necesario que me comprobase en cada tick, sino que era suficiente que lo hiciese a apertura de vela, además de añadirle otra opción para que no me generase log detallado y, el mismo backtest, con los mismos históricos ahora me tarda menos de 5 minutos. Sin embargo, tardé varias horas en ver cómo estaba todo el código e ir viendo qué podía eliminar y qué no, y cómo podía recolocarlo todo.
Conclusión: tardo mucho más en eliminar partes que no voy a usar, y en depurar el código que en hacerlo desde 0, o si no desde 0, al menos cogiendo código hecho, pero solo de lo que mi EA va a necesitar y usar. (No es el caso de tu plantilla, porque aún no lleva todas las funciones, pero imagina que se empieza a trabajar, la gente empieza a aportar ideas, y se le van añadiendo 1000 opciones más para cubrir las necesidades de todo el mundo). En ese caso ya estaríamos en las mismas, y mi humilde opinión es que es muy de agradecer y que nos sería muy válida, pero para cuando queramos meter un módulo de lo que sea y no sepamos cómo hacerlo o nos de pereza programarlo desde 0, entonces cogerlo de la plantilla y pegarlo directamente en nuestro EA, pero hacerlo al revés no lo veo óptimo, por los motivos comentados.
Por otra parte, viendo el código de la plantilla, yo algunas de las variables que metes con input, las metería como extern, (sobre todo SL, TP, etc etc), ya que como input sí que puedes modificarlas en las propiedades del EA a la hora de hacer el backtest, pero no puedes incluírlas en los procesos de optimización.
Lo dicho, muchísimas gracias por la iniciativa. También llevas mi reputación.
Saludos y abrazos a todos.
robertomar, gracias por tu interes en el tema.
Estoy 100% de acuerdo contigo, hay miles de formas de programar, yo mismo he pasado por varias etapas en mi vida como programador (programacion procedimental, funcional, orientada a eventos, multithreading, maquinas de estados, etc).
Lo que menos pretendo es obligar o plantear una unica manera de hacer las cosas, todo lo contrario, solo pretendia comenzar con un código sencillo, principalmente para los no programadores, para alentarlos a que discutan y pregunten, porque hay muchas maneras de hacer las cosas, y depende mucho de la funcionalidad que se necesite.
aprovecho para comentarles a todos que he abierto un nuevo tema comenzando con la plantilla de un indicador en blanco. Lo hice en un nuevo tema porque no quiero mezclar la programacion de EAs con la de indicadores, ya que requieren enfoques diferentes.
Saludos a todos!!!! y por favor, sigan planteando ideas y discusiones que es la unica manera de mejorar!!!!!
robertomar
13-04-2024 14:00,
Muchísimas gracias por la iniciativa MRCSoft. Me parece un buen punto de partida para muchas personas que son traders pero no se han adentrado en el mundo del trading automático, y hasta les da casi miedo abrir el código y las entrañas del EA.
Mi humilde opinión es que, como bien dice Hermo, yo prefiero programar directamente las condiciones de mi estrategia y, dependiende de qué cosas vaya a usar o meterle a la misma (BreakEven, TrailingStop, Money Management, etc etc etc) entonces le voy añadiendo lo necesario, pero solo y exclusivamente lo necesario. Pienso que tener una plantilla con todo es posible que le pueda facilitar el trabajo a quien no ha abierto nunca el código de un EA y que, por tanto, pueda meter en la parte correspondiente el bloque de su estrategia y tirar para adelante, pero como bien sabes en el propio código, en la propia estrategia, y en los propios indicadores que ésta pueda usar hay 1000 matices y cada una requerirá unos procesos y una codificación diferente.
Por ejemplo, es posible que por necesidades de la propia estrategia y de cómo y cuándo compruebe sus señales, o cúando vaya modificando su SL o su Trailing, etc, sea necesario usar otras funciones adicionales al OnTick(), como por ejemplo en ciertas estrategias puede ser necesario usar el OnTimer(), el OnCalculate, o el OnChartEvent(). Por lo que no veo tan sencillo ni tan óptimo en cuanto a resultado final codificado, meterle unas señales de entrada o salida exclusivamente ahí a una plantilla con todos los bloques. Yo más bien veo estas plantillas muy útiles para, por ejemplo, si yo no se como hacer un Trailing, pues cojo y en mi EA donde ya tengo programada la estrategia, sus señales, tengo externalizadas las variables de mis indicadores, etc etc y todo optimizado en base a sus necesidades, entonces le meto sólo el bloque del Trailing que lleva la plantilla. Veo más óptimo el proceso de esta forma como dice Hermo.
También estas plantillas nos pueden valer para darnos ideas si hay algunas cosas que no sabemos cómo hacerlas y llevan el módulo correspondiente que nos podemos copiar en nuestros EAs.
Igualmente hay programas que te generan código sin tener que saber programar, tú solo le pones las condiciones de tu estrategia en un entorno gráfico y ellos ya te generan todo el código, pero para mí tienen el mismo problema, y es que usan el mismo concepto este , con una plantilla digamos "global" donde van todas, absolutamente todas las funciones posibles que puedes pedirle al EA, por si acaso luego las vas a usar, pero a lo mejor de 100 funciones tú y tu estrategia al final solo usas 6 u 8, con lo cual tienes miles de líneas de código inútilmente. Te pongo el ejemplo de un EA generado por este sistema, que tardaba 35 minutos en realizar un backtest por el método del 99% con datos de tick (un simple backtest y no una optimización), y encima nos generaba un archivo de log hipermegasuper detallado que nos ocupaba 4,5 GB (si Gigabytes, habeis leíddo bien, jeje). Pues bien, empecé a eliminar todas las funciones que no se usaban (cientos), y a recolocar aquellas que, por ejemplo no era necesario que me comprobase en cada tick, sino que era suficiente que lo hiciese a apertura de vela, además de añadirle otra opción para que no me generase log detallado y, el mismo backtest, con los mismos históricos ahora me tarda menos de 5 minutos. Sin embargo, tardé varias horas en ver cómo estaba todo el código e ir viendo qué podía eliminar y qué no, y cómo podía recolocarlo todo.
Conclusión: tardo mucho más en eliminar partes que no voy a usar, y en depurar el código que en hacerlo desde 0, o si no desde 0, al menos cogiendo código hecho, pero solo de lo que mi EA va a necesitar y usar. (No es el caso de tu plantilla, porque aún no lleva todas las funciones, pero imagina que se empieza a trabajar, la gente empieza a aportar ideas, y se le van añadiendo 1000 opciones más para cubrir las necesidades de todo el mundo). En ese caso ya estaríamos en las mismas, y mi humilde opinión es que es muy de agradecer y que nos sería muy válida, pero para cuando queramos meter un módulo de lo que sea y no sepamos cómo hacerlo o nos de pereza programarlo desde 0, entonces cogerlo de la plantilla y pegarlo directamente en nuestro EA, pero hacerlo al revés no lo veo óptimo, por los motivos comentados.
Por otra parte, viendo el código de la plantilla, yo algunas de las variables que metes con input, las metería como extern, (sobre todo SL, TP, etc etc), ya que como input sí que puedes modificarlas en las propiedades del EA a la hora de hacer el backtest, pero no puedes incluírlas en los procesos de optimización.
Lo dicho, muchísimas gracias por la iniciativa. También llevas mi reputación.
Saludos y abrazos a todos.
:) Aclarado.
MCSoft, mira este indicador, a ver si se puede implementar como un criterio en la plantilla EA como un ejemplo. Tiene tanto criterio de entrada como de salida. Seria interesante que a simple vista se pudiera distinguir entre el codigo de plantilla el el codigo de criterio por decirlo de alguna manera.
Si no se entiende bien algo me lo dices y aclaro cualquier punto.
Si crees que no es de interés pues nada, pero viendo esto ya pordiamos implementar otros criterios o añadir filtros y cosas.
Abrazos.
;)
No consigo subir el archivo. No me funciona el sistema de subida de archivos, el boton de seleccionar archivos. ¿A alguien mas le pasa?
Ciclo buenas tardes!!!!
Espero con ansiedad que me envíes el indicador para analizarlo, y ver como lo integramos al EA para que todos los seguidores del tema puedan ver como integrar un indicador en un EA.
Si aun no te funciona la opcion de subir archivos me lo puedes enviar por correo a
[email protected], y yo lo subo al post
Desde ya voy adelantando que cuando tenemos un indicador y queremos integrarlo en el EA, hay dos alternativas:
1- Copiar el codigo del indicador (la parte de calculo) dentro del EA
2- Solicitar desde el EA la ejecucion del indicador y obtener el calculo del mismo en cada tick
La segunda opción es la mas sencilla, pero requiere distribuir el indicador (compilado en ex4) junto con nuestro EA para que funcione.
Espero entonces que me envíes el archivo para subirlo y comenzar.
Saludos
:) Aclarado.
MCSoft, mira este indicador, a ver si se puede implementar como un criterio en la plantilla EA como un ejemplo. Tiene tanto criterio de entrada como de salida. Seria interesante que a simple vista se pudiera distinguir entre el codigo de plantilla el el codigo de criterio por decirlo de alguna manera.
Si no se entiende bien algo me lo dices y aclaro cualquier punto.
Si crees que no es de interés pues nada, pero viendo esto ya pordiamos implementar otros criterios o añadir filtros y cosas.
Abrazos.
;)
No consigo subir el archivo. No me funciona el sistema de subida de archivos, el boton de seleccionar archivos. ¿A alguien mas le pasa?
Hola Ciclo:
Te voy a responder a esto desde la ignorancia total de programación, pero basándome en ejemplos que yo tengo.
Como bien te ha contestado MCSoft hoy en día los programadores comparten el mismo editor para MT4 y MT5, y por lo que puedo observar en mis EAs, dependiendo del programador, donde antes se usaba genéricamente int start(), hoy en día muchos programadores usan void OnTick(), pero indistintamente, depende mucho de la persona que lo programe y de los conocimientos que tenga de programación.
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
datetime data;
int start()
{
}
Ahora se utiliza mucho
void OnTick()
{
}
Es mi humilde opinión, por favor corregidme si me equivoco.
Un fuerte abrazo.
Hermo.
Hermo, estas en lo cierto. Tanto Metatrader 4 (MT4) como Metatrader 5 (MT5) incorporan el mismo editor de código (Metaeditor). MT4 con su editor de codigo por defecto utilizaba el lenguaje MQL4 como lenguaje para indicadores, EAs y Scripts. La intencion de Metaquotes era reemplazar totalmente la plataforma tanto del lado del broker como del trader, e imponer MT5 (el lanzamiento fue en Junio de 2010), con el nuevo editor de código y el nuevo lenguaje MQL5, incompatible con MQL4.
Los primeros en resistirse al cambio fueron los brokers, porque tenian una base muy grande de clientes con MT4, y los beneficios no eran suficientes como para obligar a todos sus clientes a cambiar a MT5, entonces siguieron trabajando con MT4, y por otro lado, los programadores que ya tenian productos, indicadores, scripts, etc programados en MQL4 se verian obligados a reprogramar todo. La resistencia al cambio despues de 4 años aún continua, y Metaquotes se vio forzado a seguir actualizando MT4 e incorporar la mayoria de las novedades que iban a ser exclusivas de MT5 (como el servicio de señales integrado en la plataforma, y el market de aplicaciones), haciendo tambien que el editor de codigo sea compatible con ambos lenguajes.
Desde el punto de vista de la programacion el editor de codigo ahora permite indistintamente trabajar con ambos lenguajes, pero incluso permite mezclarlos en el mismo script o EA, lo cual me parece totalmente incorrecto.
Actualmente es posible compilar cualquier EA o indicador que bajemos de internet en nuestro editor, sin importar si fue escrito en MQL4, en MQL5 o en una mezcla de ambos, incluso permite programar con MQL4 y guardar el resultado en un archivo .mq5 o al revés, programar en MQL5 y guardar en archivo .mq4 (compilado queda como .ex4).
Como programador recomiendo a quien este empezando, tratar de adecuarse y usar MQL5, ya que cuando los brokers se pasen definitivamente a MT5 (para lo cual falta, pero esta pasando), Metaquotes va a dejar de dar soporte a MQL4.
Me extendi un poco, se nota que me gusta el tema no? ja ja
Saludos
indovinello
14-04-2024 02:29,
Gracias a todos por la aceptación del tema y por vuestros consejos. Estoy agradecido de recibir el aliento y los consejos de miembros con mucha trayectoria en la comunidad (Hermo, Ciclo).
Quiero contarles a todos, y en respuesta a los consejos de Hermo principalmente, porque se me ocurrio subir esta plantilla.
Como ya comente previamente , soy desarrollador. Me tope con el mundo del trading justamente buscando información de programación, buscando en google me aparecieron los famosos "asesores expertos" y me maraville de la cantidad de tecnicas de programacion que se usan en ellos (machine learning, analisis y calculo numerico, comunicaciones, analisis de señales, etc).
No me costo mucho empezar a programar en MQL4 debido a su similitud con C, Obviamente que mi primera impresion fue "esto es muy facil, verificar unos cuantos indicadores, tomar unas decisiones y operar para ganar dinero".
Con el tiempo, luego de muchos programas de prueba, me encontre con que la situacion no era tan sencilla, el mercado cambia mucho, y una estrategia que gana millones en los ultimos 3 meses, si se prueba en los ultimos 6 meses pierde todo, ahi es donde entra la experiencia del trader, en reconocer la situacion actual del mercado y aplicar la estrategia que mejores resultados de.
Además, hay muchas otras cuestiones que entran en juego y que me obligaron a leer mucho, por ejemplo el money management, una estrategia con el 90% de deteccion de señales correctas puede fracasar si no tiene un correcto manejo del riesgo y de las posiciones abiertas, ya que ese 10% de señales falsas pueden provocar la perdida de toda la cuenta.
Soy inherentemente un programador, no me gusta hacer nada "manualmente", si es posible automatizarlo ja ja, mi cabeza trabaja de esa manera y creo que ya no la puedo cambiar.
Empece subiendo una plantilla en blanco para mostrar todo el codigo que un asesor experto lleva en su interior Y QUE NO INCLUYE EN NADA A LA ESTRATEGIA!!!!!. Si hablamos del cruce de medias moviles por ejemplo, se puede escribir un codigo funcional en unas 30 lineas de código, para detectar el cruce de medias y abrir las operaciones con take profit y stop loss fijos, pero las pruebas dan un fracaso rotundo, porque se necesita no solo saber cuando abrir posiciones, sino también cuando cerrarlas, detectar cuando una operaciones esta siendo ganadora y mover los stops y profits para aprovecharla y ganar mas. De igual manera, hay que saber cuando una operacion abierta con una señal correcta se torna perdedora y poder minimizar dicha perdida.
Todo esto nuestro cerebro lo hace en forma automatica recurriendo a nuestra experiencia, y como en cualquier deporte que practiquemos luego de un tiempo, el pensamiento se automatiza, podemos ver un cruce de medias moviles y sin saber porque, nuestro cerebro nos dice "NO OPERES!!!!" eso es porque la experiencia esta trabajando en segundo plano, y ve patrones, y condiciones que se han generado en el pasado.
Todo esto es muy dificil de llevar al código, creo que en ese punto es en donde falla el encuentro entre traders y programadores. Siguiendo con el ejemplo muy simple del cruce de medias moviles, el trader plantea "abrir posiciones cuando la EMA de periodo 5 cruza por encima de la EMA de periodo 20 y ambas estan por arriba de la EMA de periodo 200".
Esa afirmación, aunque parezca contundente es muy subjetiva, porque para un programa una linea que en la vela previa iba 1 pip por debajo de la otra, y en la vela actual va 1 pip por arriba, y ambas 1 pip por arriba de la EMA 200 ya cumplen la condicion de cruce, y disparan la operación. El programa cumple las condiciones establecidas pero genera una operación desastrosa. Esto ocurre porque el cerebro del trader, basado en su experiencia "ve" mas alla de la estrategia, ve las pendientes de las curvas, si todas vienen en pendiente positiva es mas probable que la operacion sea exitosa, si vienen recuperandose de un impulso, etc. Toda esa información no se incluye en el codigo y por eso la misma estrategia que al trader le da buenos resultados operando manualmente, fracasa cuando se automatiza.
Creo que podemos complementar todas las sugerencias, sin descartar nada, todos los aportes e ideas son buenos, y ayudan a encontrar el camino correcto. Me parecio correcto subir una plantilla en blanco para mostrar el panorama, he analizado algunos asesores expertos y muchos de ellos son realmente muy dificiles de entender, no porque tengan una estrategia muy completa, sino porque mezclan código del apertura y cierre de ordenes con money management y se forman bloques anidados muy dificiles de seguir, incluso para un programador.
Espero vuestros comentarios, y sugerencias, si alguno de ustedes quiere analizar un EA completo le ruego lo suba , asi todos podemos descargarlo y lo analizamos, de igual manera, el que desee agregar una estrategia a esta plantilla también es bienvenido, creo que una cosa no quita a la otra, y creo que un camino puede ser mejor que otro, no necesariamente uno bueno y otro malo.
Saludos a todos y gracias nuevamente por sus consejos y aliento.
Buenas, MCSoft, sólo quería darte las gracias por compartir, decirte que tus planteamientos me parecen muy interesantes y que seguiré este hilo con interés y, si tengo oportunidad, aportando también.
Saludos.
Hola MCSof, no veo la funcion especial start que es obligatoria y que se activa cada vez que se produce un tick.
Saludos.
Hola Ciclo:
Te voy a responder a esto desde la ignorancia total de programación, pero basándome en ejemplos que yo tengo.
Como bien te ha contestado MCSoft hoy en día los programadores comparten el mismo editor para MT4 y MT5, y por lo que puedo observar en mis EAs, dependiendo del programador, donde antes se usaba genéricamente int start(), hoy en día muchos programadores usan void OnTick(), pero indistintamente, depende mucho de la persona que lo programe y de los conocimientos que tenga de programación.
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
datetime data;
int start()
{
}
Ahora se utiliza mucho
void OnTick()
{
}
Es mi humilde opinión, por favor corregidme si me equivoco.
Un fuerte abrazo.
Hermo.
Hola MCSof, no veo la funcion especial start que es obligatoria y que se activa cada vez que se produce un tick.
Saludos.
Saludos Ciclo.
Para explicarte la estructura del programa te comento un poco la historia reciente de metatrader:
Metatrader 5 (MT5), fue lanzado hace ya varios años, y no ha tenido la aceptación que se esperaba. Tecnicamente MT5 es mucho mejor que MT4, pero para que fuera aceptado, debia ser reemplazado primero del lado de los brokers. No se sinceramente el motivo pero los brokers se resistieron al cambio, ya teniendo una base de clientes muy grande con MT4 no quisieron actualizar ni obligar a sus clientes a cambiar.
MT4 trabajaba con programas escritos en lenguaje MQL4, muy similar a C (es un C reducido, que no permite estructuras ni punteros por ejemplo). Por otro lado, MT5 incorporo el lenguaje MQL5, mas similar a C++ (soporte para clases y objetos entre otras cosas).
MQL5 es incompatible con MQL4, y han cambiado los nombres de las funciones que se usan en los EAs.
Por ejemplo, la funcion start, se reemplazo por OnTick(), la funcion init por OnInit().
Como MQL5 planteaba muchas mejoras a nivel lenguaje de programacion, pero el terminal en si MT5 no era aceptado por los brockers, Metaquotes (la empresa desarrolladora de metatrader) decidio seguir actualizando Metatrader 4 y le incorporó el editor de codigo MQL5.
El editor MQL5 ahora acepta y compila programas escritos en MQL4 y en MQL5.
Esto genera mucha confusion, porque hay codigos en internet que usan la funcion start() y otros que usan OnTick(). Mi versión de Metatrader es 4.00 build 646 (Se puede conocer la version del software desde Menu->Ayuda->About), y al abrir el editor de codigo, la versión del mismo (Help ->About->Metaeditor...) veo que tengo la versión 5.00 build 934.
Espero haber aclarado la duda, estoy a tu disposicion por cualquier otra consulta.
Saludos
Gracias a todos por la aceptación del tema y por vuestros consejos. Estoy agradecido de recibir el aliento y los consejos de miembros con mucha trayectoria en la comunidad (Hermo, Ciclo).
Quiero contarles a todos, y en respuesta a los consejos de Hermo principalmente, porque se me ocurrio subir esta plantilla.
Como ya comente previamente , soy desarrollador. Me tope con el mundo del trading justamente buscando información de programación, buscando en google me aparecieron los famosos "asesores expertos" y me maraville de la cantidad de tecnicas de programacion que se usan en ellos (machine learning, analisis y calculo numerico, comunicaciones, analisis de señales, etc).
No me costo mucho empezar a programar en MQL4 debido a su similitud con C, Obviamente que mi primera impresion fue "esto es muy facil, verificar unos cuantos indicadores, tomar unas decisiones y operar para ganar dinero".
Con el tiempo, luego de muchos programas de prueba, me encontre con que la situacion no era tan sencilla, el mercado cambia mucho, y una estrategia que gana millones en los ultimos 3 meses, si se prueba en los ultimos 6 meses pierde todo, ahi es donde entra la experiencia del trader, en reconocer la situacion actual del mercado y aplicar la estrategia que mejores resultados de.
Además, hay muchas otras cuestiones que entran en juego y que me obligaron a leer mucho, por ejemplo el money management, una estrategia con el 90% de deteccion de señales correctas puede fracasar si no tiene un correcto manejo del riesgo y de las posiciones abiertas, ya que ese 10% de señales falsas pueden provocar la perdida de toda la cuenta.
Soy inherentemente un programador, no me gusta hacer nada "manualmente", si es posible automatizarlo ja ja, mi cabeza trabaja de esa manera y creo que ya no la puedo cambiar.
Empece subiendo una plantilla en blanco para mostrar todo el codigo que un asesor experto lleva en su interior Y QUE NO INCLUYE EN NADA A LA ESTRATEGIA!!!!!. Si hablamos del cruce de medias moviles por ejemplo, se puede escribir un codigo funcional en unas 30 lineas de código, para detectar el cruce de medias y abrir las operaciones con take profit y stop loss fijos, pero las pruebas dan un fracaso rotundo, porque se necesita no solo saber cuando abrir posiciones, sino también cuando cerrarlas, detectar cuando una operaciones esta siendo ganadora y mover los stops y profits para aprovecharla y ganar mas. De igual manera, hay que saber cuando una operacion abierta con una señal correcta se torna perdedora y poder minimizar dicha perdida.
Todo esto nuestro cerebro lo hace en forma automatica recurriendo a nuestra experiencia, y como en cualquier deporte que practiquemos luego de un tiempo, el pensamiento se automatiza, podemos ver un cruce de medias moviles y sin saber porque, nuestro cerebro nos dice "NO OPERES!!!!" eso es porque la experiencia esta trabajando en segundo plano, y ve patrones, y condiciones que se han generado en el pasado.
Todo esto es muy dificil de llevar al código, creo que en ese punto es en donde falla el encuentro entre traders y programadores. Siguiendo con el ejemplo muy simple del cruce de medias moviles, el trader plantea "abrir posiciones cuando la EMA de periodo 5 cruza por encima de la EMA de periodo 20 y ambas estan por arriba de la EMA de periodo 200".
Esa afirmación, aunque parezca contundente es muy subjetiva, porque para un programa una linea que en la vela previa iba 1 pip por debajo de la otra, y en la vela actual va 1 pip por arriba, y ambas 1 pip por arriba de la EMA 200 ya cumplen la condicion de cruce, y disparan la operación. El programa cumple las condiciones establecidas pero genera una operación desastrosa. Esto ocurre porque el cerebro del trader, basado en su experiencia "ve" mas alla de la estrategia, ve las pendientes de las curvas, si todas vienen en pendiente positiva es mas probable que la operacion sea exitosa, si vienen recuperandose de un impulso, etc. Toda esa información no se incluye en el codigo y por eso la misma estrategia que al trader le da buenos resultados operando manualmente, fracasa cuando se automatiza.
Creo que podemos complementar todas las sugerencias, sin descartar nada, todos los aportes e ideas son buenos, y ayudan a encontrar el camino correcto. Me parecio correcto subir una plantilla en blanco para mostrar el panorama, he analizado algunos asesores expertos y muchos de ellos son realmente muy dificiles de entender, no porque tengan una estrategia muy completa, sino porque mezclan código del apertura y cierre de ordenes con money management y se forman bloques anidados muy dificiles de seguir, incluso para un programador.
Espero vuestros comentarios, y sugerencias, si alguno de ustedes quiere analizar un EA completo le ruego lo suba , asi todos podemos descargarlo y lo analizamos, de igual manera, el que desee agregar una estrategia a esta plantilla también es bienvenido, creo que una cosa no quita a la otra, y creo que un camino puede ser mejor que otro, no necesariamente uno bueno y otro malo.
Saludos a todos y gracias nuevamente por sus consejos y aliento.
Muchas gracias. Qué bueno!!!
Hola amigos, como dije en mi presentación ante esta comunidad, tengo experiencia en desarrollo c/c++/python, y aunque soy un novato total en el trading quiero aportar desde don de pueda, por ello, les traigo un template en blanco que realice para programar vuestros EAs. El template incluye:
- Opcion de procesar en cada tick o en la apertura de la barra
- Opcion de procesar o no TrailingStop en cada tick sobre las ordenes abiertas
- Opcion de lote fijo o calculo del mismo antes de cada operación (money management)
- Opcion de solo abrir ordenes en base a la estrategia, o también operar con señales de cierre
- Opción de una sola orden abierta por vez, o permitir multiples ordenes.
Traté de hacerlo lo mas sencillo posible, bien comentado para que sea facilmente modificable. En el codigo se indica cada paso y operación que se hace, y se indica en donde es necesario incluir el codigo de la estrategia y los indicadores que usen.
Espero vuestros comentarios para mejorarlo lo mas posible.
Saludos!!!!!!!
Hola amigos, como dije en mi presentación ante esta comunidad, tengo experiencia en desarrollo c/c++/python, y aunque soy un novato total en el trading quiero aportar desde don de pueda, por ello, les traigo un template en blanco que realice para programar vuestros EAs. El template incluye:
- Opcion de procesar en cada tick o en la apertura de la barra
- Opcion de procesar o no TrailingStop en cada tick sobre las ordenes abiertas
- Opcion de lote fijo o calculo del mismo antes de cada operación (money management)
- Opcion de solo abrir ordenes en base a la estrategia, o también operar con señales de cierre
- Opción de una sola orden abierta por vez, o permitir multiples ordenes.
Traté de hacerlo lo mas sencillo posible, bien comentado para que sea facilmente modificable. En el codigo se indica cada paso y operación que se hace, y se indica en donde es necesario incluir el codigo de la estrategia y los indicadores que usen.
Espero vuestros comentarios para mejorarlo lo mas posible.
Saludos!!!!!!!
Hola MCSof, no veo la funcion especial start que es obligatoria y que se activa cada vez que se produce un tick.
Saludos.
Por plantear un poco a lo que me refiero:
Cuando planteamos automatizar una idea, un sistema de trading, entiendo que todo el mundo tiene en su mente ponerla en real en algún momento, esto es el primer punto que todo el mundo tiene que tener claro, lo segundo es que va a ser una estrategia totalmente autónoma, es decir, sin que tenga que existir la intervención humana, por lo tanto esto lleva a la conclusión que tendremos que saber las mil y una que nos puede liar el mercado y que habremos sabido trasmitírselo al código de esa Ea, esta parte es la más compleja y que se queda en el tintero la mayoría de las veces.
Al automatizar una estrategia lo fácil es sacar las señales y que en un backtest todo sea perfecto, pero lo que tenemos que pensar es que el backtest es la situación idílica, ahora llega la realidad, que le pueden pasar a nuestras señales en una situación real, como prever las posibles circunstancias de un mercado en real, son muchas os lo garantizo, eso es lo que yo considero fundamental en programación, saber tener en cuenta todas esas posibles circunstancias y que la maquina sepa reaccionar ante ellas, pensad que un código no es nuestro cerebro, que mejor o peor sabrá salir de esos errores, a la maquina si no le has dicho lo que tiene que hacer, sencillamente no hará nada con sus consecuencias.
Con todo esto no quiero ser pesimista ni nada por el estilo, ok, yo soy un loco del automatismo, por eso os comento todo esto, cuando sufres en tus propias carnes estos defectos de programación, lo fácil es maldecir al programador y resulta que él no tiene culpa la gran mayoría de las veces, sencillamente eres tu el que no le has dicho que programe esas posibles circunstancias.
Por lo tanto y después de todo este rollo en vez de plantear aumentar una plantilla magnifica como la que has realizado, propongo programar un sistema de entrada muy sencillo y que el resto de compañeros que saben programar y los que saben de trading planteen toda su sabiduría de cara a que ese sistema funcione perfectamente y así sucesivamente, creo que es el modo perfecto de crear una buena cultura de programación.
Es evidente que nos estamos saltado pasos enormes de cara a los que quieran aprender a automatizar estrategias, me refiero a toda la teoría del propio lenguaje de programación. Pero si realmente existe el interés seguramente se vayan exponiendo preguntas que obtendrán respuesta de cara a esa teoría.
Bueno solo queda saber si todos pensais del mismo modo, que debería de ser no, pero si todos deberíamos de pensar llegar al mismo sitio.
Espero vuestra opinión.
Un abrazo.
Hermo.:contento2:
:contento2:
Hola amigo Hermo MCSort lo que ha hecho es una plantilla en blanco, es decir una especie de plantilla universal. El objetivo, creo es, depurar esta plantilla en blanco y que sea lo mas universal y versatil posible para que cuando uno tenga una idea, es decir tenga unos criterios claros de entrada y salida, solo tenga que ponerlos en el sitio correspondiente de la plantilla y andando.
Lo que pasa es que incluso en una plantilla superperfecta yo de momento no me veo implementando criterios. Solo con ejemplos de EAs reales me iria atreviendo. Esto nos da pie para aportar criterios de entrada y salida que muchos tenemos en nuestra cabeza y ver que tal.
Tienes razón que cuando operamos en manual nuestro propio cerebro hace filtro y un EA es un robot, y es tonto, solo hace lo que le han dicho que haga y por eso en los criterios de entrada y salida tenemos que poner los filtros necesarios. Pero esto en principio está mas allá del proposito inicial de la plantilla.
Un abrazo.
:)
Igual no estaria mal crear un grupo de trabajo que nos beneficiara a todos lo del grupo.
Es una idea.
Hola amigos, como dije en mi presentación ante esta comunidad, tengo experiencia en desarrollo c/c++/python, y aunque soy un novato total en el trading quiero aportar desde don de pueda, por ello, les traigo un template en blanco que realice para programar vuestros EAs. El template incluye:
- Opcion de procesar en cada tick o en la apertura de la barra
- Opcion de procesar o no TrailingStop en cada tick sobre las ordenes abiertas
- Opcion de lote fijo o calculo del mismo antes de cada operación (money management)
- Opcion de solo abrir ordenes en base a la estrategia, o también operar con señales de cierre
- Opción de una sola orden abierta por vez, o permitir multiples ordenes.
Traté de hacerlo lo mas sencillo posible, bien comentado para que sea facilmente modificable. En el codigo se indica cada paso y operación que se hace, y se indica en donde es necesario incluir el codigo de la estrategia y los indicadores que usen.
Espero vuestros comentarios para mejorarlo lo mas posible.
Saludos!!!!!!!
:)
MCSoft muchas gracias por tu aporte. Es una buena idea. El siguiente paso seria tener un criterio de entrada y salida y aplicarlo para ver un verdadero EA terminado. Que gane o no dinero da igual, lo importante es ver la aplicacion de la plantilla a un EA real. Si quieres yo te paso un indicador que hice de cruce de tres medias moviles y ver el triple cruce de la muerte con criterios para entradas y salidas. El indicador dibuja flechas para la entrada y otro simbolo para la salida. Funciona muy bien para tendencias pero muy mal para rangos. Estaria bien adaptar la idea para un EA. A mi me vendria muy bien para aprender por que llegue al indicador modificando otro de cruce de dos medias moviles. Ideas no me faltan pero estoy muy verde en esto de la programacion y de EAs no se nada.
Por supuesto tienes reputación por mi parte por esta buena idea y trabajo. Espero que esto no se quede aquí y podamos ir desarrollando un EA universal mas complejo, por ejemplo con Money Management o algunas cosas que se nos vaya ocurriendo para mejorarlo. Podria aportar un scrip para que lo vieras que tambien te puede colocar el stop de forma manual o automatica, y segun ese stop te calcula la distancia del stop segun el riesgo elegido. En fin podriamos llegar a un EA maravilloso.
Me encante el estilo de programación mediante funciones es un estilo claro y versatil.
Un abrazo.
:D
thebarbarian
14-04-2024 22:34,
Hola mc esta es tu empresa? McSoft | Software a medida | Dise (http://www.mcsoft.cl/) me gustaria desarrollar un proyecto en C + es decir metatrader y expert advisor si te interesa manda un correo a
[email protected] (
[email protected]) puede funcionar bien con tus conocimientos de programacion y mi experiencia en forex .Feliz dia
Por plantear un poco a lo que me refiero:
Cuando planteamos automatizar una idea, un sistema de trading, entiendo que todo el mundo tiene en su mente ponerla en real en algún momento, esto es el primer punto que todo el mundo tiene que tener claro, lo segundo es que va a ser una estrategia totalmente autónoma, es decir, sin que tenga que existir la intervención humana, por lo tanto esto lleva a la conclusión que tendremos que saber las mil y una que nos puede liar el mercado y que habremos sabido trasmitírselo al código de esa Ea, esta parte es la más compleja y que se queda en el tintero la mayoría de las veces.
Al automatizar una estrategia lo fácil es sacar las señales y que en un backtest todo sea perfecto, pero lo que tenemos que pensar es que el backtest es la situación idílica, ahora llega la realidad, que le pueden pasar a nuestras señales en una situación real, como prever las posibles circunstancias de un mercado en real, son muchas os lo garantizo, eso es lo que yo considero fundamental en programación, saber tener en cuenta todas esas posibles circunstancias y que la maquina sepa reaccionar ante ellas, pensad que un código no es nuestro cerebro, que mejor o peor sabrá salir de esos errores, a la maquina si no le has dicho lo que tiene que hacer, sencillamente no hará nada con sus consecuencias.
Con todo esto no quiero ser pesimista ni nada por el estilo, ok, yo soy un loco del automatismo, por eso os comento todo esto, cuando sufres en tus propias carnes estos defectos de programación, lo fácil es maldecir al programador y resulta que él no tiene culpa la gran mayoría de las veces, sencillamente eres tu el que no le has dicho que programe esas posibles circunstancias.
Por lo tanto y después de todo este rollo en vez de plantear aumentar una plantilla magnifica como la que has realizado, propongo programar un sistema de entrada muy sencillo y que el resto de compañeros que saben programar y los que saben de trading planteen toda su sabiduría de cara a que ese sistema funcione perfectamente y así sucesivamente, creo que es el modo perfecto de crear una buena cultura de programación.
Es evidente que nos estamos saltado pasos enormes de cara a los que quieran aprender a automatizar estrategias, me refiero a toda la teoría del propio lenguaje de programación. Pero si realmente existe el interés seguramente se vayan exponiendo preguntas que obtendrán respuesta de cara a esa teoría.
Bueno solo queda saber si todos pensais del mismo modo, que debería de ser no, pero si todos deberíamos de pensar llegar al mismo sitio.
Espero vuestra opinión.
Un abrazo.
Hermo.:contento2:
Hola amigos, como dije en mi presentación ante esta comunidad, tengo experiencia en desarrollo c/c++/python, y aunque soy un novato total en el trading quiero aportar desde don de pueda, por ello, les traigo un template en blanco que realice para programar vuestros EAs. El template incluye:
- Opcion de procesar en cada tick o en la apertura de la barra
- Opcion de procesar o no TrailingStop en cada tick sobre las ordenes abiertas
- Opcion de lote fijo o calculo del mismo antes de cada operación (money management)
- Opcion de solo abrir ordenes en base a la estrategia, o también operar con señales de cierre
- Opción de una sola orden abierta por vez, o permitir multiples ordenes.
Traté de hacerlo lo mas sencillo posible, bien comentado para que sea facilmente modificable. En el codigo se indica cada paso y operación que se hace, y se indica en donde es necesario incluir el codigo de la estrategia y los indicadores que usen.
Espero vuestros comentarios para mejorarlo lo mas posible.
Saludos!!!!!!!
Buenos días compañero MCSoft:
Evidentemente mereces reputación y mil gracias.
Has iniciado un tema apasionante para los que nos gusta el mundo del código. He abierto tu primera témplate y lo primero que te tengo que decir, es gracias por explicar paso a paso todas las líneas. Estoy convencido que es un tema que me encantaría que despertase emoción entre los miembros del foro y que se hinchara todo el mundo a pedirte modificaciones, mas código y un montón de explicaciones, para los que se están iniciando, para los que les interesa el tema de automatización de funciones, para los expertos... etc., este tema puede ser realmente muy interesante.
Como tu bien dices, no tienes ni idea de trading pero si de programar, este es el único punto, y te lo digo por experiencia que te falta para tener la ecuación perfecta. Yo no sé de programar y de trading me considero un tío que sabe algo tirando a poco a pesar de los años que llevo, cada día descubro cosas nuevas. Esto te lo digo también desde la experiencia, los mejores programadores que conozco, a los únicos que yo hoy en día les encargaría un trabajo serian precisamente los que tengan la ecuación perfecta, sencillamente por lógica de entendimiento, no hacia mí, que sería quien les encarga el trabajo, si no hacia el propio trading y sus matices. He podido comprobar últimamente que una estrategia automatizada dependiendo como se programe funciona o sencillamente son líneas de código sin coherencia alguna que acabaran haciendo las cosas mal.
Por eso te propongo una idea, que me gustaría que todos los compañeros del foro la refutasen, la completasen, la discutirán...etc. Ya que has empezado con la plantilla de un código, que tiene su valor evidentemente. Yo considero mucho mejor que se empezaran con códigos de EAs completos como plantillas. Esto también te lo digo desde la experiencia. Iremos comprobando que cada idea tendrá sus matices a la hora de programarse, sobre todo en MT4. Pero esto no deja de ser una idea mía, evidentemente primero tú tienes que estar dispuesto a currártelo y evidentemente también tiene que existir por parte de los miembros del foro una respuesta a tu idea y a tu trabajo.
Es decir, tú has generado una plantilla base que yo te discutiría hasta el infinito, cuando digo discutiría me refiero positivamente eh! Porque no empezar con una simple idea y dejar que surjan dudas tanto por tu parte como inexperto en el trading como por parte de los miembros que estén interesados en código. Yo a ti no te tengo que decir que cuanto más limpio un código mejor, para que poner líneas en una EA que al final no tienen función alguna, verdad?
Bueno después de todo este rollo de domingo por la mañana, esperare a ver si la iniciativa tiene respuesta.
Un fuerte abrazo e insisto, muchísimas gracias por la iniciativa.
Hermo.
RSI hunter
15-04-2024 03:24,
Mil gracias y reputación amigo!!!
Muchas gracias amigos!!!!
Me siento muy bien recibido en el foro!!!!
Les vuelvo a recordar, soy un principiante en el trading, pero tengo mucha experiencia en C/C++, por lo que mis conocimientos estan a vuestra disposición, cualquier sugerencia de ustedes, que son traders mas experimentados, para mejorar este template con gusto la voy a añadir y compartir con el foro, para que todos nos beneficiemos. La idea es hacer una "plantilla" que cubra la funcionalidad mas empleada en los EAs, para que solo nos reste programar las condiciones de entrada y salida para compra/venta.
Saludos!!!
Wow así se empieza con buen pie en un foro.
Felicidades y reputación ;)
Saludos
Samuu
Muchas gracias compañero, muy buen aporte. Por supuesto te mando reputación.
Hola amigos, como dije en mi presentación ante esta comunidad, tengo experiencia en desarrollo c/c++/python, y aunque soy un novato total en el trading quiero aportar desde don de pueda, por ello, les traigo un template en blanco que realice para programar vuestros EAs. El template incluye:
- Opcion de procesar en cada tick o en la apertura de la barra
- Opcion de procesar o no TrailingStop en cada tick sobre las ordenes abiertas
- Opcion de lote fijo o calculo del mismo antes de cada operación (money management)
- Opcion de solo abrir ordenes en base a la estrategia, o también operar con señales de cierre
- Opción de una sola orden abierta por vez, o permitir multiples ordenes.
Traté de hacerlo lo mas sencillo posible, bien comentado para que sea facilmente modificable. En el codigo se indica cada paso y operación que se hace, y se indica en donde es necesario incluir el codigo de la estrategia y los indicadores que usen.
Espero vuestros comentarios para mejorarlo lo mas posible.
Saludos!!!!!!!
Hola amigos, como dije en mi presentación ante esta comunidad, tengo experiencia en desarrollo c/c++/python, y aunque soy un novato total en el trading quiero aportar desde don de pueda, por ello, les traigo un template en blanco que realice para programar vuestros EAs. El template incluye:
- Opcion de procesar en cada tick o en la apertura de la barra
- Opcion de procesar o no TrailingStop en cada tick sobre las ordenes abiertas
- Opcion de lote fijo o calculo del mismo antes de cada operación (money management)
- Opcion de solo abrir ordenes en base a la estrategia, o también operar con señales de cierre
- Opción de una sola orden abierta por vez, o permitir multiples ordenes.
Traté de hacerlo lo mas sencillo posible, bien comentado para que sea facilmente modificable. En el codigo se indica cada paso y operación que se hace, y se indica en donde es necesario incluir el codigo de la estrategia y los indicadores que usen.
Espero vuestros comentarios para mejorarlo lo mas posible.
Saludos!!!!!!!
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions Inc. All rights reserved.