Publi

Publi

Página 4 de 7 PrimerPrimer 1234567 ÚltimoÚltimo
Resultados 31 al 40 de 63


  1. #31
    Avatar de robertomar
    Heidelbergensis


    Reputación:
    Poder de reputación: 9

    Espana
    Mensajes: 905
    Créditos: 15,929

    Re: Mi primer aporte: Template EA en blanco


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

    Archivo adjunto 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:

    Archivo adjunto 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:

    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:

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

    Archivo adjunto 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:

    Archivo adjunto 28534

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

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

     

  2.                         
    Publi
  3. #32




    Reputación:
    Poder de reputación: 3

    Mensajes: 26
    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

     

  4. #33
    Avatar de indovinello
    Neanderthalensis


    Reputación:
    Poder de reputación: 17

    Bolivia
    Mensajes: 3,792
    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:

    Archivo adjunto 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:

    Archivo adjunto 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:

    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:

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

    Archivo adjunto 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:

    Archivo adjunto 28534

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

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




  5. #34
    Avatar de Ciclo
    Heidelbergensis


    Reputación:
    Poder de reputación: 14

    Espana
    Mensajes: 2,430
    Créditos: 19,921

    Re: Mi primer aporte: Template EA en blanco

    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

    Foro de Forex Trading United
    Última edición por Ciclo; 25-06-2014 a las 15:24

     

  6. #35
    Avatar de Hermo
    Heidelbergensis


    Reputación:
    Poder de reputación: 11

    Mensajes: 858
    Créditos: 5,058

    EA MCSoft_3MA_v1.00_Solo Compras

    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.

    oro/attachment.php?s=b2e5daaa26ffc245eac3dcd620cb741a&attachmentid=28561&d=1403704244" id="attachment28561" rel="Lightbox_105357" >Mi primer aporte: Template EA en blanco-ea-foro.png

    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.

    Mi primer aporte: Template EA en blanco-ea-foro2.png
    Mi primer aporte: Template EA en blanco-3.png

    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:

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



    Foro de Forex Trading United
    Archivos adjuntados Archivos adjuntados



  7. #36
    Avatar de Ciclo
    Heidelbergensis


    Reputación:
    Poder de reputación: 14

    Espana
    Mensajes: 2,430
    Créditos: 19,921

    Re: Mi primer aporte: Template EA en blanco

    Cita Iniciado por MCSoft Ver mensaje
    Este es el código completo del EA:

    Archivo adjunto 28529
    MCSoft este archivo es el indicador, no es el EA. ¿Puedes subirlo por favor? Gracias.
    Foro de Forex Trading United

     

  8. #37




    Reputación:
    Poder de reputación: 3

    Mensajes: 26
    Créditos: 1,634

    Re: EA MCSoft_3MA_v1.00_Solo Compras

    Cita Iniciado por Hermo Ver mensaje
    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.

    oro/attachment.php?s=b2e5daaa26ffc245eac3dcd620cb741a&attachmentid=28561&d=1403704244" id="attachment28561" rel="Lightbox_105363" >Mi primer aporte: Template EA en blanco-ea-foro.png

    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.

    Mi primer aporte: Template EA en blanco-ea-foro2.png
    Mi primer aporte: Template EA en blanco-3.png

    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:

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

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

    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:

    MCSoft_EA_3MA_v1.1.mq4

    Luego de analizar el codigo que subiste voy a fusionar ambos para ir manteniendo el orden, cualquier sugerencia como siempre es bienvenida.
    Saludos!!!!
    Foro de Forex Trading United

     

  9. #38




    Reputación:
    Poder de reputación: 3

    Mensajes: 26
    Créditos: 1,634

    Re: Mi primer aporte: Template EA en blanco

    Cita Iniciado por Ciclo Ver mensaje
    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)

    Archivo adjunto 28568
    Archivo adjunto 28570

    Saludos!!!!
    Foro de Forex Trading United

     

  10. #39
    Avatar de Ciclo
    Heidelbergensis


    Reputación:
    Poder de reputación: 14

    Espana
    Mensajes: 2,430
    Créditos: 19,921

    Re: Mi primer aporte: Template EA en blanco

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

    Archivo adjunto 28568
    Archivo adjunto 28570

    Saludos!!!!


    Hola MCSoft, No se que pasa pero no me funciona, no puedo bajar estos dos archivos.

    Saludos.
    Foro de Forex Trading United

     

  11. #40




    Reputación:
    Poder de reputación: 3

    Mensajes: 26
    Créditos: 1,634

    Re: Mi primer aporte: Template EA en blanco


    Publi
    Cita Iniciado por Ciclo Ver mensaje


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

     

Página 4 de 7 PrimerPrimer 1234567 ÚltimoÚltimo

Etiquetas para este tema

Publi
Publi


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