Análisis comparativo de 10 estrategias tendenciales

2 mayo 2017, 09:25
Alexander Fedosov
0
2 482

Contenido

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 combinados‌en 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.
Podemos concluir que en el proceso del desarrollo y prueba de las estrategias tendenciales se han confirmado tanto sus ventajas como desventajas. El buen trabajo en las zonas tendenciales fuertes y prolongadas del mercado se compensa con plena incapacidad de mostrar el resultado en la fase del flat o movimiento lateral. Por eso, la cosa más importante que hemos descubierto es que no hay gran diferencia en cómo se determina la tendencia actual. Todas las estrategias tendrán las mismas ventajas y desventajas.

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 Software Corp.
Artículo original: https://www.mql5.com/ru/articles/3074

Archivos adjuntos |
10Trend.zip (1385.21 KB)
Recetas MQL5 - Señales comerciales de pivotes Recetas MQL5 - Señales comerciales de pivotes

En este artículo se demuestra el proceso del desarrollo e implementación de la clase de señales a base de los pivote, niveles de reversa. A base de esta clase, se construye la estrategia con el uso de la librería estándar. Se consideran las posibilidades del desarrollo de la estrategia de pivotes mediante la adición de los filtros.

Tendencia universal con interfaz gráfica Tendencia universal con interfaz gráfica

En este artículo, a base de una serie de indicadores estándar, se crea el indicador universal de tendencia. Se desarrolla la interfaz gráfica para seleccionar el tipo del indicador y configurar sus parámetros. El indicador se visualiza en una ventana separada con las series de iconos de diferentes colores.

Patrones disponibles al comerciar con cestas de divisas. Parte II Patrones disponibles al comerciar con cestas de divisas. Parte II

Continuamos con la conversación sobre los patrones que puede detectar el tráder al comerciar con cestas de parejas de divisas. En esta parte se describen los patrones formados al usar los indicadores de tendencia combinados. Como herramienta de análisis se utilizan indicadores basados en el índice de la divisa.

Los Asesores Expertos desde el Asistente MQL5 funcionan en MetaTrader 4 Los Asesores Expertos desde el Asistente MQL5 funcionan en MetaTrader 4

En este artículo se ofrece un emulador simple del entorno comercial de MetaTrader 5 para MetaTrader 4. Este emulador permite realizar el traspaso y adaptación de las clases de trading de la librería estándar. Como resultado, los Asesores Expertos generados en el Asistente para MetaTrader 5, pueden ser compilados y ejecutados en MetaTrader 4.