English Русский Deutsch 日本語
preview
Características del Wizard MQL5 que debe conocer (Parte 50): Awesome Oscillator

Características del Wizard MQL5 que debe conocer (Parte 50): Awesome Oscillator

MetaTrader 5Sistemas comerciales |
40 0
Stephen Njuki
Stephen Njuki

Introducción

El Awesome Oscillator es otro indicador desarrollado por el legendario inversor Bill Williams, además del Alligator que analizamos en el último artículo sobre patrones de indicadores. En principio, está diseñado para medir el impulso del mercado y ayudar a identificar posibles cambios en las tendencias predominantes. El Awesome Oscillator (AO) se basa en la diferencia entre una media móvil simple (SMA) de 34 períodos y una SMA de 5 períodos, donde ambas se aplican al precio medio. El precio medio viene dado por:

(Precio alto + Precio bajo) / 2

El AO se muestra como un histograma oscilante, por encima y por debajo de la línea cero, que sirve como marcador de ausencia de impulso, y cuyo cruce por encima o por debajo sugiere un posible cambio de tendencia. Las barras verdes del histograma representan un aumento del impulso alcista con respecto a la barra de precios anterior, mientras que las barras rojas marcan un aumento del impulso bajista también con respecto a la barra anterior. Además, como regla general, cuando las barras del histograma están por encima de la línea cero, esto suele indicar que prevalece una tendencia alcista, mientras que si las mismas barras del histograma (de nuevo, independientemente del color en sí) se reflejan en el otro lado de la línea cero, esto implica un impulso bajista predominante.

¿Por qué el nombre «Awesome» (Impresionante)? Bueno, no hay una respuesta concisa ni una fuente autorizada a la que dirigir la pregunta; sin embargo, se argumenta que AO simplifica los complicados cálculos de impulso en un sencillo indicador visual. Al centrarse tanto en las SMA de ritmo rápido como en las de «largo plazo», ayuda a los operadores a hacerse una idea relativa de la dinámica del mercado tanto a corto como a largo plazo. Es muy versátil y funciona bien en estrategias de seguimiento de tendencias y de reversión. Sus aplicaciones prácticas consisten principalmente en ayudar a los operadores a alinearse con el impulso predominante del mercado. Puede proporcionar posibles puntos de entrada y salida, como explicamos a continuación con una variedad de patrones de señales, y también puede ser útil en el análisis de divergencias, que también aprovechamos en los patrones de señales que consideramos a continuación.

A pesar de sus múltiples patrones de señal y posibles usos, también presenta algunas limitaciones inherentes. Al igual que muchos osciladores, el AO puede generar señales falsas en mercados con rangos limitados o volátiles, una característica que, lamentablemente, significa que puede funcionar mejor cuando se combina con otros indicadores para obtener una estrategia más amplia y completa.

Con esta breve introducción, y siguiendo con nuestra tradición, veamos ahora algunos de los patrones de AO. Para este artículo, analizamos 9 patrones diferentes indexados del 0 al 8. Como siempre, analizaremos y probaremos cada patrón individualmente, antes de concluir con una prueba multipatrón, cuya implementación en entornos de cuentas reales he rechazado, a menos que el operador esté muy seguro de la ponderación relativa del patrón basándose en su propia experiencia de uso. Para probar un patrón cada vez, debemos asignar el parámetro de entrada m_inputs o «Patterns Used Bitmap» a un índice específico. Si queremos probar solo el patrón 0, este índice será 2 elevado a 0. Si es un patrón, 4 el índice será 2 elevado a la potencia 4; y así sucesivamente.

El código adjunto está pensado para ser ensamblado por el asistente MQL5 y, como tal, tiene un formato que facilita este ensamblaje. Hay guías aquí y aquí sobre cómo hacerlo para los lectores que sean nuevos. Estas series tratan sobre cómo aprovechar las ventajas que ofrece el Asistente MQL5, entre las que destacan la rápida comprobación y la creación de prototipos de nuevas ideas. La necesidad de codificar todo desde cero es una ventaja evidente, pero lo que podría pasarse por alto es la plataforma de pruebas estándar que ofrece a la hora de probar múltiples ideas, lo que puede ser clave para hacerse una idea de lo que es realmente importante para la propia estrategia y enfoque de los mercados. Vamos a saltar allí.


Cruce de línea cero

Nuestro primer patrón en el índice 0 es probablemente el patrón más común para este indicador, y es el cruce de la línea cero. Por definición, la línea cero en el AO representa un estado de impulso neutral, lo que significa que cruzar el histograma por encima o por debajo de esta línea implica un cambio en el impulso. Es sencillo: se marca un cruce alcista cuando el AO cruza desde debajo de la línea cero por encima de ella, lo que presenta una oportunidad de compra; mientras que un cruce bajista se produce cuando el AO cruza esta línea cero desde arriba para situarse por debajo de ella. Implementamos esto en MQL5 de la siguiente manera:

//+------------------------------------------------------------------+
//| Check for Pattern 0.                                             |
//+------------------------------------------------------------------+
bool CSignalAwesome::IsPattern_0(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && AO(X() + 1) < 0.0 && AO(X()) > 0.0)
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && AO(X() + 1) > 0.0 && AO(X()) < 0.0)
   {  return(true);
   }
   return(false);
}

Los puntos clave que vale la pena destacar en este patrón son que los cruces de la línea cero representan un cambio en el impulso, de bajista a alcista o viceversa, dependiendo de la dirección del cruce. Esto tiene el potencial de actuar como un indicador temprano de los cambios de tendencia para el operador. Este último punto también lleva a la necesidad de confirmar los cruces de esta línea mediante indicadores alternativos, como líneas de tendencia, etc. Las barras del histograma de este oscilador también tienen su altura y pendiente alrededor de la línea cero, que sirven como indicador de la fuerza del impulso, donde las barras más altas indican un impulso más fuerte, lo que significa que los cruces graduales (o cruces con barras más cortas) suelen indicar señales más débiles que los cruces con barras más altas.

Como siempre, el contexto es importante, por lo que los cruces graduales en un entorno alcista no tienen por qué ser necesariamente una señal débil, del mismo modo que los cruces con histogramas de gran tamaño en un mercado volátil no tienen por qué indicar una señal fuerte per se. Este oscilador puede servir como guía para una señal de entrada y esa es nuestra aplicación principal en este artículo, aunque dado que estamos utilizando umbrales de condiciones largas y cortas tanto para la apertura como para el cierre, las clases de señales inherentes a los asesores expertos ensamblados por el asistente también explotan el potencial de salida de cualquier señal aplicada/seleccionada.

Las ventajas básicas del patrón 0 son su facilidad de interpretación y su escalabilidad, ya que este oscilador se puede aplicar a múltiples marcos temporales, desde gráficos intradía hasta gráficos a largo plazo, y puede actuar como una alerta temprana de posibles reversiones de tendencia. Sus inconvenientes son su carácter rezagado, ya que se basa en medias móviles y la señal puede retrasarse en mercados que evolucionan rápidamente. Además, las señales falsas pueden ser comunes en mercados en consolidación o cuando los mercados experimentan correcciones menores dentro de una tendencia predominante. Por último, como ya se ha insinuado, la confirmación de sus señales es una buena práctica y esto significa, en esencia, que no se trata de una señal muy fuerte, al menos de forma independiente. A continuación se presentan los resultados de las pruebas con los ajustes de entrada de una breve optimización con GBP JPY para el año 2022 en un marco temporal de 4 horas:

r0


Señal de picos gemelos

Nuestro segundo patrón, el patrón 1, es la señal de picos gemelos y, aunque es relativamente fácil de interpretar cuando se opera manualmente, su implementación en el trading automatizado o su realización en una señal personalizada es un poco complicada. Por lo tanto, según la definición, los picos gemelos se producen cuando se forman dos picos en el mismo lado de la línea cero, ya sea por encima para los bajistas o por debajo para los alcistas, siendo el segundo pico más cercano a la línea cero. Una regla clave para el patrón 1 es que la línea cero no debe haberse traspasado entre los dos picos.

Nuestra señal alcista o picos gemelos alcistas se dan cuando ambos picos están por debajo de la línea cero, con el pico más reciente más cercano a la línea cero, y, por el contrario, los picos bajistas se dan cuando ambos picos están por encima de la línea cero, con el pico más reciente más cercano al límite cero. Para ello, según el patrón descrito, la altura del histograma entre los picos debe disminuir, para reflejar una pérdida de impulso en la tendencia anterior (la tendencia que está a punto de invertirse). La línea cero también sirve como límite, por lo que un cruce antes de la formación de los dos picos invalida la señal, al igual que si los picos están demasiado cerca entre sí. Nuestra implementación no comprueba esto último y los lectores pueden implementar esta función de forma independiente. No obstante, a continuación se presenta nuestro código fuente:

//+------------------------------------------------------------------+
//| Check for Pattern 1.                                             |
//+------------------------------------------------------------------+
bool CSignalAwesome::IsPattern_1(ENUM_POSITION_TYPE T)
{  bool _1 = false;
   int _i = X();
   if(T == POSITION_TYPE_BUY && AO(_i) < 0.0 && LowerColor(_i) == clrGreen && LowerColor(_i + 1) == clrRed)
   {  while(AO(_i) < 0.0)
      {  _i++;
         if(LowerColor(_i) == clrGreen && LowerColor(_i + 1) == clrRed)
         {  if(fabs(AO(_i)) < fabs(AO(X())))
            {  _1 = true;
            }
            break;
         }
         if(AO(_i) >= 0.0)
         {  break;
         }
      }               
   }
   else if(T == POSITION_TYPE_SELL && AO(_i) > 0.0 && UpperColor(_i) == clrRed && UpperColor(_i + 1) == clrGreen)
   {  while(AO(_i) > 0.0)
      {  _i++;
         if(UpperColor(_i) == clrRed && UpperColor(_i + 1) == clrGreen)
         {  if(fabs(AO(_i)) < fabs(AO(X())))
            {  _1 = true;
            }
            break;
         }
         if(AO(_i) <= 0.0)
         {  break;
         }
      }               
   }
   return(_1);
}

El patrón 1 es significativo porque a menudo apunta a una divergencia prevalente del impulso con respecto a la acción del precio, lo que actúa como una alerta temprana de reversiones. La capacidad de detectar reversiones es probablemente el punto fuerte del patrón 1. Los puntos de entrada exactos con estos patrones de picos gemelos pueden ser precisamente después de que se haya formado el segundo pico más cercano a la línea cero, y esto es lo que hemos implementado en nuestra fuente anterior; sin embargo, un enfoque alternativo «más seguro» podría ser después de que el oscilador cruce el límite cero tras formar los dos picos.

El patrón 1 también puede ser útil para colocar órdenes stop loss, ya que, en lugar de colocar una orden stop loss tradicional tras abrir la posición al formarse este patrón, la posición se cierra en caso de que el oscilador vuelva a alcanzar el pico más alto de los dos (es decir, el primer pico). No lo implementamos, pero es algo que el lector puede explorar. Además, este patrón podría extenderse para establecer objetivos de ganancias por lo cual cuando el oscilador cruza la línea cero, la posición que se abrió al registrar el segundo pico más pequeño, se cierra si está en ganancias. Este último enfoque funcionaría mejor idealmente en marcos de tiempo más grandes, ya que en marcos de tiempo más pequeños, la línea cero podría cruzarse cuando el precio todavía está dentro del spread.

Este patrón, si bien es más raro y, por lo tanto, posiblemente más seguro que el patrón 0, aún puede combinarse con líneas de tendencia; análisis de volumen si hay datos de volumen disponibles, donde un mayor volumen en el segundo pico más pequeño puede servir como una confirmación clara de la señal; y con herramientas de divergencia en forma de MACD o RSI, donde la divergencia puede proporcionar confianza adicional para la señal indicada. Sus ventajas incluyen su naturaleza no rezagada en comparación con los cruces de SMA o el patrón 0, precisión direccional ya que no solo señala la próxima tendencia, sino que la respalda resaltando la debilidad del impulso prevaleciente con la tendencia actual y, por supuesto, su escalabilidad en diferentes marcos de tiempo y mercados. Las pruebas con configuraciones optimizadas para GBPJPY para el año 2022 en el marco temporal de 4 horas nos arrojan los siguientes resultados:

r1

Las limitaciones del patrón 1 se derivan de su complejidad, especialmente cuando se trata de implementarlo en código. Como ya se ha argumentado, se trata de un patrón relativamente sencillo de inferir a partir de un gráfico de precios, pero que un asesor experto lo interprete a partir de un búfer de precios no es lo mismo. Además, es probable que haya muchas señales falsas para este patrón en entornos de mercado volátiles o indecisos. El uso de la confirmación con las herramientas ya mencionadas o incluso patrones de velas puede ayudar a aliviar esto.


Configuración del platillo

El patrón de platillo, nuestro patrón-2, es otro patrón de señal AO que ayuda a identificar posibles reversiones mediante la lectura del color de las barras del histograma del oscilador. La configuración del platillo alcista indica una posible reversión al alza en el impulso del mercado que está marcada por dos barras de histograma rojas consecutivas, donde la segunda barra de histograma es de una magnitud menor que la anterior, y la tercera barra, después de estas dos, es verde y más alta que la segunda barra roja corta. Todas estas barras deben estar por encima de la línea cero y la señal de entrada suele estar al cierre de la barra verde.

La configuración bajista en forma de platillo es, como cabría esperar, la inversa de la alcista, en la que tenemos dos barras verdes consecutivas, con la segunda más cercana a la línea cero (o más corta) y la tercera barra roja y más alta que la segunda barra verde más corta. Todas estas barras se invertirían desde el platillo alcista y estarían por debajo de la línea cero, y la señal de entrada sería, como vimos con el alcista, al cierre de la barra roja. La clave de este patrón es que depende de los cambios de impulso más que de la acción del precio en bruto, lo que tiende a hacerlo eficaz para identificar reversiones de tendencias a corto plazo o reafirmar la fuerza de tendencias más amplias. Implementamos esto en MQL5 de la siguiente manera:

//+------------------------------------------------------------------+
//| Check for Pattern 2.                                             |
//+------------------------------------------------------------------+
bool CSignalAwesome::IsPattern_2(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && UpperColor(X() + 2) == clrRed && UpperColor(X() + 1) == clrRed && UpperColor(X()) == clrGreen)
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && LowerColor(X() + 2) == clrGreen && LowerColor(X() + 1) == clrGreen && LowerColor(X()) == clrRed)
   {  return(true);
   }
   return(false);
}

Las principales ventajas de este patrón son que es fácil de identificar e interpretar, se puede utilizar junto con otros indicadores comunes para mejorar la precisión de las señales y tiende a manejar relativamente bien los mercados volátiles, un entorno en el que los cambios de impulso pueden ser bastante comunes. Las limitaciones incluyen una precisión reducida en entornos poco volátiles y sin tendencia, en los que sería mejor combinarlo con un indicador adicional. La prueba realizada con ajustes de entrada optimizados favorables utilizando GBPJPY durante 2022 en el gráfico de 4 horas nos da los siguientes resultados:

r2


Divergencia entre el precio y el AO

Nuestro patrón 3 se basa en la divergencia. ¿Y qué es la divergencia? Simplemente una desviación entre la lectura de un indicador y la acción del precio, que a menudo señala una posible reversión o debilitamiento de la tendencia predominante. Sin embargo, con este patrón, tendemos a centrarnos en la divergencia entre los máximos/mínimos del precio y los picos/valles del oscilador AO. Sin embargo, en este artículo exploramos una forma más sencilla de divergencia, que es la tendencia de los máximos y mínimos de la acción del precio y los valores del histograma AO.

Una divergencia alcista se produce cuando el precio forma mínimos más bajos, pero el oscilador AO forma máximos más altos. La tesis detrás de este patrón sugiere que se está insinuando un debilitamiento del impulso bajista y, por lo tanto, existe una posible reversión de la tendencia al alza. Una posible señal de entrada más precisa podría ser detectar este patrón cuando el AO se encuentra por debajo de la línea cero y esperar a que cruce la línea cero para entrar en una posición de compra.

Por el contrario, se producirá una divergencia bajista cuando el precio forme máximos más altos, pero el oscilador AO alcance mínimos más bajos, lo que indica un debilitamiento del impulso alcista a pesar de la evolución del precio. Esto significaría un cambio de tendencia a la baja, y un punto de entrada adecuado para la posición corta podría ser cuando el AO cruce por debajo de la línea cero o se confirme un patrón bajista en un indicador secundario. Implementamos esto en MQL5 de la siguiente manera:

//+------------------------------------------------------------------+
//| Check for Pattern 3.                                             |
//+------------------------------------------------------------------+
bool CSignalAwesome::IsPattern_3(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && Low(X() + 3) > Low(X()) && AO(X() + 3) < AO(X()))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && High(X() + 3) < High(X()) && AO(X() + 3) > AO(X()))
   {  return(true);
   }
   return(false);
}

Las características clave de este patrón son que llama la atención sobre los cambios en el impulso que a menudo preceden a las reversiones de precios, especialmente en niveles de precios sobrecomprados o sobrevendidos. Por lo tanto, está diseñado más para identificar posibles reversiones que continuaciones de precios. Una prueba con los ajustes ideales obtenidos a partir de la optimización del mismo símbolo y los ajustes que hemos estado utilizando con los patrones anteriores nos da el siguiente informe:

r3

Sus ventajas no difieren mucho de los patrones ya considerados, ya que ayuda a anticipar los cambios de tendencia antes de que se produzcan, es versátil en diversos mercados y marcos temporales, y puede combinarse con otros indicadores para confirmar las señales de ruptura. Del mismo modo, sus inconvenientes no son muy diferentes, ya que tiende a ser poco fiable en mercados laterales, a menudo requiere confirmación al combinarse con otro indicador y también es lento.


Filtrado de falsas rupturas

Nuestro patrón 4 trata sobre las falsas rupturas, que se producen cuando el precio parece romper un nivel importante de soporte/resistencia, pero luego invierte su dirección, posiblemente porque no ha logrado mantener el impulso que le llevó a superar la barrera que rompió en un primer momento. Por lo tanto, filtrar estas rupturas en busca de falsedades puede, al menos sobre el papel, mejorar la precisión de las operaciones si partimos de la premisa de que el impulso es una métrica clave para que una ruptura sea sostenible.

Como se ha presentado en la introducción, el AO mide el impulso comparando una SMA a corto plazo (5 períodos) con una SMA a largo plazo (34 períodos) al aplicar el precio medio. Por lo tanto, al analizar los valores AO cuando se produce una ruptura, los operadores pueden determinar si está suficientemente respaldada por el impulso o por una diferencia entre la acción del precio en 5 períodos y la acción del precio en 34 períodos. Implementamos el patrón 4 en MQL5 de la siguiente manera:

//+------------------------------------------------------------------+
//| Check for Pattern 4.                                             |
//+------------------------------------------------------------------+
bool CSignalAwesome::IsPattern_4(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && Close(X() + 1) < MA(X() + 1) && Close(X()) > MA(X()) && UpperColor(X() + 1) == clrGreen && UpperColor(X()) == clrGreen && AO(X() + 1) > 0.0)
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && Close(X() + 1) > MA(X() + 1) && Close(X()) < MA(X()) && LowerColor(X() + 1) == clrRed && LowerColor(X()) == clrRed && AO(X() + 1) < 0.0)
   {  return(true);
   }
   return(false);
}

Según nuestra fuente, identificamos una ruptura como un cruce de la media móvil en 8 períodos. ¿Quizás este periodo de media móvil debería haber sido más largo, probablemente 34? Con el fin de hacer más significativa la barrera de soporte/resistencia, pero este breve periodo fue suficiente para nuestros fines de prueba. Otros métodos para identificar la ruptura incluyen líneas de tendencia o patrones gráficos como triángulos o rectángulos. Cualquier activación del precio más allá de los niveles definidos por estos indicadores marcaría claramente una ruptura.

Un análisis más detallado del AO en el punto de ruptura puede proporcionar información sobre si la ruptura en juego es sostenible. Si el tamaño del histograma (tamaño del gráfico de barras del oscilador) es significativo en el momento de la ruptura, entonces podría ser rentable; sin embargo, los histogramas cortos o de tamaño moderado a menudo requerirían una confirmación adicional antes de poder emprender una señal. Los medios para obtener esta confirmación incluyen si el AO finalmente cruza la línea cero, o si el histograma ya se encuentra en la mitad que indica el impulso hacia la tendencia predominante/señal, entonces sería necesario ver barras de histograma más largas o de color similar del AO antes de abrir una posición.

En cuanto a las definiciones de las señales, una ruptura alcista se produce cuando el precio cruza la media móvil desde abajo y cierra por encima de ella, cuando el AO está por encima de la línea cero y las dos últimas barras son de color verde. Por otro lado, la ruptura bajista se produce cuando el precio cruza la media móvil desde arriba y cierra por debajo de ella, cuando el AO está por debajo de la línea cero y las dos últimas barras son rojas. Los resultados de las pruebas con símbolos y ajustes similares a los utilizados anteriormente con los otros patrones nos presentan este informe:

r4


Confirmación de la continuación de la tendencia

El patrón 5 actúa como un control que garantiza que cualquier tendencia dada (ya sea alcista o bajista) probablemente persista, lo que reduce el riesgo de abrir operaciones antes de una reversión. AO puede ser eficaz para confirmar la continuación de la tendencia mediante el análisis del impulso. Una continuación de la tendencia alcista se produce cuando el histograma AO permanece en verde por encima de la línea cero y el precio de cierre sigue con una tendencia al alza. Por el contrario, la continuación de la tendencia bajista se produce cuando el AO está por debajo de la línea cero, el precio tiende a bajar y los histogramas del AO son rojos. Implementamos esto de la siguiente manera en MQL5:

//+------------------------------------------------------------------+
//| Check for Pattern 5.                                             |
//+------------------------------------------------------------------+
bool CSignalAwesome::IsPattern_5(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && Close(X() + 1) < Close(X()) && UpperColor(X() + 1) == clrGreen && UpperColor(X()) == clrGreen && AO(X() + 1) > 0.0)
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && Close(X() + 1) > Close(X()) && LowerColor(X() + 1) == clrRed && LowerColor(X()) == clrRed && AO(X() + 1) < 0.0)
   {  return(true);
   }
   return(false);
}

Las pruebas realizadas con los ajustes de optimización del GBPJPY para el año 2022 en un marco temporal de 4 horas nos proporcionan el siguiente informe:

r5

Otros patrones que pueden respaldar la continuación de la tendencia y que pueden codificarse para complementar lo presentado anteriormente son la línea de cruce por cero (patrón 0) o la señal de retroceso, en la que un breve debilitamiento del impulso (por ejemplo, barras más pequeñas) seguido de un nuevo fortalecimiento de las barras del histograma AO significa que la tendencia predominante del precio se mantiene intacta, o una señal de picos gemelos que hemos considerado anteriormente en el patrón 1. La combinación de estos múltiples patrones para realizar operaciones es algo que puede hacer el Asesor Experto ensamblado, y lo consideramos al final del artículo sobre señales personalizadas de cada indicador.

Sin embargo, para operar solo con el patrón 5, asignamos nuestro parámetro de entrada para el mapa de bits utilizado a 32, y si optimizamos con este patrón en una configuración del probador de estrategias similar a la anterior con los otros patrones, obtenemos el siguiente informe de algunas de las configuraciones de entrada favorables. Al estar intrínsecamente influenciado por el impulso, sus ventajas y limitaciones no varían mucho de los otros patrones que hemos cubierto anteriormente.


Rebote de línea cero

Rebotando o cerca de la línea cero se encuentra nuestro patrón 6, y la premisa detrás de esta formación es que cuando el AO se acerca a la línea cero pero no la cruza, reanuda su tendencia anterior. Por lo tanto, la estrategia de trading consiste en que se da por hecho un rebote alcista si el AO, cuando se encuentra por encima de la línea cero, desciende hacia la línea cero y luego se retira de ella sin cruzarla. El rebote bajista también se produce cuando el AO está por debajo de la línea cero y se desploma hacia ella antes de retroceder sin cruzarla. Lo hemos codificado de la siguiente manera para nuestra clase de señal personalizada:

//+------------------------------------------------------------------+
//| Check for Pattern 6.                                             |
//+------------------------------------------------------------------+
bool CSignalAwesome::IsPattern_6(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && AO(X() + 2) > AO(X() + 1) && AO(X() + 1) >= 0.0 && AO(X() + 1) < AO(X()))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && AO(X() + 2) < AO(X() + 1) && AO(X() + 1) <= 0.0 && AO(X() + 1) > AO(X()))
   {  return(true);
   }
   return(false);
}

Las pruebas realizadas con ajustes de optimización favorables, tal y como hemos hecho con los otros patrones anteriores, nos dan los siguientes resultados:

r6


Alerta temprana de reversión

Nuestro patrón 7, que es el octavo, se caracteriza por un cambio repentino de color, ya sea de verde a rojo o viceversa. Implementamos las lecturas de color del AO de la siguiente manera:

   //
   color             UpperColor(int ind)
   {  //
      return(AO(ind) >= AO(ind + 1) && AO(ind + 1) > 0.0 ? clrGreen : clrRed);
   }
   color             LowerColor(int ind)
   {  //
      return(AO(ind) <= AO(ind + 1) && AO(ind + 1) < 0.0 ? clrRed : clrGreen);
   }

Estas funciones se encuentran en la interfaz de clase de la clase de señal personalizada y se utilizan en toda la clase, no solo para este patrón. La estrategia de trading para el patrón 7 consiste en que la transición de bajista a alcista se produce cuando el color del histograma AO cambia de rojo a verde, independientemente de la posición del AO con respecto a la línea cero. Del mismo modo, una transición alcista a bajista se caracteriza por un cambio repentino en el color del histograma, que pasa de verde a rojo de nuevo, independientemente de la posición del AO con respecto a la línea cero. Lo implementamos de la siguiente manera:

//+------------------------------------------------------------------+
//| Check for Pattern 7.                                             |
//+------------------------------------------------------------------+
bool CSignalAwesome::IsPattern_7(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && ((UpperColor(X() + 1) == clrRed && UpperColor(X()) == clrGreen) || (LowerColor(X() + 1) == clrRed && LowerColor(X()) == clrGreen)))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && ((UpperColor(X() + 1) == clrGreen && UpperColor(X()) == clrRed) || (LowerColor(X() + 1) == clrGreen && LowerColor(X()) == clrRed)))
   {  return(true);
   }
   return(false);
}

Al probar este patrón solo con ajustes de optimización adecuados en condiciones similares a las utilizadas anteriormente con otros patrones, con la obvia excepción de que la entrada utilizada por el patrón se asigna a 128, obtenemos el siguiente informe:

r7


Fortaleza de la tendencia mediante histograma

Nuestro patrón final, el tamaño del histograma, tiene el índice 8 y pretende llevar el patrón simple 7 anterior un paso más allá añadiendo una medida al tamaño del histograma AO. A partir de nuestra implementación del código de colores anterior, se puede observar que la codificación por colores de AO se basa en los cambios en el tamaño del histograma. Por lo tanto, un histograma creciente cuando está por encima de la línea cero o un tamaño de barra decreciente cuando el AO está por debajo de cero, da lugar a barras AO verdes. En muchos sentidos, esta es la premisa del patrón 7. Sin embargo, en el patrón 8, un aumento del impulso alcista se caracteriza por barras verdes sucesivas (que implican un aumento o una disminución relevante) y por una barra del histograma AO más reciente que supera en más de ocho veces el diferencial del valor. El uso de 8 veces el margen es una elección arbitraria. Normalmente, un parámetro de entrada optimizado podría ajustar mejor cuál debería ser este umbral, o también se podría utilizar una fracción de la volatilidad actual. Un aumento del impulso bajista es lo contrario. Implementamos esto en MQL de la siguiente manera:

//+------------------------------------------------------------------+
//| Check for Pattern 8.                                             |
//+------------------------------------------------------------------+
bool CSignalAwesome::IsPattern_8(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && AO(X() + 2) > 0.0 && fabs(AO(X() + 2)) >= 8.0 * m_symbol.Spread()*m_symbol.Point() && UpperColor(X() + 2) == clrGreen && UpperColor(X() + 1) == clrGreen && UpperColor(X()) == clrGreen)
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && AO(X() + 2) < 0.0 && fabs(AO(X() + 2)) >= 8.0 * m_symbol.Spread()*m_symbol.Point() && LowerColor(X() + 2) == clrRed && LowerColor(X() + 1) == clrRed && LowerColor(X()) == clrRed)
   {  return(true);
   }
   return(false);
}

La tesis principal aquí es que las barras más pequeñas (ya sean verdes o rojas) sugieren una tendencia a la baja y, por lo tanto, un período de consolidación, mientras que un histograma más largo y prominente sugiere un fuerte impulso y que la tendencia predominante tiene cierta capacidad de resistencia. Una prueba realizada solo con este patrón nos da el siguiente informe:

r8

Nuestra clase de señales personalizada también puede operar con múltiples patrones y, si realizamos optimizaciones para las ponderaciones de patrones adecuadas con GBPJPY en el mismo año y periodo de tiempo que con las ejecuciones de patrones individuales, obtenemos los siguientes resultados:

r_all

c_all


Conclusión

Hemos analizado otro indicador de Bill Williams, el oscilador Awesome, patrón por patrón, tal y como hicimos con los indicadores anteriores. Hay una serie de implementaciones y aspectos que no hemos tenido en cuenta al codificar estos patrones, como añadir más parámetros de entrada para gestionar mejor el umbral de cada patrón y, por supuesto, validar adecuadamente cualquier parámetro de entrada preferido antes de su uso. Esto, como siempre, se deja a criterio del lector, ya que nuestro código fuente completo se adjunta al final del artículo.

Nombre del archivo Descripción
SignalWZ_50.mqh Archivo de clase de señal personalizado, basado en el oscilador Awesome.
wz_50.mq5 Ejemplo de Asesor Experto ensamblado por Wizard, que muestra los archivos incluidos/utilizados.

Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/articles/16502

Archivos adjuntos |
SignalWZ_50.mqh (19.21 KB)
wz_50.mq5 (7.66 KB)
Utilizando redes neuronales en MetaTrader Utilizando redes neuronales en MetaTrader
En el artículo se muestra la aplicación de las redes neuronales en los programas de MQL, usando la biblioteca de libre difusión FANN. Usando como ejemplo una estrategia que utiliza el indicador MACD se ha construido un experto que usa el filtrado con red neuronal de las operaciones. Dicho filtrado ha mejorado las características del sistema comercial.
Operar con el Calendario Económico MQL5 (Parte 3): Añadiendo filtros de divisa, importancia y tiempo Operar con el Calendario Económico MQL5 (Parte 3): Añadiendo filtros de divisa, importancia y tiempo
En este artículo, implementamos filtros en el panel del calendario económico MQL5 para refinar la visualización de eventos de noticias por divisa, importancia y hora. Primero establecemos criterios de filtrado para cada categoría y luego los integramos en el panel de control para mostrar solo los eventos relevantes. Por último, nos aseguramos de que cada filtro se actualice dinámicamente para proporcionar a los operadores información económica específica y en tiempo real.
Particularidades del trabajo con números del tipo double en MQL4 Particularidades del trabajo con números del tipo double en MQL4
En estos apuntes hemos reunido consejos para resolver los errores más frecuentes al trabajar con números del tipo double en los programas en MQL4.
Evaluación visual y ajuste comercial en MetaTrader 5 Evaluación visual y ajuste comercial en MetaTrader 5
En el simulador de estrategias no solo es posible optimizar los parámetros de un robot comercial. Hoy le mostraremos cómo evaluar post-facto la historia comercial de su cuenta y realizar ajustes en el trading en el simulador cambiando el tamaño de las órdenes stop para las posiciones abiertas.