Análisis comparativo de 10 estrategias tendenciales
Contenido
- Introducción
- Planteamiento del problema al crear una estrategia tendencial
- Estrategias tendenciales
- Estrategia №1. Indicador ADXCloud con RSI de confirmación en forma del histograma.
- Estrategia №2. Indicador tendencial Standard Deviation en forma del histograma con confirmación de RVI.
- Estrategia №3. Interpretación en nube de AC de B. Wiliams y el indicador combinado Bears Power y Bulls Power.
- Estrategia №4. Centro de gravedad de Ehlers confirmado por el indicador de la velocidad media del precio.
- Estrategia №5. Indicador integral Onda Binaria.
- Estrategia №6. Indicador integral Weight Oscillator en conjunto con LeMan Objective.
- Estrategia №7. Canal de Donchian en conjunto con MACD, en el que la serie de precios se sustituye por los valores de AO de B. Wiliams.
- Estrategia №8. Oscilador cíclico de Schaff con confirmación según tres niveles de Tirone.
- Estrategia №9. Canal de Keltner en forma del histograma e indicador iTrend en forma de la nube.
- Estrategia №10. Impulso del precio Average Change y abanico de medias móviles FigurelliSeries.
- Testeo
- Conclusiones
- Conclusión
Introducción
Las estrategias de trading según la tendencia son muy populares a la hora de operar en los mercados de divisas. Su finalidad consiste en determinar con exactitud el movimiento unidireccional fuerte, encontrar los puntos favorables para entrar en el mercado, y no menos importante, determinar correctamente el momento de la salida. Para este artículo, he seleccionado algunas herramientas técnicas para determinar directa o indirectamente la tendencia. De ellas se han compuesto 10 estrategias tendenciales, implementadas en forma de Asesores Expertos para MetaTrader 5. Basándose en los resultados de su trabajo, he analizado los pro y los contra de cada estrategia y he realizado su comparación conjunta. El propósito de este artículo consiste en dar al lector la idea más amplia posible sobre las partes fuertes y débiles del trading tendencial. Algunas de otras estrategias tendenciales están descritas en el artículo «Distintas maneras para averiguar la tendencia en MQL5»
.
Planteamiento del problema al crear una estrategia tendencial
A primera vista, parece que el desarrollo de una estrategia tendencial no es una tarea tan complicada. Basta con determinar la tendencia mediante el análisis técnico, abrir una posición y esperar el movimiento posterior, aumentando la posición en la medida de los posible. Teóricamente, este enfoque no tiene pegas. No obstante, en la práctica, surgen varias cuestiones importantes.
Fig. 1 Zonas de detección de tendencia y flat
Tarea №1. Detección de la presencia de la tendencia.
Normalmente, la detección y la confirmación de la tendencia requiere tiempo. Por eso, no resultará ninguna entrada ideal, que sea máximamente fiable, en el mismo nacimiento de la tendencia. Eche un vistazo en la imagen 1. Es imposible determinar la entrada como un punto en el gráfico, porque nosotros vemos solamente un área que es apropiada para entrar en el mercado. La determinación en forma del área se justifica con el hecho de que durante el análisis surgen los retardos de la aparición de la señal, y para confirmar la tendencia es necesario esperar un cierto tiempo. Por ejemplo, hay sistemas comerciales donde un indicador envía la señal sobre la presencia de la tendencia, y el otro, pasado un tiempo, lo confirma o no. Este modelo «come» el tiempo. El tiempo es oro, o en nuestro caso, el beneficio no obtenido.
Tarea №2. Objetivos de una posición abierta.
Pues bien, hemos determinado la tendencia y hemos confirmado sus señales. Ahora, hay que entrar en el mercado. Pero antes de eso, es necesario aclarar los objetivos del beneficio. El beneficio objetivo puede fijarse en puntos o quedarse dinámico, dependiendo de la predicción de la fuerza de la tendencia. Aquí, se puede trabajar con los niveles de soporte/resistencia. Pero el sentido es el mismo: antes de entrara en el mercado, es necesario saber exactamente cuándo vamos a salir de él. De aquí se desprende la siguiente tarea.
Tarea №3. Determinación del fin de la tendencia.
Volvamos de nuevo a la imagen 1. Se muestra claramente la siguiente situación: entramamos en la posición en la zona verde, luego la tendencia sigue hasta el área del flat. Y precisamente aquí hay que determinar lo siguiente: ¿es un estado temporal o tenemos que salir del mercado? En este caso, el flat no ha durado mucho y la tendencia ha continuado. Vamos a acordar desde el principio: en las estrategias con objetivos fijos, la duración y el tamaño del movimiento en puntos se pronostica a base de la evaluación de la tendencia ya confirmada en la tarea №2.
Estrategias tendenciales
Vamos a acentuar la condición general desde el principio. Dentro del resumen de las estrategias tendenciales, he decidido no usar los períodos de tiempo demasiado grandes y demasiado pequeños, puesto que en los pequeños aparecen muchas señales falsas, y en los timeframes grandes, al revés. La selectividad en las condiciones es tan grande que el número de entradas en el mercado será demasiado pequeño para el análisis objetivo de la eficacia de la estrategia. Por esa razón, para el testeo serán escogidos los períodos de tiempo en el rango de M30 a H4.
Estrategia №1. Indicador ADXCloud con RSI confirmativo en forma del histograma.
La primera estrategia que vamos a analizar se basa en el indicador modificado ADX — ADXCloud. La señal la vamos a confirmar a través del oscilador RSI con niveles de sobrecompra/sobreventa. Está presentado en forma del histograma, donde las columnas verdes de los valores RSI se refieren a la zona de sobrecompra, las rojas, a la zona de sobreventa.
Parámetro | Descripción |
---|---|
Indicador utilizado | ADXCloud |
Indicador utilizado | RSIColor |
Período de tiempo | H1 |
Condiciones de compra | Cambio del color de la nube de rojo a verde, el histograma RSIColor es verde. |
Condiciones de venta | Cambio del color de la nube de verde a rojo, el histograma RSIColor es rojo. |
Condiciones de salida | Take Profit/Stop Loss |
En la Fig. 2 esta estrategia se muestra de forma gráfica. Cabe mencionar que en el timeframe H1, las secciones determinadas como tendenciales duran apenas unas barras, por eso resulta contraproducente escoger los valores grandes de Take Profit y Stop Loss en condiciones de salida.
Fig. 2. Condiciones de entrada siguiendo la estrategia tendencial №1.
El código de implementación del EA según esta estrategia es el siguiente:
void OnTick() { //--- Comprobación de las órdenes abiertas antes por el EA if(!Trade.IsOpened(Inp_MagicNum)) { //--- Obtención de datos para el cálculo if(!GetIndValue()) return; //--- Apertura de la orden si hay señal de compra if(BuySignal()) Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment); //--- Apertura de la orden si hay señal de venta if(SellSignal()) Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment); } } //+------------------------------------------------------------------+ //| Condiciones de compra | //+------------------------------------------------------------------+ bool BuySignal() { return(adx[0]>0 && adx[1]<0 && rsi1[0]==1)?true:false; } //+------------------------------------------------------------------+ //| Condiciones de venta | //+------------------------------------------------------------------+ bool SellSignal() { return(adx[0]<0 && adx[1]>0 && rsi2[0]==1)?true:false; } //+------------------------------------------------------------------+ //| Obtención de valores actuales de indicadores | //+------------------------------------------------------------------+ bool GetIndValue() { return(CopyBuffer(InpInd_Handle1,0,0,2,rsi1)<=0 || CopyBuffer(InpInd_Handle1,1,0,2,rsi2)<=0 || CopyBuffer(InpInd_Handle2,0,0,2,adx)<=0 )?false:true; }
Estrategia №2. Indicador tendencial Standard Deviation en forma del histograma con confirmación de RVI.
Esta estrategia se basa en las modificaciones del indicador de tendencia Standard Deviation y oscilador RVI. Para saber más sobre los principios de su funcionamiento, siga los enlaces de la tabla.
Parámetro | Descripción |
---|---|
Indicador utilizado | ColorStdDev |
Indicador utilizado | ColorZerolagRVI |
Período de tiempo | H1 |
Condiciones de compra | Histograma ColorStdDev del color rojo (tendencia fuerte), nube ColorZerolagRVI del color verde. |
Condiciones de venta | Histograma ColorStdDev del color rojo (tendencia fuerte), nube ColorZerolagRVI del color rojo. |
Condiciones de salida | Take Profit/Stop Loss |
La estrategia se muestra en la imagen 3. En ella, Standard Deviation se utiliza para determinar las áreas del movimiento fuerte. La tendencia se confirma a través de la modificación del oscilador RVI construida a base de cuatro RVI estándar con períodos y coeficientes de peso diferentes.
Fig. 3 Condiciones de la entrada siguiendo la estrategia tendencial №2.
Obsérvese que al implementar esta estrategia por medio de programación, en los ajustes ColorStDev se propone determinar empíricamente el valor de la tendencia fuerte, mediana y flat. Dejemos estos valores por defecto, pero por conveniencia vamos a introducir la opción Used Trend que permite seleccionar el tipo de la tendencia en la que confiar: Mediana o Fuerte. De esta manera, no habrá que redefinir cada vez tres indicadores: bastará con alternar uno. La señal de la tendencia fuerte es más apropiada para la estrategia actual, porque hemos escogido el período de tiempo H1. La opción de la tendencia mediana conviene mejor para la prueba en los timeframes mayores. Además, se debe tener en la mente que habrá más señales para la entrada con el uso de la tendencia mediana, por tanto, para filtrar las señales falsas y salir ganando, siempre hay que tomar en consideración los objetivos del beneficio y el timeframe actual.
//--- Parámetros del indicador ColorStDev input int period = 12; //Smoothing period StDev input ENUM_MA_METHOD MA_Method=MODE_EMA; //Histogram smoothing method input ENUM_APPLIED_PRICE applied_price=PRICE_CLOSE; //Applied price input int MaxTrendLevel=100; //Maximum trend level input int MiddLeTrendLevel=40; //Middle trend level input int FlatLevel=10; //Flat level input Trend TrendLevel=Maximum; //Used trend
La esencia de la estrategia se muestra en el código siguiente:
void OnTick() { //--- Comprobación de las órdenes abiertas antes por el EA if(!Trade.IsOpened(Inp_MagicNum)) { //--- Obtención de datos para el cálculo if(!GetIndValue()) return; //--- Apertura de la orden si hay señal de compra if(BuySignal()) Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment); //--- Apertura de la orden si hay señal de venta if(SellSignal()) Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment); } } //+------------------------------------------------------------------+ //| Condiciones de compra | //+------------------------------------------------------------------+ bool BuySignal() { return(stdev[0]>trend && rvi_fast[0]>rvi_slow[0])?true:false; } //+------------------------------------------------------------------+ //| Condiciones de venta | //+------------------------------------------------------------------+ bool SellSignal() { return(stdev[0]>trend && rvi_fast[0]<rvi_slow[0])?true:false; } //+------------------------------------------------------------------+ //| Obtención de valores actuales de indicadores | //+------------------------------------------------------------------+ bool GetIndValue() { return(CopyBuffer(InpInd_Handle1,0,0,2,stdev)<=0 || CopyBuffer(InpInd_Handle2,0,0,2,rvi_fast)<=0 || CopyBuffer(InpInd_Handle2,1,0,2,rvi_slow)<=0 )?false:true; }
Estrategia №3. Interpretación en nube de AC de Wiliams y el indicador combinado Bears Power y Bulls Power.
En la siguiente estrategia he decidido experimentar con la vinculación de la interpretación de la nube Accelerator Oscillator(AC) de Bill Williams y los osciladores Bears Power y Bulls Power combinadosen uno.
Parámetro | Descripción |
---|---|
Indicador utilizado | Bear_Bulls_Power |
Indicador utilizado | CronexAC |
Período de tiempo | H1 |
Condiciones de compra | El histograma muestra el crecimiento (cambia el color rosado al azul, el valor del indicador es menos de cero), la nube de CroneAC tiene el color azul. |
Condiciones de venta | El histograma muestra la caída (cambia el color azul al rosado, el valor del indicador es más de cero), la nube de CroneAC tiene el color naranja. |
Condiciones de salida | Take Profit/Stop Loss |
La visualización gráfica de la estrategia se muestra en la imagen 4. En cuanto a la búsqueda de las señales de entrada, la tarea consiste en el seguimiento del crecimiento incipiente del histograma. En otras palabras, tenemos que encontrar el momento cuando los toros se sustituyen por los osos, o viceversa, y luego confirmar la señal usando el oscilador.
Fig. 4 Condiciones de entrada siguiendo la estrategia tendencial №3.
Esta estrategia permite variar las condiciones de entrada, es decir, en vez del crecimiento «incipiente» del histograma se puede buscar una señal más avanzada: por ejemplo, la transición del indicador por cero o el cambio del signo de su valor. Hay alguna probabilidad de que un simple cambio del color del histograma puede dar el resultado. La implementación de la estrategia según las condiciones inicialmente descritas se muestra a continuación:
void OnTick() { //--- Comprobación de las órdenes abiertas antes por el EA if(!Trade.IsOpened(Inp_MagicNum)) { //--- Obtención de datos para el cálculo if(!GetIndValue()) return; //--- Apertura de la orden si hay señal de compra if(BuySignal()) Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment); //--- Apertura de la orden si hay señal de venta if(SellSignal()) Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment); } } //+------------------------------------------------------------------+ //| Condiciones de compra | //+------------------------------------------------------------------+ bool BuySignal() { return(ac_fast[0]>ac_slow[0] && bb_power[0]>bb_power[1] && (bb_power[0]<0 && bb_power[1]<0))?true:false; } //+------------------------------------------------------------------+ //| Condiciones de venta | //+------------------------------------------------------------------+ bool SellSignal() { return(ac_fast[0]<ac_slow[0] && bb_power[0]<bb_power[1] && (bb_power[0]>0 && bb_power[1]>0))?true:false; } //+------------------------------------------------------------------+ //| Obtención de valores actuales de indicadores | //+------------------------------------------------------------------+ bool GetIndValue() { return(CopyBuffer(InpInd_Handle1,0,0,2,bb_power)<=0 || CopyBuffer(InpInd_Handle2,0,0,2,ac_fast)<=0 || CopyBuffer(InpInd_Handle2,1,0,2,ac_slow)<=0 )?false:true; }
Estrategia №4. Centro de gravedad de Ehlers confirmado por el indicador de la velocidad media del precio.
La estrategia utiliza el indicador Centro de gravedad de Ehlers presentado en forma del histograma OSMA — CenterOfGravityOSMA. Su señal se confirma por el indicador que calcula la velocidad media del precio.
Parámetro | Descripción |
---|---|
Indicador utilizado | CenterOfGravityOSMA |
Indicador utilizado | Average Speed |
Período de tiempo | H1 |
Condiciones de compra | El histograma del Centro de gravedad muestra el crecimiento (en este caso, el valor del indicador es menos de cero), el valor de Average Speed es superior al del límite (establecido inicialmente en los ajustes) |
Condiciones de venta | El histograma del Centro de gravedad muestra la caída (en este caso, el valor del indicador es más de cero), el valor de Average Speed es superior al del límite (establecido inicialmente en los ajustes) |
Condiciones de salida | Take Profit/Stop Loss |
La visualización gráfica de la estrategia se muestra en la imagen 5. Como en la estrategia anterior, aquí también seguimos el cambio incipiente del histograma y lo confirmamos con la velocidad de la variación del precio.
Fig. 5 Condiciones de la entrada siguiendo la estrategia tendencial №4
Implementación de la estrategia:
void OnTick() { //--- Comprobación de las órdenes abiertas antes por el EA if(!Trade.IsOpened(Inp_MagicNum)) { //--- Obtención de datos para el cálculo if(!GetIndValue()) return; //--- Apertura de la orden si hay señal de compra if(BuySignal()) Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment); //--- Apertura de la orden si hay señal de venta if(SellSignal()) Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment); } } //+------------------------------------------------------------------+ //| Condiciones de compra | //+------------------------------------------------------------------+ bool BuySignal() { return(avr_speed[0]>Trend_lev && cog[1]<cog[0] &&(cog[1]<0 && cog[0]<0))?true:false; } //+------------------------------------------------------------------+ //| Condiciones de venta | //+------------------------------------------------------------------+ bool SellSignal() { return(avr_speed[0]>Trend_lev && cog[1]>cog[0] &&(cog[1]>0 && cog[0]>0))?true:false; } //+------------------------------------------------------------------+ //| Obtención de valores actuales de indicadores | //+------------------------------------------------------------------+ bool GetIndValue() { return(CopyBuffer(InpInd_Handle1,0,0,2,cog)<=0 || CopyBuffer(InpInd_Handle2,0,0,2,avr_speed)<=0 )?false:true; }
Estrategia №5. Indicador integral Onda Binaria.
En cuatro estrategias anteriores, me ajustaba al modelo de elección del enlace del indicador principal, que iría mostrando la tendencia, con una señal adicional para su confirmación. Ahora he decidido apartarme de este esquema y usar sólo un indicador, la Onda Binaria. Tiene apariencia de un oscilador, pero en realidad, implementa y visualiza las señales de siete indicadores: MA, MACD, OsM, CCI, Momentum, RSI y ADX. Ya por sí mismo representa una estrategia comercial autosuficiente con un sistema de configuraciones flexible. Aparte de los conjuntos estándar de parámetros para los indicadores seleccionados, aquí han sido añadidos los coeficientes de peso— sistema de influencia de uno u otro componente.
Parámetro | Descripción |
---|---|
Indicador utilizado | Binary_Wave |
Período de tiempo | H1 |
Condiciones de compra | Transición del oscilador a través de cero hacia arriba |
Condiciones de venta | Transición del oscilador a través de cero hacia abajo |
Condiciones de salida | Take Profit/Stop Loss |
Los ejemplos de la entrada de esta estrategia se muestran en la imagen 6. Nótese que en la implementación de programación, con el fin de optimizar la estrategia para H1, los ajustes de los períodos MA_Period, CCIPeriod, MOMPeriod, RSIPeriod y ADX_Period han sido cambiados de los 14 predefinidos a los 10 más rápidos. Para la simulación con períodos clásicos, se puede subir el tiemeframe a H3 o H4.
Fig. 6 Condiciones de la entrada siguiendo la estrategia tendencial №5.
Resultado de implementación:
void OnTick() { //--- Comprobación de las órdenes abiertas antes por el EA if(!Trade.IsOpened(Inp_MagicNum)) { //--- Obtención de datos para el cálculo if(!GetIndValue()) return; //--- Apertura de la orden si hay señal de compra if(BuySignal()) Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment); //--- Apertura de la orden si hay señal de venta if(SellSignal()) Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment); } } //+------------------------------------------------------------------+ //| Condiciones de compra | //+------------------------------------------------------------------+ bool BuySignal() { return(wave[0]>0 && wave[1]<0)?true:false; } //+------------------------------------------------------------------+ //| Condiciones de venta | //+------------------------------------------------------------------+ bool SellSignal() { return(wave[0]<0 && wave[1]>0)?true:false; } //+------------------------------------------------------------------+ //| Obtención de valores actuales de indicadores | //+------------------------------------------------------------------+ bool GetIndValue() { return(CopyBuffer(InpInd_Handle,0,0,2,wave)<=0)?false:true; }
Estrategia №6. Indicador integral Weight Oscillator en conjunto con LeMan Objective.
Aquí, se combinan los principios de construcción de las estrategias utilizadas en cinco ejemplos anteriores. Nosotros combinamos un sistema hecho y le añadimos un indicador que confirma la señal. Del sistema hecho no servirá Weight Oscillator, que representa la suma ponderada suavizada de cuatro indicadores: RSI, MFI, WPR y DeMarker con coeficientes de peso. Para confirmar la señal, se usará LeMan Objective que va a calcular la distancia del precio de apertura a los máximos y mínimos, y visualizar los cuartiles de las desviaciones. Además, en el número establecido de las barras, él da una media móvil de la estadística resumida del cambio del precio en 75, 50, 25 % de casos, también muestra la desviación máxima. Nosotros vamos a monitorear el crecimiento del histograma Weight Oscillator para la compra, y de confirmación nos servirá el hecho cuando el precio rompe el cuartil de la desviación con el valor 75%.
Parámetro | Descripción |
---|---|
Indicador utilizado | Weight Oscillator |
Indicador utilizado | LeMan Objective |
Período de tiempo | H1 |
Condiciones de compra | Weight Oscillator crece y el precio rompe el nivel superior del 75% del valor del cuartil de la desviación. |
Condiciones de venta | Weight Oscillator cae y el precio rompe el nivel inferior del 75% del valor del cuartil de la desviación. |
Condiciones de salida | Take Profit/Stop Loss |
Los puntos de entrada se ven claramente en la imagen 7 donde los niveles 75% se marcan con líneas gruesas. Vemos que los precios del cierre rompen estos niveles, y las condiciones del crecimiento/caída de Weight Oscillator se cumplen.
Fig. 7 Condiciones de la entrada siguiendo la estrategia tendencial №6.
El indicador LeMan Objective utiliza 8 búferes de indicador para construir sus niveles:
- Quartile 1 corresponde al valor medio de la reducción del precio respecto a la muestra estadística en 25% de los casos.
- Quartile 2 corresponde al valor medio de la reducción del precio respecto a la muestra estadística en 50% de los casos.
- Quartile 3 corresponde al valor medio de la reducción del precio respecto a la muestra estadística en 75% de los casos. Eso se utiliza en la estrategia.
- Quartile 4 corresponde a la desviación máxima del valor medio del precio.
- Quartile 5 corresponde al valor medio del aumento del precio respecto a la muestra estadística en 25% de los casos.
- Quartile 6 corresponde al valor medio del aumento del precio respecto a la muestra estadística en 50% de los casos.
- Quartile 7 corresponde al valor medio del aumento del precio respecto a la muestra estadística en 75% de los casos. Eso se utiliza en la estrategia.
- Quartile 8 corresponde a la desviación máxima del valor medio del precio.
Por eso, en la implementación informática, además de Weight Oscillator y los valores del precio de cierre, vamos a necesitar los búferes 2 y 6.
void OnTick() { //--- Comprobación de las órdenes abiertas antes por el EA if(!Trade.IsOpened(Inp_MagicNum)) { //--- Obtención de datos para el cálculo if(!GetIndValue()) return; //--- Apertura de la orden si hay señal de compra if(BuySignal()) Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment); //--- Apertura de la orden si hay señal de venta if(SellSignal()) Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment); } } //+------------------------------------------------------------------+ //| Condiciones de compra | //+------------------------------------------------------------------+ bool BuySignal() { return(wo[0]>wo[1] && close[0]>obj_q3_b[0])?true:false; } //+------------------------------------------------------------------+ //| Condiciones de venta | //+------------------------------------------------------------------+ bool SellSignal() { return(wo[0]<wo[1] && close[0]<obj_q3_s[0])?true:false; } //+------------------------------------------------------------------+ //| Obtención de valores actuales de indicadores | //+------------------------------------------------------------------+ bool GetIndValue() { return(CopyBuffer(InpInd_Handle1,6,0,2,obj_q3_b)<=0 || CopyBuffer(InpInd_Handle1,2,0,2,obj_q3_s)<=0 || CopyBuffer(InpInd_Handle2,0,0,2,wo)<=0 || CopyClose(Symbol(),PERIOD_CURRENT,0,2,close)<=0 )?false:true; }
Estrategia №7. Canal de Donchian en conjunto con MACD, en el que la serie de precios se sustituye por los valores de AO de B. Wiliams.
Para definir el movimiento fuerte unidireccional, aquí se utiliza el canal de Donchian. La ruptura del canal va a tomarse por el indicio de la tendencia. Para confirmar la tendencia, usamos el MACD modificado en el que la serie de precios se sustituye por los valores del indicador AO de B. Wiliams.
Parámetro | Descripción |
---|---|
Indicador utilizado | Donchian Channel System |
Indicador utilizado | CronexAO |
Período de tiempo | H1 |
Condiciones de compra | Ruptura del límite superior del canal de Donchian y color azul de la nube CronexAO |
Condiciones de venta | Ruptura del límite inferior del canal de Donchian y color rosado de la nube CronexAO |
Condiciones de salida | Take Profit/Stop Loss |
La visualización gráfica de esta estrategia tendencial se muestra en la imagen 8. Para facilitar la visualización, ha sido elegido la versión del indicador con el cambio del color de la vela, si ella rompe el límite superior o inferior del canal de Donchian. Además, los colores de CronexAO han sido escogidos en conformidad con los colores de las velas que rompen los límites del canal.
Fig. 8 Condiciones de la entrada siguiendo la estrategia tendencial №7.
Durante la implementación de esta estrategia es importante que en el indicador Donchian Channel por los extremos se toman los valores High y Low de las velas. No obstante, si el instrumento se caracteriza por los saltos del precio en una u otra dirección (sombras largas de las velas) con la vuelta posterior a los valores medios, entonces hay sentido usar como extremos los valores Open o Close de las velas, o en conjunto Open+High/Open+Low . Así el efecto de las sombras largas será reducido.
void OnTick() { //--- Comprobación de las órdenes abiertas antes por el EA if(!Trade.IsOpened(Inp_MagicNum)) { //--- Obtención de datos para el cálculo if(!GetIndValue()) return; //--- Apertura de la orden si hay señal de compra if(BuySignal()) Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment); //--- Apertura de la orden si hay señal de venta if(SellSignal()) Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment); } } //+------------------------------------------------------------------+ //| Condiciones de compra | //+------------------------------------------------------------------+ bool BuySignal() { return(cao_fast[0]>cao_slow[0] && close[0]>dcs_up[0])?true:false; } //+------------------------------------------------------------------+ //| Condiciones de venta | //+------------------------------------------------------------------+ bool SellSignal() { return(cao_fast[0]<cao_slow[0] && close[0]<dcs_low[0])?true:false; } //+------------------------------------------------------------------+ //| Obtención de valores actuales de indicadores | //+------------------------------------------------------------------+ bool GetIndValue() { return(CopyBuffer(InpInd_Handle1,0,0,2,dcs_up)<=0 || CopyBuffer(InpInd_Handle1,1,0,2,dcs_low)<=0 || CopyBuffer(InpInd_Handle2,0,0,2,cao_fast)<=0 || CopyBuffer(InpInd_Handle2,1,0,2,cao_slow)<=0 || CopyClose(Symbol(),PERIOD_CURRENT,0,2,close)<=0 )?false:true; }
Estrategia №8. Oscilador cíclico de Schaff con confirmación según tres niveles de Tirone.
En esta estrategia tendencial se aplica el oscilador cíclico de Schaff en los momentos de su salida de las zonas de sobrecompra/sobreventa. Para la comprobación se utilizan tres niveles de Tirone. Se han obtenido unos resultados interesantes en los timeframes mayores. Para la prueba ha sido utilizado H4.
Parámetro | Descripción |
---|---|
Indicador utilizado | Schaff Trend Cycle |
Indicador utilizado | Tres niveles de Tirone |
Período de tiempo | H4 |
Condiciones de compra | Salida de la zona de sobreventa, el precio actual debe estar por encima del nivel superior de Tirone. |
Condiciones de venta | Salida de la zona de sobrecompra, el precio actual debe estar por debajo del nivel inferior de Tirone. |
Condiciones de salida | Take Profit/Stop Loss |
La visualización gráfica de esta estrategia tendencial se muestra en la imagen 9.
Fig. 9 Condiciones de la entrada siguiendo la estrategia tendencial №8.
Al discutir la implementación de esta estrategia, me gustaría notar que aparte de dos indicadores principales era necesario añadir los valores numéricos de los niveles de sobrecompra/sobreventaNo los he cambiado, dejando por defecto 20 y 80. Pero los ajustes del suavizado y los períodos los he cambiado (en la imagen eso se puede ver en la esquina superior izquierda del indicador de Schaff). Estos ajustes son opcionales, Usted puede aplicar los ajustes predefinidos, o bien sus propios.
//+------------------------------------------------------------------+ //| Parámetros de entrada del EA | //+------------------------------------------------------------------+ input string Inp_EaComment="Strategy #8"; //EA Comment input double Inp_Lot=0.01; //Lot input MarginMode Inp_MMode=LOT; //MM input int Inp_MagicNum=1111; //Magic number input int Inp_StopLoss=400; //Stop Loss(points) input int Inp_TakeProfit=600; //Take Profit(points) input int Inp_Deviation = 20; //Deviation(points) input double Overbuying=80; //Overbuying zone input double Overselling=20; //Overselling zone //--- Parámetros del indicador Schaff Trend Cycle input Smooth_Method MA_SMethod=MODE_SMMA_; //Histogram smoothing method input int Fast_XMA = 20; //Fast moving average period input int Slow_XMA = 30; //Slow moving average period input int SmPhase= 100; //Moving averages smoothing parameter input Applied_price_ AppliedPrice=PRICE_CLOSE_; //Price constant input int Cycle=10; //Stochastic oscillator period
Esencia de la estrategia:
void OnTick() { //--- Comprobación de las órdenes abiertas antes por el EA if(!Trade.IsOpened(Inp_MagicNum)) { //--- Obtención de datos para el cálculo if(!GetIndValue()) return; //--- Apertura de la orden si hay señal de compra if(BuySignal()) Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment); //--- Apertura de la orden si hay señal de venta if(SellSignal()) Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment); } } //+------------------------------------------------------------------+ //| Condiciones de compra | //+------------------------------------------------------------------+ bool BuySignal() { return(schaff[1]<Overselling && schaff[0]>Overselling && close[0]>tirone_b[0])?true:false; } //+------------------------------------------------------------------+ //| Condiciones de venta | //+------------------------------------------------------------------+ bool SellSignal() { return(schaff[1]>Overbuying && schaff[0]<Overbuying && close[0]<tirone_s[0])?true:false; } //+------------------------------------------------------------------+ //| Obtención de valores actuales de indicadores | //+------------------------------------------------------------------+ bool GetIndValue() { return(CopyBuffer(InpInd_Handle1,0,0,2,schaff)<=0 || CopyBuffer(InpInd_Handle2,0,0,2,tirone_b)<=0 || CopyBuffer(InpInd_Handle2,2,0,2,tirone_s)<=0 || CopyClose(Symbol(),PERIOD_CURRENT,0,2,close)<=0 )?false:true; }
Estrategia №9. Canal de Keltner en forma del histograma e indicador iTrend en forma de la nube.
Aquí, el identificador de la tendencia es i-KlPrice a base del canal de Keltner en forma del histograma. Confirmaremos la tendencia usando el indicador iTrend en forma de la nube, donde el color y el ancho de la nube caracterizan la tendencia actual. Igual que en la estrategia anterior, tenemos que ver con un tipo de la señal en la transición de un determinado nivel. Para i-KlPrice, son los valores 50 y -50, definidos por defecto. Por eso también tiene sentido en adicionar los parámetros BuyLevel y SellLevel en los ajustes del futuro Asesor Experto, el hecho de pasar los cuales va a significar la señal de compra o de venta.
El indicador iTrend se encargará de confirmar la señal. Dentro de él vamos a monitorear el color de la nube que se determina por los valores de dos líneas. La superior es la diferencia entre el valor suavizado de los precios y una de las bandas de Bollinger seleccionada en los ajustes. La inferior es la diferencia de la suma (High + Low) y el valor de la media móvil de la vela actual multiplicada por -1.
Parámetro | Descripción |
---|---|
Indicador utilizado | i-KlPrice |
Indicador utilizado | iTrend |
Período de tiempo | H1 |
Condiciones de compra | Valor del histograma i-KlPrice encima de BuyLevel, y la nube iTend de color verde. |
Condiciones de venta | Valor del histograma i-KlPrice debajo de BuyLevel, y la nube iTend de color rosado. |
Condiciones de salida | Take Profit/Stop Loss |
Los ejemplos de los puntos de la entrada de esta estrategia se muestran en la imagen 10.
Fig. 10 Condiciones de la entrada siguiendo la estrategia tendencial №9.
He implementado esta estrategia en el código de la siguiente manera:
void OnTick() { //--- Comprobación de las órdenes abiertas antes por el EA if(!Trade.IsOpened(Inp_MagicNum)) { //--- Obtención de datos para el cálculo if(!GetIndValue()) return; //--- Apertura de la orden si hay señal de compra if(BuySignal()) Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment); //--- Apertura de la orden si hay señal de venta if(SellSignal()) Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment); } } //+------------------------------------------------------------------+ //| Condiciones de compra | //+------------------------------------------------------------------+ bool BuySignal() { return(klprice[0]>BuyLevel && itrend_h[0]>itrend_l[0])?true:false; } //+------------------------------------------------------------------+ //| Condiciones de venta | //+------------------------------------------------------------------+ bool SellSignal() { return(klprice[0]<SellLevel && itrend_h[0]<itrend_l[0])?true:false; } //+------------------------------------------------------------------+ //| Obtención de valores actuales de indicadores | //+------------------------------------------------------------------+ bool GetIndValue() { return(CopyBuffer(InpInd_Handle1,0,0,2,klprice)<=0 || CopyBuffer(InpInd_Handle2,0,0,2,itrend_h)<=0 || CopyBuffer(InpInd_Handle2,1,0,2,itrend_l)<=0 )?false:true; }
Estrategia №10. Impulso del precio Average Change y abanico de medias móviles FigurelliSeries.
Y finalmente, la opción de buscar la tendencia a través del indicador Average Change. FigurelliSeries en forma del histograma se usará para confirmar el impulso. Para Average Change, el valor base del que la señal del impulso del precio va hacia arriba o hacia abajo es igual a uno. Por eso, la condición de entrada para esta estrategia va a ser el traspaso del valor del indicador por 1. Par comprender las indicaciones del indicador FigurelliSeries, es necesario estudiar el algoritmo de su funcionamiento y los parámetros de entrada:
//+----------------------------------------------+ //| Indicator input parameters | //+----------------------------------------------+ input uint StartPeriod=6; // initial period input uint Step=6; // periods calculation step input uint Total=36; // number of Moving Averages input ENUM_MA_METHOD MAType=MODE_EMA; // Moving Averages smoothing type input ENUM_APPLIED_PRICE MAPrice=PRICE_CLOSE; // price timeseries of Moving Averages input int Shift=0; // Horizontal shift of the indicator in bars
Se establece el período inicial de la media móvil StartPeriod, y luego, también para 36 medias móviles con el período igual al inicial más Step. A continuación, seleccionamos el tipo de la MA y el precio a aplicar. En general, se trata de un abanico de las MA cuyos valores se comparan con el precio de cierre. El valor del histograma es la diferencia entre la cantidad de las MA encima y debajo del precio de cierre:
//---- main cycle of calculation of the indicator for(bar=limit; bar>=0 && !IsStopped(); bar--) { double tot_Ask=0; double tot_Bid=0; for(int count=0; count<int(Total); count++) { //---- copy newly appeared data into the arrays if(CopyBuffer(MA_Handle[count],0,bar,1,MA)<=0) return(RESET); if(close[bar]<MA[0]) tot_Ask++; if(close[bar]>MA[0]) tot_Bid++; } IndBuffer[bar]=tot_Bid-tot_Ask; }
Resumiendo los principios del trabajo de ambos indicadores, componemos las reglas de la entrada:
Parámetro | Descripción |
---|---|
Indicador utilizado | Average Change |
Indicador utilizado | Figurelli Series |
Período de tiempo | H4 |
Condiciones de compra | Average Change cruza el valor umbral de abajo arriba, y el valor del histograma Figurelli Series está por encima de cero. |
Condiciones de venta | Average Change cruza el valor umbral de arriba abajo, y el valor del histograma Figurelli Series está por debajo de cero. |
Condiciones de salida | Take Profit/Stop Loss |
En la imagen 11 se muestran los ejemplos de la entrada en el mercado según la estrategia en cuestión:
Fig. 11 Condiciones de la entrada siguiendo la estrategia tendencial №10
Código de la estrategia:
void OnTick() { //--- Comprobación de las órdenes abiertas antes por el EA if(!Trade.IsOpened(Inp_MagicNum)) { //--- Obtención de datos para el cálculo if(!GetIndValue()) return; //--- Apertura de la orden si hay señal de compra if(BuySignal()) Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment); //--- Apertura de la orden si hay señal de venta if(SellSignal()) Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment); } } //+------------------------------------------------------------------+ //| Condiciones de compra | //+------------------------------------------------------------------+ bool BuySignal() { return(avr_change[1]<1 && avr_change[0]>1 && fig_series[0]>0)?true:false; } //+------------------------------------------------------------------+ //| Condiciones de venta | //+------------------------------------------------------------------+ bool SellSignal() { return(avr_change[1]>1 && avr_change[0]<1 && fig_series[0]<0)?true:false; } //+------------------------------------------------------------------+ //| Obtención de valores actuales de indicadores | //+------------------------------------------------------------------+ bool GetIndValue() { return(CopyBuffer(InpInd_Handle1,0,0,2,avr_change)<=0 || CopyBuffer(InpInd_Handle2,0,0,2,fig_series)<=0 )?false:true; }
Testeo
Pues bien, en el apartado anterior hemos formalizado 10 estrategias tendenciales y hemos escrito su código. Para probar y comparar los resultados obtenidos, hay que seleccionar las condiciones y modos del testeo iguales.
- Intervalo: 01.01.2016 — 01.03.2017 .
- Par de divisas: EURUSD.
- Modo de trading: Sin latencia. Las estrategias presentadas no están relacionadas las de alta frecuencia, por eso la influencia de los retardos es muy pequeña.
- Prueba: OHLC en М1. Las pruebas preliminares en los ticks reales resultaron casi indistinguibles de este modo.
- Depósito inicial: 1000 USD.
- Apalancamiento: 1:500.
- Servidor: MetaQuotes-Demo.
- Cotizaciones: 5 dígitos.
Prácticamente, en todas las estrategias se usa Take Profit/Stop Loss para salir del mercado, y 8 de 10 de ellas tienen H1 como timeframe de servicio. Por eso, se puede aplicar para ellas los objetivos iguales del beneficio y pérdidas. Vamos a establecer Take Profit en 600 (cotizaciones de 5 dígitos), y Stop Loss en 400. Para que esté más claro, aparte de las condiciones especificadas antes, para el testeo vamos a indicar las preinstalaciones de los parámetros de los indicadores que se utilizan en las estrategias.
Prueba de la estrategia №1 (Indicador ADXCloud con RSI de confirmación en forma del histograma).
Preinstalación:
//--- Parámetros del indicador RSI_Color input int Inp_RSIPeriod=11; //RSI Period input double Inp_Overbuying=70; //Overuying zone input double Inp_Overselling=30; //Overselling zone //--- Parámetros del indicador ADX_Cloud input int Inp_ADXPeriod=8; //ADX Period input double Inp_alpha1 = 0.25; //alpha1 input double Inp_alpha2 = 0.25; //alpha2
Resultado de la prueba:
Fig. 12 Resultados del testeo de la estrategia tendencial №1.
Prueba de la estrategia №2 (Indicador tendencial Standard Deviation en forma del histograma con confirmación de RVI).
Preinstalación:
//--- Parámetros del indicador ColorStDev input int period = 12; //Smoothing period StDev input ENUM_MA_METHOD MA_Method=MODE_EMA; //Histogram smoothing method input ENUM_APPLIED_PRICE applied_price=PRICE_CLOSE; //Applied price input int MaxTrendLevel=90; //Maximum trend level input int MiddLeTrendLevel=50; //Middle trend level input int FlatLevel=20; //Flat level input Trend TrendLevel=Maximum; //Used trend //--- Parámetros del indicador ColorZerolagRVI input uint smoothing=15; //Smoothing period RVI input double Factor1=0.05; //Weight coef.1 input int RVI_period1=14; //RVI Period 1 input double Factor2=0.10; //Weight coef.2 input int RVI_period2=28; //RVI Period 2 input double Factor3=0.16; //Weight coef.3 input int RVI_period3=45; //RVI Period 3 input double Factor4=0.26; //Weight coef.4 input int RVI_period4=65; //RVI Period 4 input double Factor5=0.43; //Weight coef.5 input int RVI_period5=75; //RVI Period 5
Resultado de la prueba:
Fig. 13 Resultados del testeo de la estrategia tendencial №2.
Prueba de la estrategia №3 (Interpretación en nube de AC de B. Wiliams y el indicador combinado Bears Power y Bulls Power).
Preinstalación:
//--- Parámetros del indicador Bears_Bull_power input Smooth_Method MA_Method1=MODE_AMA; //Averaging method input uint Length1=12; //Averaging depth input int Phase1=15; //Averaging parameter input Smooth_Method MA_Method2=MODE_ParMA; //Smoothing period input uint Length2=5; //Smoothing depth input int Phase2=15; //Smoothing parameter input Applied_price_ IPC=PRICE_WEIGHTED_; //Applied price input int Shift=0; //Shift //--- Parámetros del indicador CronexAC input Smooth_Method XMA_Method=MODE_SMMA_; //Smoothing Method input uint FastPeriod=9; //Fast smoothing period input uint SlowPeriod=21; //Slow smoothing period input int XPhase=15; //Smoothing parameter
Resultado de la prueba:
Fig. 14 Resultados del testeo de la estrategia tendencial №3
Prueba de la estrategia №4 (Centro de gravedad de Ehlers confirmado por el indicador de la velocidad media del precio).
Preinstalación:
//--- Parámetros del indicador CenterOfGravityOSMA input uint Period_=9; //Averaging period input uint SmoothPeriod1=3; //Smoothing period1 input ENUM_MA_METHOD MA_Method_1=MODE_SMA; //Averaging method1 input uint SmoothPeriod2=3; //Smoothing period2 input ENUM_MA_METHOD MA_Method_2=MODE_SMA; //Averaging method2 input Applied_price_ AppliedPrice=PRICE_OPEN_; //Applied price //--- Parámetros del indicador Average Speed input int Inp_Bars=1; //Days input ENUM_APPLIED_PRICE Price=PRICE_CLOSE; //Applied price input double Trend_lev=2; //Trend Level
Resultado de la prueba:
Fig. 15 Resultados del testeo de la estrategia tendencial №4
Estrategia №5 (Indicador integral Onda Binaria).
Preinstalación:
//--- Parámetros del indicador Binary_Wave input double WeightMA = 1.0; input double WeightMACD = 1.0; input double WeightOsMA = 1.0; input double WeightCCI = 1.0; input double WeightMOM = 1.0; input double WeightRSI = 1.0; input double WeightADX = 1.0; //---- Moving Average input int MAPeriod=10; input ENUM_MA_METHOD MAType=MODE_EMA; input ENUM_APPLIED_PRICE MAPrice=PRICE_CLOSE; //---- MACD input int FastMACD = 12; input int SlowMACD = 26; input int SignalMACD = 9; input ENUM_APPLIED_PRICE PriceMACD=PRICE_CLOSE; //---- OsMA input int FastPeriod = 12; input int SlowPeriod = 26; input int SignalPeriod = 9; input ENUM_APPLIED_PRICE OsMAPrice=PRICE_CLOSE; //---- CCI input int CCIPeriod=10; input ENUM_APPLIED_PRICE CCIPrice=PRICE_MEDIAN; //---- Momentum input int MOMPeriod=14; input ENUM_APPLIED_PRICE MOMPrice=PRICE_CLOSE; //---- RSI input int RSIPeriod=14; input ENUM_APPLIED_PRICE RSIPrice=PRICE_CLOSE; //---- ADX input int ADXPeriod=10;
Resultado de la prueba:
Fig. 16 Resultados del testeo de la estrategia tendencial №5.
Prueba de la estrategia №6 (Indicador integral Weight Oscillator en conjunto con LeMan Objective).
Preinstalación:
//--- Parámetros del indicador LeMan Objective input int Sample=20; input int Quartile_1 = 25; input int Quartile_2 = 50; input int Quartile_3 = 75; input int Shift=0; //--- Parámetros del indicador Weight Oscillator //---- RSI input double RSIWeight=1.0; input uint RSIPeriod=14; input ENUM_APPLIED_PRICE RSIPrice=PRICE_CLOSE; //---- MFI input double MFIWeight=1.0; input uint MFIPeriod=14; input ENUM_APPLIED_VOLUME MFIVolumeType=VOLUME_TICK; //---- WPR input double WPRWeight=1.0; input uint WPRPeriod=12; //---- DeMarker input double DeMarkerWeight=1.0; input uint DeMarkerPeriod=10; //---- input Smooth_Method bMA_Method=MODE_SMMA_; input uint bLength=5; input int bPhase=100;
Resultado de la prueba:
Fig. 17 Resultados del testeo de la estrategia tendencial №6.
Prueba de la estrategia №7 (Canal de Donchian en conjunto con la modificación de MACD, en el que la serie de precios se sustituye por los valores de AO de B. Wiliams).
Preinstalación:
input string Inp_EaComment="Strategy #7"; //EA Comment input double Inp_Lot=0.01; //Lot input MarginMode Inp_MMode=LOT; //MM input int Inp_MagicNum=1111; //Magic number input int Inp_StopLoss=400; //Stop Loss(points) input int Inp_TakeProfit=600; //Take Profit(points) input int Inp_Deviation = 20; //Deviation(points) //--- Parámetros del indicador Donchian Channel System input uint DonchianPeriod=12; //Period of Averaging input Applied_Extrem Extremes=HIGH_LOW_CLOSE; //Type of Extremum //--- Parámetros del indicador CronexAO input Smooth_Method XMA_Method=MODE_ParMA; //Method of Averaging input uint FastPeriod=14; //Period of Fast averaging input uint SlowPeriod=25; //Period of Flow averaging input int XPhase=15; //Smoothing parameter
Resultado de la prueba:
Fig. 18 Resultados del testeo de la estrategia tendencial №7.
Prueba de la estrategia №8 (Oscilador cíclico de Schaff con confirmación en forma de tres niveles de Tirone).
Preinstalación:
input string Inp_EaComment="Strategy #8"; //EA Comment input double Inp_Lot=0.01; //Lot input MarginMode Inp_MMode=LOT; //MM input int Inp_MagicNum=1111; //Magic number input int Inp_StopLoss=400; //Stop Loss(points) input int Inp_TakeProfit=600; //Take Profit(points) input int Inp_Deviation = 20; //Deviation(points) input double Overbuying=90; //Overbuying zone input double Overselling=15; //Overselling zone //--- Parámetros del indicador Schaff Trend Cycle input Smooth_Method MA_SMethod=MODE_SMMA_; //Histogram smoothing method input int Fast_XMA = 20; //Fast moving average period input int Slow_XMA = 30; //Slow moving average period input int SmPhase= 100; //Moving averages smoothing parameter input Applied_price_ AppliedPrice=PRICE_CLOSE_; //Price constant input int Cycle=10; //Stochastic oscillator period //--- Parámetros del indicador Tirone Levels input int TirPeriod=13; //Period of the indicator input int Shift=0; //Horizontal shift of the indicator in bars
Resultado de la prueba:
Fig. 19 Resultados del testeo de la estrategia tendencial №8.
Prueba de la estrategia №9 (Canal de Keltner en forma del histograma e indicador iTrend en forma de la nube).
Preinstalación:
input string Inp_EaComment="Strategy #9"; //EA Comment input double Inp_Lot=0.01; //Lot input MarginMode Inp_MMode=LOT; //MM input int Inp_MagicNum=1111; //Magic number input int Inp_StopLoss=400; //Stop Loss(points) input int Inp_TakeProfit=600; //Take Profit(points) input int Inp_Deviation = 20; //Deviation(points) input uint BuyLevel=50; //Overbuying zone input double SellLevel=-50; //Overselling zone //--- Parámetros del indicador i-KlPrice input Smooth_Method MA_Method1=MODE_ParMA; //smoothing method of moving average input uint Length1=100; //smoothing depth of moving average input int Phase1=15; //moving average smoothing parameter input Smooth_Method MA_Method2=MODE_SMMA_; //candles size smoothing method input uint Length2=20; //smoothing depth of candles size input int Phase2=100; //candles size smoothing parameter input double Deviation=2.0; //channel expansion ratio input uint Smooth=20; //indicator smoothing period input Applied_price_ IPC=PRICE_TYPICAL_; //price constant input int Shift=0; //horizontal shift of the indicator in bars //--- Parámetros del indicador iTrend input Applied_price_ Price_Type=PRICE_TYPICAL_; //--- Moving Average parameters input uint MAPeriod=14; input ENUM_MA_METHOD MAType=MODE_EMA; input ENUM_APPLIED_PRICE MAPrice=PRICE_CLOSE; //--- Bollinger parameters input uint BBPeriod=14; input double deviation_=2.0; input ENUM_APPLIED_PRICE BBPrice=PRICE_CLOSE; input Mode BBMode=Mode_1;
Resultado de la prueba:
Fig. 20 Resultados del testeo de la estrategia tendencial №9.
Prueba de la estrategia №10 (Impulso del precio Average Change y abanico de medias móviles FigurelliSeries).
Preinstalación:
//--- Parámetros del indicador Average Change input Smooth_Method MA_Method1=MODE_SMMA_; //smoothing method of moving average input int Length1=12; //smoothing depth of moving average input int Phase1=15; //moving average smoothing parameter input Applied_price_ IPC1=PRICE_CLOSE_; //moving average price constant input Smooth_Method MA_Method2=MODE_EMA_; //indicator smoothing method input int Length2 = 5; //indicator smoothing depth input int Phase2=100; //indicator smoothing parameter input Applied_price_ IPC2=PRICE_CLOSE_; //price constant for smoothing input double Pow=5; //power input int Shift=0; //horizontal shift of the indicator in bars //--- Parámetros del indicador input uint StartPeriod=6; //initial period input uint Step_=6; //periods calculation step input uint Total=36; //number of Moving Averages input ENUM_MA_METHOD MAType=MODE_EMA; //Moving Averages smoothing type input ENUM_APPLIED_PRICE MAPrice=PRICE_CLOSE; //price timeseries of Moving Averages input int Shift1=0; //Horizontal shift of the indicator in bars
Resultado de la prueba:
Fig. 21 Resultados del testeo de la estrategia tendencial №10
Conclusiones
La prueba y la optimización de las estrategias presentadas han mostrado lo siguiente.
- En la mayoría de las estrategias, el beneficio total ha sido obtenido al negociar en los movimientos unidireccionales fuertes o prolongados.
- Las pérdidas totales y las secciones características con varias transacciones no rentables consecutivas han sido obtenidas al negociar estando en flat.
- Además de eso, las causas de las pérdidas en algunas estrategias han sido los parámetros iguales e inalterables del Take Profit, Stop Loss.
- En algunas ocasiones, la determinación de la tendencia tardaba mucho, por eso había que cambiar el timeframe.
Conclusión
A continuación, se muestra la tabla resumida con los nombres de los Asesores Expertos desarrollados y utilizados en el artículo, así como las clases auxiliares y la lista de indicadores que han sido usados en las estrategias tendenciales actuales. Al final del artículo se adjuntan todos los archivos mencionados, ordenados por carpetas. Por eso, para un trabajo correcto basta con colocar la carpeta MQL5 en la raíz del terminal.
Programas usados en el artículo:
# |
Nombre |
Tipo |
Descripción |
---|---|---|---|
1 |
Strategy_1.mq5 |
Asesor Experto |
Estrategia №1. Indicador ADXCloud con RSI demostrativo en forma del histograma. |
2 |
Strategy_2.mql5 |
Asesor Experto |
Estrategia №2. Indicador tendencial Standart Deviation en forma del histograma con confirmación de RVI. |
3 |
Strategy_3.mq5 |
Asesor Experto | Estrategia №3. Interpretación en nube de AC de B. Wiliams y el indicador combinado Bears Power y Bulls Power. |
4 |
Strategy_4.mq5 |
Asesor Experto |
Estrategia №4. Centro de gravedad de Ehlers confirmado por el indicador de la velocidad media del precio. |
5 |
Strategy_5.mq5 | Asesor Experto | Estrategia №5. Indicador integral Onda Binaria. |
6 |
Strategy_6.mq5 |
Asesor Experto |
Estrategia №6. Indicador integral Weight Oscillator en conjunto con LeMan Objective. |
7 | Strategy_7.mq5 |
Asesor Experto |
Estrategia №7. Canal de Donchian en conjunto con MACD, en el que la serie de precios se sustituye por los valores de AO de B. Wiliams. |
8 | Strategy_8.mq5 | Asesor Experto | Estrategia №8. Oscilador cíclico de Schaff con confirmación en forma de tres niveles de Tirone. |
9 | Strategy_9.mq5 | Asesor Experto | Estrategia №9. Canal de Keltner en forma del histograma e indicador iTrend en forma de la nube. |
10 | Strategy_10.mq5 | Asesor Experto | Estrategia №10. Impulso del precio Average Change y abanico de medias móviles FigurelliSeries. |
11 | TradeFunctions.mqh | Librería | Clase de funciones comerciales. |
12 | smoothalgorithms.mqh | Librería | Clases con algoritmos del suavizado utilizadas en los indicadores. |
13 | adxcloud.mq5 | Indicador | Se usa en la Estrategia №1. |
14 | rsi_сolor.mq5 | Indicador | Se usa en la Estrategia №1. |
15 | colorstddev.mq5 | Indicador | Se usa en la Estrategia №2. |
16 | colorzerolagrvi.mq5 | Indicador | Se usa en la Estrategia №2. |
17 | Bear_Bulls_Power.mq5 | Indicador | Se usa en la Estrategia №3. |
18 | cronexao.mq5 | Indicador | Se usa en la Estrategia №3. |
19 | centerofgravityosma.mq5 | Indicador | Se usa en la Estrategia №4. |
20 | average_speed.mq5 | Indicador | Se usa en la Estrategia №4. |
21 | binarywave.mq5 | Indicador | Se usa en la Estrategia №5. |
22 | objective.mq5 | Indicador | Se usa en la Estrategia №6. |
23 | WeightOscillator.mq5 | Indicador | Se usa en la Estrategia №6. |
24 | donchian_channels_system.mq5 | Indicador | Se usa en la Estrategia №7. |
25 | cronexao.mq5 | Indicador | Se usa en la Estrategia №7. |
26 | schafftrendcycle.mq5 | Indicador | Se usa en la Estrategia №8. |
27 | tirone_levels_x3.mq5 | Indicador | Se usa en la Estrategia №8. |
28 | i-klprice.mq5 | Indicador | Se usa en la Estrategia №9. |
29 | i_trend.mq5 | Indicador | Se usa en la Estrategia №9. |
30 | averagechange.mq5 | Indicador | Se usa en la Estrategia №10. |
31 | figurelliseries.mq5 | Indicador | Se usa en la Estrategia №10. |
Traducción del ruso hecha por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/ru/articles/3074
- 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