
Combinando una estrategia de tendencia y una de flat
Contenido
- Introducción
- 1. Principios de combinación de estrategias
- 2. Programando el asesor
- 2.1. Método 1
- 2.2. Método 2
- 2.3. Método 3
- 3. Simulación de asesores
- 3.1. Simulación del método 1
- 3.2. Simulación del método 2
- 3.1. Simulación del método 3
- 4. Optimizando las estrategias
- 4.1. Optimización del "Método 1"
- 4.2. Optimización del "Método 2"
- Conclusión
Introducción
Existen diferenets estrategias comerciales. Unas buscan la dirección del movimiento y comercian según la tendencia. Otras definen los intervalos de las oscilaciones de precio y comercian dentro de estos corredores. El mercado es variable, y a veces podemos observar movimientos de flat entre movimientos de tendencia. Precisamente este hecho permite ganar dinero tanto a los tráders de tendencia, como a los de flat. Pero cuando los integrantes del primer grupo ganan, los del segundo, o bien pierden, o bien esperan el momento adecuado para ganar. Y al contrario.
Así que nos surge la pregunta, ¿podemos combinar los dos enfoques para aumentar la rentabilidad de nuestro comercio? ¿Pueden dos estrategias complementarse entre sí? Vamos a intentar combinar dos modelos de comercio que se dirían opuestos, analizando posteriormente el resultado de dichas estrategias combinadas.
1. Principios de combinación de estrategias
En el gráfico de precios las tendencias cambian de forma constante. Los movimientos fuertes de tendencia se alternan con los movimientos de flat (laterales), en los que el precio permance en un intervalo reducido. Al mismo tiempo, el tráder elige para sí mismo una estrategia partiendo de las condiciones de mercado. ¿Cómo podemos determinar qué estrategia elegir en cada momento? ¿De tendencia o de flat?
En los artículos [1] y [2] se han analizado diferentes estrategias comerciales, tanto de tendencia, como laterales. En este caso, además, no resulta complicado notar que la aplicación de esta u otra estrategia comienza por la definición de la situación en el mercado. Ambos tipos de estrategia usan diferentes indicadores de tendencia para determinar la situación actual. Sin embargo, mientras que las estrategias de tendencia entran en el mercado cuando existe una tendencia, las de flat esperan a que la tendencia se calme para abrir posiciones. De aqui surge el primer enfoque al combinar ambos tipos de estrategia en un asesor: si tenemos una tendencia, se usará el algoritmo de comercio con tendencia, si no hay tendencia, se usará el algoritmo de comercio con flat.
Si echamos un vistazo más a fondo a los gráficos de precio, podremos notar que ni los movimientos de tendencia, ni los de flat tienen lugar en una misma dirección. Todos los movimientos van acompañados de oscilaciones de precio. En el mercado plano, las oscilaciones tinen un intervalo próximo, pero cuando hay tendencia, algunas oscilaciones dominan sobre otras. Podemos utilizar esta propiedad a la hora combinar las estrategias de tendencia y flat. El principio consiste en comerciar según la tendencia, pero confirmando el punto de entrada con los osciladores usados en el comercio de flat. Este enfoque ayuda a ejecutar la entrada en la finalización de la corrección, lo que hace disminuir la reducción y aumenta el potencial del movimiento de precio hacia el lado de la transacción.
2. Programando el asesor
Para demostrar los principios de la combinación se han elegido la estrategia 1 del artículo [1] y la estrategia 6 del artículo [2]. Ambas estrategias elegidas usan el indicador ADX para determinar la tendencia. Se ha realizado preliminarmente la optimización del funcionamiento de los asesores desde el 1.01.2017 hasta el 1.08.2018. Según los resultados de la optimización de las estrategias indicadas, se han seleccionado los siguientes parámetros.
Estrategia de tendencia 1.
Estrategia de flat 6.
Los resultados del comercio único de asesores con los parámetros optimizados se muestran en las capturas de pantalla.
Estrategia de tendencia 1.
Estrategia de flat 6.
Ambos asesores utilizados han sido construidos de acuerdo con el esquema de apertura de órdenes según las señales de los indicadores cuando no hay posiciones abiertas en el momento de la señal. El cierre de posiciones tiene lugar según los valores de take-profit y stop-loss establecidos anteriormente.
Este enfoque permite excluir del asesor el módulo de acompañamiento de posiciones, lo que simplifica significativamente la lógica del asesor. Al combinar los asesores, no hemos cambiado a propósito la lógica de funcionamiento de los asesores, para así mostrar la influencia en el resultado precisamente de los métodos de combinación, y no el reajuste de los asesores.
2.1. Método 1
El primer método consiste en comprobar secuencialmente las señales de ambas estrategias y abrir una posición al llegar cualquiera de ellas. En este caso, además, tanto la estrategia como el take-profit y el stop-loss tienen sus parámetros. Con este enfoque, la presencia de una posición abierta según una estrategia excluye la apertura de una posición según la segunda. De esta forma, en el mercado nunca habrá más de una posición, lo que limita notablemente los riesgos.
Entre las desventajas de este enfoque, podemos mencionar la omisión de transacciones rentables según de las estrategias en el momento en que en el mercado está presente una posición abierta de la otra estrategia. Pero, puesto que según este enfoque las estrategias utilizadas deberán comerciar en diferentes mercados, la influencia de este factor puede ser mínima.
Para implementar el método, copiaremos el código de ambos asesores en un archivo, combinando el código de las funciones idénticas. Para evitar duplicar los nombres, vamos a añadir a las variables y funciones de la estrategia de tendencia la palabra "Trend", y a las variables y funciones de la estrategia de flat, la palabra "Flat".
//--- Parámetros generales input double Inp_Lot=0.01; //Lot input MarginMode Inp_MMode=LOT; //MM input int Inp_MagicNum=1111; //Magic number input int Inp_Deviation = 2; //Deviation(points) //--- input string Trend_EaComment="Trend Strategy"; //Strategy Comment input int Trend_StopLoss=25; //Stop Loss(points) input int Trend_TakeProfit=90; //Take Profit(points) //--- Parámetros del indicador RSI_Color input int Trend_RSIPeriod=28; //RSI Period input double Trend_Overbuying=70; //Overbuying zone input double Trend_Overselling=30; //Overselling zone //--- Parámetros del indicador ADX_Cloud input int Trend_ADXPeriod=11; //ADX Period input double Trend_alpha1 = 0.25; //alpha1 input double Trend_alpha2 = 0.25; //alpha2 //--- input string Flat_EaComment="Flat Strategy"; //Strategy Comment input int Flat_StopLoss=50; //Stop Loss(points) input int Flat_TakeProfit=50; //Take Profit(points) //--- Parámetros del indicador WPR input int Flat_WPRPeriod=7; //Period WPR //--- Parámetros del indicador ADX input int Flat_ADXPeriod=11; //Period ADX input int Flat_FlatLevel=40; //Flat Level ADX
Al inicio de la función OnTick, comprobamos la presencia de posiciones abiertas. En el caso de que no haya una posición abierta, actualizamos los datos de los indicadores y comprobamos secuencialmente las señales de entrada, primero según la estrategia de tendencia, después, según la estrategia de flat. Si aparece cualquiera de las señales, abrimos una posición según la estrategia correspondiente.
void OnTick() { //--- Comprobando las órdenes abiertas anteriormente por el asesor experto if(!Trade.IsOpenedBySymbol(_Symbol,Inp_MagicNum)) { //--- Obteniendo los datos para el cálculo if(!GetIndValue()) return; //--- Abriendo órdenes según el algoritmo de tendencia //--- Abriendo orden al darse la señal de compra if(TrendBuySignal()) Trade.BuyPositionOpen(Symbol(),Inp_Lot,Trend_StopLoss,Trend_TakeProfit,Inp_MagicNum,Trend_EaComment); else //--- Abriendo orden al darse la señal de venta if(TrendSellSignal()) Trade.SellPositionOpen(Symbol(),Inp_Lot,Trend_StopLoss,Trend_TakeProfit,Inp_MagicNum,Trend_EaComment); else //--- Abriendo órdenes según el algoritmo de flat //--- Abriendo orden al darse la señal de compra if(FlatBuySignal()) Trade.BuyPositionOpen(Symbol(),Inp_Lot,Flat_StopLoss,Flat_TakeProfit,Inp_MagicNum,Flat_EaComment); else //--- Abriendo orden al darse la señal de venta if(FlatSellSignal()) Trade.SellPositionOpen(Symbol(),Inp_Lot,Flat_StopLoss,Flat_TakeProfit,Inp_MagicNum,Flat_EaComment); } }
Podrá familiarizarse con el código completo del asesor en los anexos (proyecto Combination1).
2.2. Método 2
El segundo método complica un poco el proceso de fusión, además, como complemento al primer método, se crea un cierto conglomerado de señales de las dos estrategias.
En el ejemplo mostrado de la estrategia de tendencia, para determinar la tendencia se usa el indicador ADX cloud, que indica la diferencia mostrada entre las líneas DI+ и DI-; en este caso, además, no se comprueba la fuerza de la tendencia. Al mismo tiempo, la estrategia de flat antes de la apertura comprueba la fuerza de la tendencia según el valor umbral de ADX. Por consiguiente, podemos introducir un filtro adicional para la apertura de transacciones según la estrategia de tendencia teniendo en cuenta la fuerza de la tedencia.
bool TrendBuySignal() { return(trend_adx[0]>trend_adx[1] && trend_rsi1[0]==1 && trend_rsi1[1]==1 && flat_adx[0]>=Flat_FlatLevel)?true:false; }
Asimismo, debemos considerar que en la estrategia de tendencia, las transacciones se filtran con el indicador RSI, por consiguiente, podemos reducir el número de transacciones con pérdidas según la estrategia RSI.
bool FlatBuySignal() { return(flat_wpr[0]<-80 && flat_adx[0]<Flat_FlatLevel && trend_rsi2[0]!=1)?true:false; }
Podrá familiarizarse con el código completo del asesor en los anexos (Combination2).
2.3. Método 3
Aplicaremos el tercer método para las cuentas con cobertura. Su esencia consiste en usar dos estrategias en un asesor de forma absolutamente independiente. A las órdenes de cada estrategia se les asigna su propio número mágico. La apertura de posiciones según las estrategias tiene lugar de acuerdo con sus señales, independientemente de si hay una posición abierta de otra estrategia.
Este enfoque imita completamente el uso de dos asesores en una cuenta, conservando todas las ventajas y desventajas de estos enfoques. En particular, aumentan los riesgos como resultado de la posible apertura de dos posiciones según diferentes estrategias al mismo tiempo.
//--- Parámetros generales input double Inp_Lot=0.01; //Lot input MarginMode Inp_MMode=LOT; //MM input int Inp_Deviation = 2; //Deviation(points) //--- input string Trend_EaComment="Trend Strategy"; //Strategy Comment input int Trend_StopLoss=25; //Stop Loss(points) input int Trend_TakeProfit=90; //Take Profit(points) input int Trend_MagicNum=1111; //Magic number //--- Parámetros del indicador RSI_Color input int Trend_RSIPeriod=28; //RSI Period input double Trend_Overbuying=70; //Overbuying zone input double Trend_Overselling=30; //Overselling zone //--- Parámetros del indicador ADX_Cloud input int Trend_ADXPeriod=11; //ADX Period input double Trend_alpha1 = 0.25; //alpha1 input double Trend_alpha2 = 0.25; //alpha2 //--- input string Flat_EaComment="Flat Strategy"; //Strategy Comment input int Flat_StopLoss=50; //Stop Loss(points) input int Flat_TakeProfit=50; //Take Profit(points) input int Flat_MagicNum=1112; //Magic number //--- Parámetros del indicador WPR input int Flat_WPRPeriod=7; //Period WPR //--- Parámetros del indicador ADX input int Flat_ADXPeriod=11; //Period ADX input int Flat_FlatLevel=40; //Flat Level ADX
En la función OnTick comprobamos por separado las posiciones abiertas con el número mágico de la tendencia, y aparte, con el de flat.
void OnTick() { //--- Comprobando las órdenes anteriormente abiertas por el experto según la estrategia de tendencia if(!Trade.IsOpenedBySymbol(_Symbol,Trend_MagicNum)) { //--- Obteniendo los datos para el cálculo if(!GetIndValue()) return; //--- Abriendo orden al darse la señal de compra if(TrendBuySignal()) Trade.BuyPositionOpen(Symbol(),Inp_Lot,Trend_StopLoss,Trend_TakeProfit,Trend_MagicNum,Trend_EaComment); else //--- Abriendo orden al darse la señal de venta if(TrendSellSignal()) Trade.SellPositionOpen(Symbol(),Inp_Lot,Trend_StopLoss,Trend_TakeProfit,Trend_MagicNum,Trend_EaComment); } //--- Comprobando las órdenes anteriormente abiertas por el experto según la estrategia de flat if(!Trade.IsOpenedBySymbol(_Symbol,Flat_MagicNum)) { //--- Obteniendo los datos para el cálculo if(!GetIndValue()) return; //--- Abriendo orden al darse la señal de compra if(FlatBuySignal()) Trade.BuyPositionOpen(Symbol(),Inp_Lot,Flat_StopLoss,Flat_TakeProfit,Flat_MagicNum,Flat_EaComment); else //--- Abriendo orden al darse la señal de venta if(FlatSellSignal()) Trade.SellPositionOpen(Symbol(),Inp_Lot,Flat_StopLoss,Flat_TakeProfit,Flat_MagicNum,Flat_EaComment); } }
Podrá familiarizarse con el código completo del asesor en los anexos (proyecto Combination3).
3. Simulación de asesores
Después de preparar los tres asesores según distintos métodos de combinación de estrategias, vamos a realizar la simulación de los asesores y comparar los resultados de su funcionamiento. Para comparar los resultados de la simulación, vamos a realizar esta sin cambiar los parámetros de los asesores.
3.1. Simulación del método 1
La primera prueba ha mostrado beneficios. El beneficio total y el factor de recuperación han estado por encima de cualquiera de los asesores originales. En comparación con la estrategia de flat, visualmente, la línea de balance se ha hecho más uniforme, ha aumentado el número de transacciones y ha disminuido la reducción máxima según el balance y los fondos. Al mismo tiempo, ha disminuido ligeramente el factor de beneficio y la suma del beneficio total ha sido menor que el beneficio total de las estrategias originales.
3.2. Simulación del método 2
La aplicación del segundo método ha permitido aumentar más el beneficio total en comparación con el método 1 con la misma cantidad de transacciones, aunque su beneficio sigue siendo menor al de los asesores originales. El crecimiento del beneficio ha permitido aumentar el factor de recuperación, el profit-factor (ahora es igual que en la estrategia de flat) y la proporción de transacciones rentables. Al mismo tiempo, ha disminuido la reducción máxima del balance.
3.3. Simulación del método 3
El uso del tercer método ha permitido aumentar más el beneficio total, hasta alcanzar el nivel de beneficio de los asesores originales. El aumento del beneficio ha sido posible gracias al incremento del número de transacciones. En este caso, además, ha aumentado la carga sobre el depósito y la reducción máxima del balance.
4. Optimizando las estrategias
La simulación de asesores realizada en el anterior apartado ha demostrado la superioridad de la combinación de estrategias en los asesores. Los tres métodos han mostrado un aumento del beneficio en comparación con cualquiera de las estrategias originales. Pero queremos recordar que las estrategias originales habían sido optimizadas para el intervalo temporal puesto a prueba, mientras que en la simulación de los asesores compuestos se usaron los mismos parámetros originales.
Creemos que no supondrá una sorpresa para nadie que cualquier intervención en la lógica del asesor requiere un ajuste adicional de sus parámetros. Vamos a intentar optimizar los asesores reunidos usando los dos primeros métodos de combinación de estrategias. Así veremos qué podemos conseguir.
En este caso, además, no debemos olvidar que la propia idea de construcción de los asesores electrónicos consiste en ganar dinero en el mercado, y no en mostrar sus capacidades usando datos históricos. Por eso mismo, le proponemos dividir el periodo de simulación de dos segmentos. Primero hemos realizado la simulación en el periodo que va desde el 1.01.2017 hasta el 1.08.2018. Ahora le proponemos realizar la optimización en el intervalo comprendido entre el 1.01.2017 y el 1.06.2018, y en el intervalo temporal restante, realizaremos la simulación en tiempo real (forward testing).
4.1. Optimización del "Método 1"
A la hora de elegir los parámetros de optimización, debemos recordar que cada uno de nuestros asesores incluye los bloques de dos estrategias. En este caso, además, cada estrategia usa dos indicadores para la entrada. Pero no tenemos que olvidar que ambas estrategias usan ADX para determinar la fuerza de la tendencia y su dirección. De esta forma, en la lógica de nuestros asesores se usarán tres indicadores para determinar los puntos de entrada. Proponemos optimizar los periodos de estos tres indicadores.
La optimización del periodo del indicador ADX ha mostrado el máximo beneficio y estabilidad ante el cambio de otros parámetros con un periodo del indicador en el intervalo de 12 a 14. Más abajo mostramos el gráfico de dependencia del beneficio del asesor con respecto al cambio de los periodos ADX y RSI en el intervalo temporal optimizado.
La simulación en tiempo real ha confirmado la posibilidad de obtener beneficio en el intervalo indicado de los valores del indicador, además, la estabilidad máxima se observa con el periodo 13 de ADX. A su vez, la semejanza de los resultados de la optimización y la simulación en tiempo real dan fe de la estabilidad del funcionamiento del asesor en el intervalo temporal optimzido.
La optimización del periodo del indicador WPR ha mostrado resultados semejantes. La estabilidad máxima del funcionamiento del asesor en el intervalo optimizado se alcanza con el periodo 7 del indicador. Al mismo tiempo, cuando aumenta el periodo del indicador ADX, es posible obtener un beneficio en el intervalo de 3 a 5. Más abajo mostramos el gráfico de dependencia del beneficio del asesor con respecto al cambio de los periodos WPR y ARX en el intervalo temporal optimizado.
La simulación en tiempo real ha confirmado las zonas indicadas. Pero, en este caso, se observa un crecimiento en el intervalo del 3-4 periodo del indicador WPR, y con WPR igual a 7, se observa un descenso de la rentabilidad del asesor al aumentar los valores del indicador ADX. Esto puede estar relacionado con el intervalo temporal de la simulación, más breve, y sus características específicas.
La optimización del periodo del indicador RSI ha confirmado todo lo anteriormente dicho. El rango de 27 a 32 destaca en el intervalo temporal optimizado por su rentabilidad y estabilidad ante los cambios de otros indicadores. Más abajo mostramos el gráfico de dependencia del beneficio del asesor con respecto al cambio de los periodos RSI y ADX en el intervalo temporal optimizado.
En la simulación en tiempo real, el intervalo de beneficio de los periodos del indicador RSI se ha reducido hasta 30-32.
Los intentos de optimización de los valores de take-profit y stop-loss no han permitido aumentar la rentabilidad del asesor y han confirmado los parámetros elegidos anteriormente.
Según los resultados de la optimización, como parámetros óptimos se han elegido los periodos ADX igual a 13, RSI igual a 30 y WPR igual 7. Con estos parámetros, el asesor ha obtenido en el periodo optimizado 202.33 USD de beneficio, y en el periodo en tiempo real, 46.10 USD con otros parámetros semejantes. Esta rentabilidad supera a la obtenida al combinar los asesores según el tercer método en el mismo periodo, que ha sido probado arriba. Debemos notar que el uso de parámetros análogos en un asesor combinado según el método 3 da igualmente resultados peores, 166.29 USD y 60.27 USD, respectivamente.
Nos gustaría destacar que la confirmación de los resultados de la optimización de la simulación en tiempo real es una buena señal, y corrobora la estabilidad del funcionamiento del asesor en un intervalo temporal no optimizado.
4.2. Optimización del "Método 2"
Resulta interesante el hecho de que la optimización del asesor combinado según el método 2 haya dado resultados semejantes con la anterior optimización, lo que puede resultar indicativo de la estabilidad del funcionamiento del sistema comercial. Como resultado de la optimización, se han elegido los mismos periodos de los indicadores que el anterior apartado. Solo en otras condiciones iguales, el asesor del método 2 ha mostrado menos rentabilidad, debido a la reducción del número de transacciones. Los gráficos de optimización se muestran más abajo.
Al mismo tiempo, el aumento de la calidad de las señales de las estrategias de tendencia ha permitido optimizar los niveles de stop-loss y take-profit. Como resultado de la optimización, el stop-loss para la estrategia de tendencia se ha reducido de 25 a 20 puntos, y el take-profit ha aumentado de 90 a 110 puntos. Esto ha permitido aumentar la rentabilidad del funcionamiento del asesor. Los gráficos de optimización de los niveles de stop-loss y take-profit se muestran más abajo.
Según los resultados de la optimización, la rentabilidad del asesor combinado según el método 2 ha sido la máxima de las tres opciones analizadas. La aplicación de los parámetros obtenidos durante esta optimización en otros asesores ha dado una rentabilidad peor. Las capturas de pantalla de la simulación del asesor optimizado se muestran más abajo.
Conclusión
En el artículo se ofrecen tres opciones para combinar dos estrategias en un asesor. Asimismo, se muestra cómo organizar una combinación de este tipo en un asesor, y también se simulan varios asesores, tanto sin cambiar los parámetros, como después de optimizarlos.
En el recuadro de abajo se muestran los resultados resumidos de la simulación de todas las estrategias. La optimización de los asesores combinados ha mostrado una rentabilidad superior a la de los dos asesores por separado.
Querríamos añadir que usted puede combinar en sus asesores más de dos estrategias, usando una combinación diferente de los métodos ofrecidos o completando los mismos con sus propios métodos. En este caso, además, no es posible afirmar de forma unívoca cuál de los métodos será el mejor. En cada caso, deberemos adoptar un enfoque creativo sobre la elección del método de combinación de estrategias, partiendo de las propias estrategias y su lógica de funcionamiento.
Parámetro | Estrategia de tendencia | Estrategia de flat | Método 1 | Método 2 | Método 3 | Método de 1 opt. Back/Forw. | Método de 2 opt. Back/Forw. |
---|---|---|---|---|---|---|---|
Beneficio total | 51.56 | 158.96 | 160.52 | 166.12 | 210.40 | 202.33 / 46.10 | 206.40 / 43,10 |
Factor de beneficio | 2.39 | 1.25 | 1.24 | 1.25 | 1.31 | 1.25 / 1.58 | 1.25 /1.54 |
Factor de recuperación | 3.65 | 3.55 | 3.73 | 3.86 | 4.90 | 4.08 / 1.94 | 4.17 / 1.82 |
Reducción máxima del balance | 8.49 | 41.30 | 36.41 | 35.67 | 39.23 | 44.98 / 19.75 | 44.98 /19.75 |
Reducción máxima de los fondos | 14.14 | 44.76 | 43.04 | 43.04 | 42.96 | 49.53 / 23.72 | 49.53 / 23.72 |
Número de transacciones | 24 | 290 | 295 | 295 | 315 | 371 / 41 | 373 / 40 |
Proporción de transacciones rentables | 41.67% | 55.52% | 53.22% | 53.90% | 54.29% | 53.64 / 60.98 | 53.62 / 60 |
Enlaces
- Análisis comparativo de 10 estrategias de tendencia
- Análisis comparativo de 10 estrategias de flat
- ¿Cuánto dura una tendencia?
Programas usados en el artículo:
# | Nombre | Tipo | Descripción |
---|---|---|---|
1 | Trade.mqh | Biblioteca de clase | Clase de operaciones comerciales |
2 | Combination1.mq5 | Asesor | Asesor que combina estrategias según el método 1 |
3 | Combination2.mq5 | Asesor | Asesor que combina estrategias según el método 2 |
4 | Combination3.mq5 | Asesor | Asesor que combina estrategias según el método 3 |
Traducción del ruso hecha por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/ru/articles/5022






- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso