Herramientas MT4 Mi primer aporte: Template EA en blanco - Página 4
Página 4 de 7 PrimerPrimer 1234567 ÚltimoÚltimo
Resultados 31 al 40 de 63


  1. #31
    Avatar de indovinello



    Reputación:
    Poder de reputación: 27

    Bolivia
    Mensajes: 3.778
    Créditos: 12.975

    Re: Mi primer aporte: Template EA en blanco

    Cita Iniciado por MCSoft Ver mensaje
    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:

    3MAS Cross Alert v2.mq4

    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:

    Mi primer aporte: Template EA en blanco-eurusdm5.png

    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:

    Código:
      // --------------------------------------
       // 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:

    Código:
       // --------------------------------------
       // 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:

    Código:
       // --------------------------------------
       // 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:

    3MAS Cross Alert v2.mq4

    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):

    Mi primer aporte: Template EA en blanco-testergraph1.gif

    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:

    Mi primer aporte: Template EA en blanco-testergraph2.gif

    Este es el EA que solo genera señales de compra (no genera señales de venta ni de cierre):

    MCSoft_EA_3MA_v1.0_solo_compra.mq4

    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-
    Foro de Forex Trading United




  2. #32




    Reputación:
    Poder de reputación: 13

    Mensajes: 33
    Créditos: 1.634

    Re: Mi primer aporte: Template EA en blanco

    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!!!!!
    Foro de Forex Trading United

  3. #33

    Re: Mi primer aporte: Template EA en blanco

    Cita Iniciado por MCSoft Ver mensaje
    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:

    3MAS Cross Alert v2.mq4

    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:

    Mi primer aporte: Template EA en blanco-eurusdm5.png

    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:

    Código:
      // --------------------------------------
       // 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:

    Código:
       // --------------------------------------
       // 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:

    Código:
       // --------------------------------------
       // 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:

    3MAS Cross Alert v2.mq4

    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):

    Mi primer aporte: Template EA en blanco-testergraph1.gif

    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:

    Mi primer aporte: Template EA en blanco-testergraph2.gif

    Este es el EA que solo genera señales de compra (no genera señales de venta ni de cierre):

    MCSoft_EA_3MA_v1.0_solo_compra.mq4

    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
    Foro de Forex Trading United

  4. #34
    Avatar de Hermo



    Reputación:
    Poder de reputación: 21

    Mensajes: 882
    Créditos: 6.631

    1º Version 3MAS Cross Alert v2

    Cita Iniciado por MCSoft Ver mensaje
    Buenas tardes amigos!!!!

    Este es el código completo del EA:

    3MAS Cross Alert v2.mq4

    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):

    Mi primer aporte: Template EA en blanco-testergraph1.gif

    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:

    Mi primer aporte: Template EA en blanco-testergraph2.gif

    Este es el EA que solo genera señales de compra (no genera señales de venta ni de cierre):

    MCSoft_EA_3MA_v1.0_solo_compra.mq4

    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.Mi primer aporte: Template EA en blanco-aplaudir.gif


    * 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.
    Foro de Forex Trading United



  5. #35




    Reputación:
    Poder de reputación: 13

    Mensajes: 193
    Créditos: 462

    Re: Mi primer aporte: Template EA en blanco

    Reputación compañero
    Foro de Forex Trading United

  6. #36




    Reputación:
    Poder de reputación: 13

    Mensajes: 33
    Créditos: 1.634

    Re: Mi primer aporte: Template EA en blanco

    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:

    3MAS Cross Alert v2.mq4

    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:

    Mi primer aporte: Template EA en blanco-eurusdm5.png

    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:

    Código:
      // --------------------------------------
       // 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:

    Código:
       // --------------------------------------
       // 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:

    Código:
       // --------------------------------------
       // 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:

    3MAS Cross Alert v2.mq4

    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):

    Mi primer aporte: Template EA en blanco-testergraph1.gif

    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:

    Mi primer aporte: Template EA en blanco-testergraph2.gif

    Este es el EA que solo genera señales de compra (no genera señales de venta ni de cierre):

    MCSoft_EA_3MA_v1.0_solo_compra.mq4

    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!!!!!
    Foro de Forex Trading United

  7. #37
    Avatar de Ciclo



    Reputación:
    Poder de reputación: 26

    Espana
    Mensajes: 2.510
    Créditos: 23.821

    Re: Mi primer aporte: Template EA en blanco

    Cita Iniciado por indovinello Ver mensaje
    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.
    Foro de Forex Trading United

  8. #38
    Avatar de Ciclo



    Reputación:
    Poder de reputación: 26

    Espana
    Mensajes: 2.510
    Créditos: 23.821

    Re: Mi primer aporte: Template EA en blanco

    Cita Iniciado por MCSoft Ver mensaje
    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.
    Foro de Forex Trading United

  9. #39

    Re: Mi primer aporte: Template EA en blanco

    Cita Iniciado por MCSoft Ver mensaje
    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
    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:

    Mi primer aporte: Template EA en blanco-bool-no-optimizable.png

    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:

    Mi primer aporte: Template EA en blanco-bool-optimizable.png

    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.
    Foro de Forex Trading United

  10. #40
    Avatar de indovinello



    Reputación:
    Poder de reputación: 27

    Bolivia
    Mensajes: 3.778
    Créditos: 12.975

    Re: Mi primer aporte: Template EA en blanco

    Cita Iniciado por Ciclo Ver mensaje
    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.
    Foro de Forex Trading United




Página 4 de 7 PrimerPrimer 1234567 ÚltimoÚltimo
This website uses cookies
Utilizamos cookies propias y de terceros para elaborar información estadística y mostrarle publicidad personalizada a través del análisis de su navegación. Si continúa navegando acepta su uso. Más información y política de cookies.
     

Aviso Legal
Ley Orgánica 15/1999, de 13 de diciembre, de Protección de Datos de Carácter Personal