Herramientas MT4 Mi primer aporte: Template EA en blanco - Página 2

 

Publi

Mi primer aporte: Template EA en blanco

 

Publi

Página 2 de 7 PrimerPrimer 123456 ... ÚltimoÚltimo
Resultados 11 al 20 de 63


  1. #11




    Reputación:
    Poder de reputación: 13

    Espana
    Mensajes: 462
    Créditos: 1.139

    Re: Mi primer aporte: Template EA en blanco


    Publi
    Mil gracias y reputación amigo!!!
    Foro de Forex Trading United

  2. Publi
    Publi


  3. #12
    Avatar de manusenda
    Erectus


    Reputación:
    Poder de reputación: 11

    Espana
    Mensajes: 130
    Créditos: 1.713

    Re: Mi primer aporte: Template EA en blanco

    Cita Iniciado por MCSoft Ver mensaje
    Hola amigos del foro!!!!!
    He desaparecido un tiempo por cuestiones de trabajo pero vuelvo a la carga!!!!!!.
    Someto a vuestra consideración la ultima idea en la que he estado trabajando: Un EA basado en bollinger.
    La operatoria es super sencilla, se basa en las bandas de bollinger, buscando aprovechar el rebote del precio entre las bandas, y se ayuda de una media exponencial para determinar la tendencia, a fin de no abrir operaciones en contra de la misma.

    He logrado comprender la importancia del trailing stop y el break even para proteger las operaciones y tratar de sacarles "el jugo" al máximo.

    Este es el EA:
    Archivo adjunto 28935

    Estos son los resultados de la simulación entre 01/01/2004 y 07/07/2014 en TF 1H
    (parametros por defecto, MM deshabilitado)

    Archivo adjunto 28934

    Y esta es una simulación entre enero de 2010 y junio de 2014 TF 1H con MM habilitado para controlar el riesgo.

    Archivo adjunto 28933

    Creo que los resultados son muy prometedores (por favor corrijanme si estoy equivocado)
    En este corto tiempo tiempo he aprendido mucho sobre la terminología del trading, y la importancia de una estrategia integral, que incluya money management, como asi también todos los artilugios posibles para maximizar las ganancias cuando le pegamos a un movimiento a nuestro favor, y disminuir las perdidas cuando el universo se vuelve en nuestra contra ja ja, con esto me refiero a los stop loss, trailing stop, break even, etc.

    Para la optimización de parametos me he guiado por articulos que he leido acerca de los peligros de la sobreoptimización. Por ello, realice primero las simulaciones sin trailing stop, break even ni money management, solo buscando parametros para los indicadores.
    De los resultados, no elegí los mejores absolutos, sino que elegí un set de parametros que se encontraban dentro de un grupo de mayor densidad de resultados. Luego hice la siguiente prueba: Optimice el sistema para un año particular, y luego lo extendi a 10 años. Los resultados de beneficio disminuyeron, pero el sistema siguió dando beneficios, lo que demuestra que no se sobreoptimizo para un periodo particular.

    Como siempre recurro a los maestros Hermo y Ciclo que me han ayudado mucho en este corto camino que estoy recorriendo desde que me uni al foro (sin desmerecer el aliento y la ayuda del resto), para que opinen sobre los resultados que he obtenido, y si podemos tomar este EA como nuestra nueva base para lograr un sistema que llegue a operar algún dia en real.
    Espero vuestros comentarios.

    Saludos!!!!!
    Gran trabajo compañero, te curras muy bien las cosas, todo muy bien explicado, me gusta.

    Por supuesto te mando reputación por todo el trabajo que estas haciendo y te ánimo a seguir con las ganas y el empeño que pones que es la base de todo.

    Un Saludo!
    Foro de Forex Trading United

    <()>manusenda<()>

  4. #13
    Avatar de indovinello



    Reputación:
    Poder de reputación: 24

    Bolivia
    Mensajes: 3.773
    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




  5. #14
    Avatar de Ciclo



    Reputación:
    Poder de reputación: 23

    Espana
    Mensajes: 2.510
    Créditos: 23.821

    Re: Mi primer aporte: Template EA en blanco

    Cita Iniciado por MCSoft Ver mensaje
    Saludos amigos!!!!!
    Estoy de nuevo con otra actualización del EA, en este caso es la version 1.4. No postee en ningun momento la 1.3 porque comence a hacer modificaciones y me parecio conveniente directamente lanzar la 1.4
    Los cambios entre versiones hasta hora son (estan en el codigo fuente, pero para que todos lo vean):

    VERSIONES:
    - v1.0 - 26/06/2014 - MCSoft
    Version inicial desarrollada en base al indicador "3MAS Cross Alert v2.mq4"
    proporcionado por Ciclo.


    - v1.1 - 25/06/2014 - MCSoft
    Se agregó media 200 (ma4) para filtrar la tendencia a largo plazo
    se habilitaron operaciones de venta


    - v1.2 - 25/06/2014 - Hermo/MCsoft
    Siguiendo recomendaciones de Hermo, se acomodó el código de una manera mas legible
    Se modifico el calculo de los indicadores, para que el valor actual de cada indicador
    se calcule al cierre de la vela. El calculo previo era tick a tick y provocaba muchas
    veces apertura y cierre de operaciones en la misma vela


    - v1.3 - 25/06/2014 - Ciclo/MCsoft
    Se agregó la opción del horario de trading


    - v1.4 - 27/06/2014 - Hermo/MCsoft
    Se agregó el calculo automatico del valor del pip de acuerdo a la cantidad de digitos del broker
    Se programo nuevamente el money management para calcular el tamaño de cada operación en funcion del stop loss
    de la orden, y el porcentaje maximo de perdida de la cuenta en caso de que la operacion sea perdedora

    Creo que mas allá de los resultados que pueda dar este EA en dinero, creo que hemos logrado mucho aportando ideas y viendo como se aplican a un programa real.

    Respondo a todos en este post para no llenar el tema de mensajes individuales:

    CICLO:
    - En este EA esta implementado el control de horario. Esta hecho de una forma básica (horario de inicio y de final del trading) y aun no tiene la opcion de cerrar posiciones el viernes, pero creo que podemos empezar a hacer pruebas con ello. Luego le agregamos los dias permitidos de trading y la opcion de cerrar posiciones el viernes
    - En cuanto al MM, he implementado código nuevo, pero también he leido que es conveniente probar la estrategia con lote fijo para ver la efectividad sin la ayuda del MM.

    HERMO:
    - Aun no esta implementado el control del spread, pero si agregue la compensacion para los brokers de 3/5 y 6 digitos.
    - He tomado la observación que hiciste sobre la modificación del TakeProfit, y la he implementado de la misma manera, ahora desaparecio la opcion "trailing_take_profit" (la cual habia bautizado con ese nombre desde mi inexperiencia ja ja), y ahora, cuando el trailing stop detecta que la operacion logró los beneficios indicados en "trailing_start", simplemente le quita el takeprofit a la orden y actua corriendo solo el stoploss, para que la orden pueda tomar todos los beneficios posibles.
    - Sobre la compensacion del valor del pip: Comence mis pruebas con un metatrader limpio (bajado de la web metaquotes, no ligado a ningun broker), operando a 4 digitos, y luego, descargue otra versión con una cuenta demo de un broker de 5 digitos y a partir de ese momento el programa me comenzo a dar resultados positivos. Luego, cuando hablamos el tema de la compensación del pip, me termino de cerrar lo que estaba pasando: al pasar de un broker de 4 digitos a uno de 5 digitos, mis parametros por defecto de vieron divididos por 10 (porque no habia compensacion por los digitos), entonces el EA esta trabajando con un TP de 5 pips, un SL de 9 pips y un trailing de 1 pip, haciendo una especie de scalping, por eso las posiciones se abren y cierran en su mayoria en la misma vela de 30 minutos. Ahora que la compensacion esta programada, reduje los parametros por defecto por 10 para seguir trabajando con los resultados previos. Mas adelante discuto los parametros por defecto y como podemos homogeneizar nuestros resultados para las pruebas.

    GOROWIN:
    bienvenido colega de Argentina, y gracias por interesarte en el tema. En cuanto a los resultados que has obtenido, yo creo que puede deberse a alguna de las siguientes cuestiones:
    - Inicialmente comence desarrollando y probando con un broker de 4 digitos, y ahora lo estoy haciendo con uno de 5 digitos, en ese momento el EA comenzo a dar resultados positivos, creo que porque los valores de TP, SL y trailing quedaron divididos por 10. Ahora estoy adjuntando la version 1.4 que contempla los digitos que tiene el broker y lo compensa.
    - Estuve realizando las pruebas con un spread fijo de 2, y veo que tu reporte tiene un spread configurado en "current" de 16

    A TODOS LOS PARTICIPANTES QUE ESTEN PROBANDO Y ANALIZANDO EL EA:
    He sido un poco desordenado con las pruebas, y estamos obteniendo resultados dispares (gracias Gorowin por la observacion), por ello, me parece que deberíamos fijar las condiciones en las que hacemos las pruebas, para que cada uno de nosotros obtenga los mismos resultados y pueda proponer mejoras y parametros que les sean utiles al resto.
    Esta es la configuracion con la que estoy haciendo las pruebas:

    - Par: EURUSD
    - Parametros: Por defecto como estan en el EA que adjunto a continuacion
    - Timeframe: 30M (he obtenido buenos resultados con 4H y 1D con los mismos parametros)
    - Money Management: Por defecto ahora esta deshabilitado y opera con un lote fijo de 1 (mas abajo aclaro porque he fijado el valor de lote=1) para que veamos solamente la efectividad de la estrategia.
    - Spread: fijado en el estrategy tester en 2
    - Periodo: 2010.01.01 al 2014.06.01 (4 años y 5 meses)
    - Simulación: cada tick

    Este es el EA version 1.4 con todos sus parametros seteados a valores por defecto:

    Archivo adjunto 28677

    Y estos son los resultados de la estrategia que yo estoy obteniendo con la configuración comentada:

    Strategy Tester Report
    MCSoft_EA_3MA_v1.4
    AlpariUK-Demo-Market (Build 646)

    Símbolo EURUSD (Euro vs US Dollar)
    Período 30 minutos (M30) 2010.01.04 00:00 - 2014.05.30 23:30 (2010.01.01 - 2014.06.01)
    Modelo Cada tick (el método más preciso basado en todos los períodos menores disponibles)
    Parámetros ea_nombre="=== MCSoft_EA_3MA_v1.3 ==="; parametros_generales="===== PARAMETROS GENERALES ====="; ea_magic_number=12345; slip_page_en_pips=2; control_ordenes="===== CONTROL ORDENES ====="; permitir_ordenes_multiples=false; procesar_en_cierre=true; MoneyManagement="===== CONFIGURACION MONEY MANAGEMENT ====="; calcular_lotes=false; lotes_por_trade=1; porcentaje_riesgo_por_trade=1; HorarioTrading="===== CONTROL HORARIO ====="; habilitar_horario_trading=false; hora_inicio_trading="16:00"; hora_cierre_trading="11:30"; ControlPosiciones="===== CONTROL POSICIONES ====="; take_profit_en_pips=5; stop_loss_en_pips=9; TrailingStop="----- Configuracion Trailing Stop -----"; habilitar_trailing_stop=true; trailing_start_en_pips=1; trailing_stop_en_pips=1; SettingIndicadores="===== SETTING INDICADORES ====="; _Indicator="===== 3EMAS Cross Alert - Ciclo ====="; periodo_ma1=4; periodo_ma2=18; periodo_ma3=40; periodo_ma4=200;
    Barras en la prueba 55653 Ticks modelados 65152566 Calidad del modelado 90.00%
    Errores de gráficos mal agrupados 0
    Depósito inicial 10000.00 Diferencial 2
    Beneficio neto total 8381.20 Beneficio bruto 33266.60 Pérdida bruta -24885.40
    Factor de beneficio 1.34 Rentabilidad esperada 4.55
    Disminución absoluta 459.00 Disminución maximal 736.00 (3.98%) Disminución relativa 5.56% (684.00)
    Total de operaciones 1840 Posiciones cortas (ganado %) 864 (83.91%) Posiciones largas (ganado %) 976 (84.22%)
    Operaciones de beneficios (% del total) 1547 (84.08%) Operaciones de pérdidas (% del total) 293 (15.92%)
    Mayor Operaciones de beneficios 133.00 Operaciones de pérdidas -90.00
    Media Operaciones de beneficios 21.50 Operaciones de pérdidas -84.93
    Máximo ganancias consecutivas (beneficios en dinero) 61 (1552.00) pérdidas consecutivas (pérdidas en dinero) 4 (-304.00)
    Máximo beneficios consecutivos (número de ganancias) 1552.00 (61) pérdidas consecutivas (número de pérdidas) -304.00 (4)
    Media ganancias consecutivas 6 pérdidas consecutivas 1

    Archivo adjunto 28675

    Quiero hacer un comentario, ya que el tema del money management y calculo del valor de la posicion es nuevo para mi, y quiero ver si lo estoy entendiendo correctamente:
    Con los parámetros por defecto, en cada trade el EA "se esta jugando" un valor de lote fijo de 1, lo que en EURUSD significa un valor de PIP de: Valor lote x tamaño lote x pip = 100000 x 1 x 0.0001 = 10 USD. Como el stop loss esta fijado en 9, la pérdida que se da si la orden alcanza el stoploss son 90 dolares, lo que para la cuenta de 10000 significa el 0.9%. Entonces, inicialmente podríamos aguantar una racha de hasta 111 operaciones perdedoras de 90 dolares sin reventar la cuenta (nuevamente, pido me corrijan si estoy calculando o interpretando algo mal).
    Este valor se mantiene fijo en todo el periodo de prueba, entonces, a medida que nuesta cuenta va creciendo, arriesgamos cada vez menos, y podríamos sobrevivir a rachas perdedoras mas largas.

    Por otro lado, con el money management habilitado, la cantidad de lotes con que se abre cada operación se calcula teniendo en cuenta la cantidad porcentual máxima que estamos dispuestos a perder en caso que la operación no resulte, es decir, el cáculo es al revés. Si ingresamos como parametro 0.9 en el parametro riesgo, inicialmente estamos en la misma situacion que antes, es decir, estamos dispuestos a perder el 0.9% de nuestra cuenta si la operacion no resulta, entonces el EA calcula un valor de lote de 1 (para la cuenta inicial de 10000 dolares), y hace la operacion, pero a medida que la cuenta va creciendo, se realizan operaciones más grandes, pero siempre manteniendo el porcentaje, por lo que siempre aguantaríamos la misma cantidad consecutiva de operaciones perdidas (en realidad con el MM la cosa mejora, porque a medida que vamos perdiendo el tamaño de lote decrece) A modo solo de observacion voy a postear los resultados con MM habilitado, un riesgo de 0.9% y manteniendo el resto de los parametros por defecto:

    Strategy Tester Report
    MCSoft_EA_3MA_v1.4
    AlpariUK-Demo-Market (Build 646)

    Símbolo EURUSD (Euro vs US Dollar)
    Período 30 minutos (M30) 2010.01.04 00:00 - 2014.05.30 23:30 (2010.01.01 - 2014.06.01)
    Modelo Cada tick (el método más preciso basado en todos los períodos menores disponibles)
    Parámetros ea_nombre="=== MCSoft_EA_3MA_v1.3 ==="; parametros_generales="===== PARAMETROS GENERALES ====="; ea_magic_number=12345; slip_page_en_pips=2; control_ordenes="===== CONTROL ORDENES ====="; permitir_ordenes_multiples=false; procesar_en_cierre=true; MoneyManagement="===== CONFIGURACION MONEY MANAGEMENT ====="; calcular_lotes=true; lotes_por_trade=1; porcentaje_riesgo_por_trade=0.9; HorarioTrading="===== CONTROL HORARIO ====="; habilitar_horario_trading=false; hora_inicio_trading="16:00"; hora_cierre_trading="11:30"; ControlPosiciones="===== CONTROL POSICIONES ====="; take_profit_en_pips=5; stop_loss_en_pips=9; TrailingStop="----- Configuracion Trailing Stop -----"; habilitar_trailing_stop=true; trailing_start_en_pips=1; trailing_stop_en_pips=1; SettingIndicadores="===== SETTING INDICADORES ====="; _Indicator="===== 3EMAS Cross Alert - Ciclo ====="; periodo_ma1=4; periodo_ma2=18; periodo_ma3=40; periodo_ma4=200;
    Barras en la prueba 55653 Ticks modelados 65152566 Calidad del modelado 90.00%
    Errores de gráficos mal agrupados 0
    Depósito inicial 10000.00 Diferencial 2
    Beneficio neto total 12640.64 Beneficio bruto 53574.30 Pérdida bruta -40933.66
    Factor de beneficio 1.31 Rentabilidad esperada 6.87
    Disminución absoluta 457.67 Disminución maximal 1648.42 (7.17%) Disminución relativa 7.17% (1648.42)
    Total de operaciones 1840 Posiciones cortas (ganado %) 864 (83.91%) Posiciones largas (ganado %) 976 (84.22%)
    Operaciones de beneficios (% del total) 1547 (84.08%) Operaciones de pérdidas (% del total) 293 (15.92%)
    Mayor Operaciones de beneficios 214.08 Operaciones de pérdidas -207.00
    Media Operaciones de beneficios 34.63 Operaciones de pérdidas -139.71
    Máximo ganancias consecutivas (beneficios en dinero) 61 (2257.96) pérdidas consecutivas (pérdidas en dinero) 4 (-673.30)
    Máximo beneficios consecutivos (número de ganancias) 2257.96 (61) pérdidas consecutivas (número de pérdidas) -673.30 (4)
    Media ganancias consecutivas 6 pérdidas consecutivas 1

    Archivo adjunto 28676

    Este ultimo backtest lo hice para verificar el funcionamiento del MM, pero creo que debemos seguir manejandonos con lote fijo en 1 (parametro por defecto) asi trabajamos todos sobre la misma base.
    Espero sus comentarios.
    Saludos a todos!!!!!!
    Parece que el sistema sigue mejorando.

    Otra idea para mejorar las ganancias.
    Dado que la tasa de aciertos es mayor del 80% y que el maximo numero de perdidas consecutivas es de 4, y la media de perdidas consecutivas es de 1, se me ocurre así a bote pronto una martingala soft.

    Ya que la media de perdidas consecutivas es de 1, quiere decir que la mayoria de las perdias consecutivas es de 1. Por tanto una martingala de 1 una vez podria mejorar compensar esa perdida. Por ejemplo se pierde una operacion y la siguiente doblamos el tamaño por ejemplo de 1 a 2. Si ganamos la proxima operación volvemos a 1 lote y hemos compensado la perdida anterior, si perdemos nos quedamos con una perdida de 3 lotes, por que igualmente nuestra proxima operacion sera de un lote. Como la mayoria de las perdias consecutivas es una vez, lo logico es que la mayoria de las veces nuestra martingala sea ganadora.

    No se que os parece.

    Saludos.
    Foro de Forex Trading United

  6. #15
    Avatar de Hermo



    Reputación:
    Poder de reputación: 18

    Mensajes: 879
    Créditos: 6.631

    Version 1.4.

    Buenas tardes a todos:

    Aunque el tiempo no me lo permite, os observo de cerca, .

    Muchas gracias por todo vuestro trabajo.




    Cita Iniciado por MCSoft Ver mensaje
    HERMO:

    - He tomado la observación que hiciste sobre la modificación del TakeProfit, y la he implementado de la misma manera, ahora desaparecio la opcion "trailing_take_profit" (la cual habia bautizado con ese nombre desde mi inexperiencia ja ja), y ahora, cuando el trailing stop detecta que la operacion logró los beneficios indicados en "trailing_start", simplemente le quita el takeprofit a la orden y actua corriendo solo el stoploss, para que la orden pueda tomar todos los beneficios posibles.
    No es exactamente lo que tiene que hacer.

    Te explico, quitaste el parametro trailing_take_profit, perfecto.

    El parametro trailing_star, lo que realmente busca es dejar correr un cierto numero de pips a nuestro favor antes de activar el trailing_stop. En ejemplo.

    Compramos el EURUSD a 1.30000

    Trailing_Star = 40 Pips.
    Trailing_Stop = 20 Pips.

    Cuando el precio llegue a 1.30400 se activa el Trailing Stop.

    Como el Trailing Stop lo tenemos a 20, entonces el Stop Loss se situara a 1.30200. Ok

    No es necesario que cuando el Trailing_Star se active borre el Take Profit, es mejor que cuando se trabaja con Trailing Stop, tener ya de antemano desactivado el Take Profit es decir valor 0, si lo que pretendemos es dejar correr el beneficio, aunque yo esto prefiero probarlo, es decir, dejar las dos opciones, si tengo un valor en el Take Profit, que no se borre por que se active el Trailing_Star, asi se pueden buscar mas valores en las optimizaciones.

    Evidentemente el Take Profit puede tener valor 0 pero el Stop Loss no, ya que no funcionaria el Trailing, excepto que programes virtualmente el stop pero esto ya es harina de otro costal.



    Cita Iniciado por Ciclo Ver mensaje
    Parece que el sistema sigue mejorando.

    Otra idea para mejorar las ganancias.
    Dado que la tasa de aciertos es mayor del 80% y que el maximo numero de perdidas consecutivas es de 4, y la media de perdidas consecutivas es de 1, se me ocurre así a bote pronto una martingala soft.

    Ya que la media de perdidas consecutivas es de 1, quiere decir que la mayoria de las perdias consecutivas es de 1. Por tanto una martingala de 1 una vez podria mejorar compensar esa perdida. Por ejemplo se pierde una operacion y la siguiente doblamos el tamaño por ejemplo de 1 a 2. Si ganamos la proxima operación volvemos a 1 lote y hemos compensado la perdida anterior, si perdemos nos quedamos con una perdida de 3 lotes, por que igualmente nuestra proxima operacion sera de un lote. Como la mayoria de las perdias consecutivas es una vez, lo logico es que la mayoria de las veces nuestra martingala sea ganadora.

    No se que os parece.

    Saludos.
    Hola Ciclo

    Yo soy un gran probador de martingalas, me parece bien que se introduzca dentro del codigo, pero ojo, cuando te digo esto me refiero a que no te fies mucho de las maximas perdidas consecutivas que te da el resultado de Metatrader,
    aunque parezca mentira y sea un calculo de primaria, no siempre lo hace bien, el por que, sencillamente te respondo que es Metatrader.

    El codigo de la Martingala que pides, esta dentro del codigo ejemplo que adjunte, por lo tanto solo seria introducirselo a la version correspondiente y a partir de ahi realizar pruebas.


    Cita Iniciado por gorowin Ver mensaje
    Hola, ahora si jaja.

    Con esos parámetros los resultados son similares.

    Entonces quiere decir que poniendo el parámetro Diferencial en 2, estamos trabajando con un Spread máximo de 2 pips por operación ?

    Gorowin
    Buenas tardes y bienvenido al foro, solo aclararte un poco por encima tu pregunta.

    Cuando pones en el probador de MT Diferencial 2 te estas refiriendo a que quieres que tu estrategia se pruebe con un spread fijo de 2 puntos, esto es la mayor tonteria del mundo, ya que el diferencial no es fijo ni en los broker que te dicen que es fijo, por lo tanto lo idoneo seria que fuese el Diferencial de trabajo o como MT lo llama, Diferencial Current, pero aqui viene la controversia, ¿tienes datos que te proporcionen esta informacion?. Casi te garantizo que no.


    Espero que en breve los compañeros del grupo de backtest nos den una leccion sobre todo lo que han descubierto respecto de este tema y otros muchos relacionados con los backtest y optimizaciones en MT. Seguramente os sorprendan y no gratamente precisamente, pero bueno todo se puede hacer.


    Para terminar, no quiero desalentar a nadie, pero por favor, cuando realiceis pruebas, tened en cuenta:

    El spread, bueno esto un poco complicado por lo que acabo de explicar.

    El deslizamiento, super importante y la gran putada es que esto si que no se puede controlar en ningun backtest ni optimizacion. Incluso es diferente en una cuenta demo que en una real, este factor lo manipula el broker para cada cuenta y os aseguro que influye muchisimo en los resultados.

    Las comisiones, que parece que se os han olvidado, siempre y cuando existan, claro esta, pero bueno si no os cobran comisiones, seguramente el diferencial se las trae incluidas.

    Y esto solo para empezar, que he visto operaciones en vuestras pruebas que son negativas y figuran como positivas.

    Con todo esto no quiero entrar en el desanimo, sencillamente que vayais perfilando vuestra cabeza para cuando programeis algo que querais poner en real. Teneis que tener en cuenta todas estas cosas y alguna mas que ya iremos comentando.

    Un fuerte abrazo.

    Hermo.
    Foro de Forex Trading United



  7. #16




    Reputación:
    Poder de reputación: 10

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

  8. #17
    Avatar de Hermo



    Reputación:
    Poder de reputación: 18

    Mensajes: 879
    Créditos: 6.631

    Version "1.2"

    Cita Iniciado por MCSoft Ver mensaje

    1- Sobre el stop_loss = 0 y take profit=0: Ya lo solucione con una pequeña modificacion a las funciones abrir_orden_buy y abrir_orden_sell. Dichas funciones, al intentar convertir pips a precio, generaban un precio erroneo cuando los pips pasados como parametro eran 0, entonces la orden se rechazaba.

    2- "Echo de menos un control de spread, que se incluiria en los parametros generales."
    Sinceramente no conozco que significa el control de spread (recuerda que soy muy novato en el trading). Si tienes una explicación o link que me puedas proporcionar lo veo y discutimos como implementarlo

    3- "Echo de menos un autocontrol de digitos del broker, esto evitaria, como en este caso, tener que realizar multiplicaciones tanto del Take Profit, Stop Loss, Trailing... etc., dependiendo si trabajamos con un broker de 4 digitos o 5 digitos."
    Voy a analizar el fragmento de código que me proporcionaste y lo voy a incluir en la proxima versión

    4- "Y ya por ultimo que me expliques mejor por favor, estos dos parámetros:
    calcular_lotes = true; // Calcular valor del lote
    Este parámetro entiendo que quieres utilizar un tanto % del valor de la Equity si no me equivoco, corrígeme si estoy en lo cierto."
    Es correcto, quiero calcular el valor del lote a emplear en base al riesgo que deseo tomar en cada operación, esto es algo que aún lo tengo muy verde en mi cabeza, por eso acepto sugerencias y recomendaciones

    5- "La opcion habilitar_trailing_take_profit"
    Esta opcion la codifique con mi poco conocimiento de la jerga del trading, por ello espero que me corrijan. La idea es que cuando esta opcion esta habilitada, al momento de hacer trailing stop sobre una orden, si se modifica el mismo, el take profit también se modifique siguiendolo. En principio, esto permite que las operaciones que estan ganando, por ejemplo compras, vayan aumentando stop loss para proteger los beneficios ganandos y tambien subiendo al mismo tiempo el take profit con la esperanza de agarrar una tendencia larga y obtener mas beneficios.
    Vuelvo a repetir, no se si hay un nombre especial para este comportamiento, si es asi lo cambiamos para que quede correcto.
    Cita Iniciado por Ciclo Ver mensaje

    6- Lo de la gestion de lotes y riesgo etc, yo lo dejaria para el final. Yo creo que tengo buenas ideas para eso y no es dificil. Yo de momento operaria con una unidad, 1 lote, 1 minilote etc. para ver el comportamiento del sistema sin ayuda de MM.

    7 - Sugerencia para mejorar el sistema: Abrir operaciones solo entre la apertura de Frankfur y el cierre de Londres. Creo que esto puede mejorar mucho la estadistica por que nos ahorramos los rangos que suele haber en la sesion asiatica.

    8 -Con esto yo probaria a inhabilitar el trailing stop o darle mas espacio, por que aunque mejora el porcentaje de ganadoras, cierra las operaciones muy pronto. Si conseguimos aumentar el porcentaje de ganadoras sin el trailing stop, o un trailing mas holgado, podremos aumentar el ratio W/L de forma espectacular y aumentar bastante el Factor de beneficio que lo veo algo pobre.
    Buenas tardes a todos.

    Hola MCSoft:

    1 - Respecto al primer punto todavía no he tenido tiempo de revisar y hacer las pertinentes comprobaciones, según tenga un ratito me pongo con ello y os cuento.

    2 -Tema spread, en esta EA puede ser no relevante, aunque con matices y ya que existen matices y estamos tratando el tema de automatización, no podemos dejarlo a un lado, el tema del spread es muy importante, cualquier programación seria tiene que contemplarlo y no solo eso, si no también tener en cuenta las posibles consecuencias que ello genera, me explico. Es fácil programar que hacer si en el momento de ejecutar la orden el spread existente en ese momento supera el límite permitido, pero lo más complicado es como tiene que reaccionar la EA ante esa circunstancia, lo más habitual es que no opere, que no lance ordenes, pero también tenemos que programar cuando volver a dejarla operar ... etc, como cada programación es diferente, bueno cada estrategia es diferente, en el caso de esta Ea yo lo tengo claro, si te pasas del spread permitido en un cruce, hasta que se vuelva a dar otro cruce diferente no te dejo operar. Parece una chorrada pero como este tema lo tenemos que ver en una situación real, esto tiene que quedar bien claro.

    Para que te hagas una idea te adjunto un código de un EA que lo contempla, después tu, ya lo tienes que adaptar a las circunstancias de este EA, la gran mayoría de los códigos que contienen este control, solo contemplan el que hacer en ese momento y no lo que tienen que hacer después de que eso suceda, y para mi es tan importante uno como otro.

    3 - Lo tienes también en el código que te adjunto, es mas menos las líneas de código que te adjunto en un post anterior, lo mismo, que cuando pongamos en Take Profit = 50 sean 50 pips en un bróker de 4 o 5 dígitos, es la Ea la que tiene que saberlo y hacer el cálculo pertinente.

    4 - Respecto de este tema comparto lo que dice Ciclo, lo vemos más adelante, primero lo básico, que todo funcione correctamente, después las mejoras. De todos modos también tienes ejemplos en el código que te adjunto.

    5 - Con el Trailing sobre el Take profit, me has sorprendido es la primera vez que lo veo, y de entrada te digo que sobra, si está bien programado el precio nunca lo alcanzaría por mucho que corra el precio, tendrías que programarlo con condicionantes para que en algún momento el precio lo pudiera alcanzar, piensa que es más sencillo, un trailing Stop sin Take Profit, es decir, yo he visto EAs que una vez que el Trailing Stop se activa y está por encima o debajo del nivel de entrada, el stop loss me refiero, es decir estamos en beneficio, la EA elimina el Take Profit, por lo tanto ya tiene cancha el precio para correr todo lo que quiera, no tiene techo, de ese modo lo veo más factible.

    Hola Ciclo:

    6 - Ya conteste si no me equivoco, comparto lo que dice Ciclo, aunque claro está, es un trabajo que estas realizando tú para la comunidad, si lo tuviera que encargar a un desarrollador, yo solicitaría el máximo número de MoneyManagement posibles, ya después filtraríamos.

    7 - Para lo que comenta Ciclo en el punto 7, es tan sencillo como añadir un filtro horario, tienes un buen ejemplo en el código que te adjunto, incluso tiene selección de servidor y opción de cierre de posición el viernes.

    8 - Ciclo, si no te he entendido bien, corrígeme, pero la EA ya tiene la opción de deshabilitar el Trailing Stop o de ponérselo mas holgado, como tú quieras, no le he probado, es decir no sé si funciona correctamente, pero en los parámetros de la EA figura.


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

    Otro concepto que en determinadas EAs funciona muy bien es añadirle el parámetro Step al Trailing Stop, un condicionante mas para el movimiento del Trailing, le obligas a que espere el valor que tu hayas establecido en este parámetro es decir se lo suma al Trailing, también está incluido en el código que te adjunto, por si te interesa verlo y añadirlo.

    Bueno cuando tenga un ratito reviso el funcionamiento de la nueva versión y comento.

    Un saludo.

    Hermo.
    Foro de Forex Trading United
    Archivos adjuntados Archivos adjuntados



  9. #18
    Avatar de Hermo



    Reputación:
    Poder de reputación: 18

    Mensajes: 879
    Créditos: 6.631

    Re: Mi primer aporte: Template EA en blanco

    Cita Iniciado por Ciclo Ver mensaje
    Hola MCSof, no veo la funcion especial start que es obligatoria y que se activa cada vez que se produce un tick.

    Saludos.
    Hola Ciclo:

    Te voy a responder a esto desde la ignorancia total de programación, pero basándome en ejemplos que yo tengo.

    Como bien te ha contestado MCSoft hoy en día los programadores comparten el mismo editor para MT4 y MT5, y por lo que puedo observar en mis EAs, dependiendo del programador, donde antes se usaba genéricamente int start(), hoy en día muchos programadores usan void OnTick(), pero indistintamente, depende mucho de la persona que lo programe y de los conocimientos que tenga de programación.

    Código:
    //+------------------------------------------------------------------+
    //| expert start function                                            |
    //+------------------------------------------------------------------+
    
    datetime data;
    
    int start()
      {  
      }
    
    Ahora se utiliza mucho
    
    void OnTick()
    
    {
    }
    Es mi humilde opinión, por favor corregidme si me equivoco.

    Un fuerte abrazo.

    Hermo.
    Foro de Forex Trading United



  10. #19




    Reputación:
    Poder de reputación: 10

    Mensajes: 26
    Créditos: 1.634

    Re: Mi primer aporte: Template EA en blanco

    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

  11. #20




    Reputación:
    Poder de reputación: 10

    Mensajes: 26
    Créditos: 1.634

    Re: Mi primer aporte: Template EA en blanco


    Publi
    Gracias a todos por la aceptación del tema y por vuestros consejos. Estoy agradecido de recibir el aliento y los consejos de miembros con mucha trayectoria en la comunidad (Hermo, Ciclo).
    Quiero contarles a todos, y en respuesta a los consejos de Hermo principalmente, porque se me ocurrio subir esta plantilla.
    Como ya comente previamente , soy desarrollador. Me tope con el mundo del trading justamente buscando información de programación, buscando en google me aparecieron los famosos "asesores expertos" y me maraville de la cantidad de tecnicas de programacion que se usan en ellos (machine learning, analisis y calculo numerico, comunicaciones, analisis de señales, etc).
    No me costo mucho empezar a programar en MQL4 debido a su similitud con C, Obviamente que mi primera impresion fue "esto es muy facil, verificar unos cuantos indicadores, tomar unas decisiones y operar para ganar dinero".
    Con el tiempo, luego de muchos programas de prueba, me encontre con que la situacion no era tan sencilla, el mercado cambia mucho, y una estrategia que gana millones en los ultimos 3 meses, si se prueba en los ultimos 6 meses pierde todo, ahi es donde entra la experiencia del trader, en reconocer la situacion actual del mercado y aplicar la estrategia que mejores resultados de.
    Además, hay muchas otras cuestiones que entran en juego y que me obligaron a leer mucho, por ejemplo el money management, una estrategia con el 90% de deteccion de señales correctas puede fracasar si no tiene un correcto manejo del riesgo y de las posiciones abiertas, ya que ese 10% de señales falsas pueden provocar la perdida de toda la cuenta.
    Soy inherentemente un programador, no me gusta hacer nada "manualmente", si es posible automatizarlo ja ja, mi cabeza trabaja de esa manera y creo que ya no la puedo cambiar.

    Empece subiendo una plantilla en blanco para mostrar todo el codigo que un asesor experto lleva en su interior Y QUE NO INCLUYE EN NADA A LA ESTRATEGIA!!!!!. Si hablamos del cruce de medias moviles por ejemplo, se puede escribir un codigo funcional en unas 30 lineas de código, para detectar el cruce de medias y abrir las operaciones con take profit y stop loss fijos, pero las pruebas dan un fracaso rotundo, porque se necesita no solo saber cuando abrir posiciones, sino también cuando cerrarlas, detectar cuando una operaciones esta siendo ganadora y mover los stops y profits para aprovecharla y ganar mas. De igual manera, hay que saber cuando una operacion abierta con una señal correcta se torna perdedora y poder minimizar dicha perdida.
    Todo esto nuestro cerebro lo hace en forma automatica recurriendo a nuestra experiencia, y como en cualquier deporte que practiquemos luego de un tiempo, el pensamiento se automatiza, podemos ver un cruce de medias moviles y sin saber porque, nuestro cerebro nos dice "NO OPERES!!!!" eso es porque la experiencia esta trabajando en segundo plano, y ve patrones, y condiciones que se han generado en el pasado.
    Todo esto es muy dificil de llevar al código, creo que en ese punto es en donde falla el encuentro entre traders y programadores. Siguiendo con el ejemplo muy simple del cruce de medias moviles, el trader plantea "abrir posiciones cuando la EMA de periodo 5 cruza por encima de la EMA de periodo 20 y ambas estan por arriba de la EMA de periodo 200".
    Esa afirmación, aunque parezca contundente es muy subjetiva, porque para un programa una linea que en la vela previa iba 1 pip por debajo de la otra, y en la vela actual va 1 pip por arriba, y ambas 1 pip por arriba de la EMA 200 ya cumplen la condicion de cruce, y disparan la operación. El programa cumple las condiciones establecidas pero genera una operación desastrosa. Esto ocurre porque el cerebro del trader, basado en su experiencia "ve" mas alla de la estrategia, ve las pendientes de las curvas, si todas vienen en pendiente positiva es mas probable que la operacion sea exitosa, si vienen recuperandose de un impulso, etc. Toda esa información no se incluye en el codigo y por eso la misma estrategia que al trader le da buenos resultados operando manualmente, fracasa cuando se automatiza.

    Creo que podemos complementar todas las sugerencias, sin descartar nada, todos los aportes e ideas son buenos, y ayudan a encontrar el camino correcto. Me parecio correcto subir una plantilla en blanco para mostrar el panorama, he analizado algunos asesores expertos y muchos de ellos son realmente muy dificiles de entender, no porque tengan una estrategia muy completa, sino porque mezclan código del apertura y cierre de ordenes con money management y se forman bloques anidados muy dificiles de seguir, incluso para un programador.
    Espero vuestros comentarios, y sugerencias, si alguno de ustedes quiere analizar un EA completo le ruego lo suba , asi todos podemos descargarlo y lo analizamos, de igual manera, el que desee agregar una estrategia a esta plantilla también es bienvenido, creo que una cosa no quita a la otra, y creo que un camino puede ser mejor que otro, no necesariamente uno bueno y otro malo.
    Saludos a todos y gracias nuevamente por sus consejos y aliento.
    Foro de Forex Trading United

Página 2 de 7 PrimerPrimer 123456 ... Ú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.
     

 

Publi


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