English Русский 中文 Deutsch 日本語 Português 한국어 Français Italiano Türkçe
preview
Aprendiendo a diseñar un sistema de trading con el oscilador Chaikin

Aprendiendo a diseñar un sistema de trading con el oscilador Chaikin

MetaTrader 5Trading | 21 septiembre 2022, 10:15
304 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Introducción

Este artículo completa nuestra serie sobre el desarrollo de sistemas comerciales basados en los indicadores técnicos más populares. Hoy veremos algunos sistemas comerciales basados en el oscilador de Chaikin (Chaikin Oscillator).

Una vez más, el trabajo sobre el indicador se dividirá en varios temas:

  1. Definición del oscilador de Chaikin
  2. Estrategia del oscilador de Chaikin
  3. Esquema de estrategias del oscilador de Chaikin
  4. Sistema comercial del oscilador de Chaikin
  5. Conclusión

Según estos temas, aprenderemos paso a paso cómo diseñar y construir un sistema comercial utilizando el oscilador de Chaikin. Descubramos qué es el indicador oscilador de Chaikin, qué mide y cómo se puede calcular manualmente. Los detalles del cálculo nos ayudarán a comprender mejor el propio concepto del indicador. Después analizaremos cómo usarlo, valiéndonos para ello de estrategias sencillas basadas en su concepto básico. A continuación, crearemos un plan de desarrollo paso a paso para cada estrategia, para ayudarnos a desarrollar un sistema comercial para cada estrategia, en el apartado "Esquema de la Estrategia del Oscilador de Chaikin". Después de ello, escribiremos los sistemas comerciales para cada estrategia analizada. Estas generarán automáticamente las señales del indicador en la plataforma MetaTrader 5.

El código lo escribiremos en el lenguaje de programación MQL5 (MetaQuotes Language) incorporado, y utilizaremos la plataforma comercial MetaTrader 5 para su ejecución. Si no sabe cómo descargar o usar el MetaEditor, le recomendamos leer la sección "Escribiendo el código MQL5 en el MetaEditor" de uno de mis artículos anteriores.

¡Atención! Toda la información del presente artículo se ofrece «tal cual», únicamente con fines ilustrativos, y no supone ningún tipo de recomendación. El artículo no garantiza ningún resultado en absoluto. Todo aquello que ponga en práctica usando este artículo como base, lo hará bajo su propia cuenta y riesgo; el autor no garantiza resultado alguno.

Y ahora, manos a la obra.


Definición del oscilador de Chaikin

En esta parte, trataremos de entender el concepto que hay detrás del indicador Oscilador de Chaikin. El Oscilador de Chaikin es un indicador de impulso creado por Mark Chaikin, en cuyo honor obviamente se nombró el indicador. Mide el impulso de la línea de distribución y acumulación usando la fórmula de convergencia-divergencia de la media móvil (MACD). A partir de estos datos del impulso, podemos hacernos una idea de los cambios direccionales en la línea de distribución y acumulación.

Para calcular manualmente el oscilador de Chaikin y así entender mejor su concepto, deberemos seguir los siguientes pasos:

  1. Cálculo del multiplicador del flujo de dinero = ((cierre - mínimo) - (máximo - cierre))/(máximo - mínimo)
  2. Cálculo del volumen de flujo de dinero = Multiplicador del flujo de dinero * volumen del periodo
  3. Cálculo de la Línea de Distribución y Acumulación (ADL) = ADL anterior + Flujo de dinero actual
  4. Oscilador de Chaikin = (EMA de 3 periodos de ADL) - (EMA de 10 periodos de ADL)

Por fortuna, no necesitaremos calcular el indicador manualmente, pues existe uno listo para usar que viene incorporado en la plataforma MetaTrader 5. Todo lo que deberemos hacer es elegirlo de la lista entre otros indicadores disponibles.

Para ello, en la ventana del terminal MetaTrader 5, seleccionaremos el menú "Insertar" --> Indicadores --> Oscilador --> Oscilador Chaikin. Mostramos esto en la captura de pantalla:

Inicio en el gráfico del oscilador de Chaikin

Después de ello, se abrirá la ventana de parámetros del asesor: Tendrá el aspecto que sigue:

 Parámetros del oscilador de Chaikin

1 - tipo de volúmenes.

2 - periodo de la media móvil rápida.

3 - periodo de la media móvil lenta.

4 - tipo de media móvil.

5 - color de la línea del indicador.

6 - tipo de la línea del indicador.

7 - grosor de la línea del indicador.

Seleccionamos los parámetros necesarios del indicador, presionamos el botón OK y el indicador se iniciará en el gráfico como mostramos a continuación:

Oscilador de Chaikin en el gráfico

Como podemos ver, el indicador se muestra en la ventana adicional del gráfico. El indicador dibuja una línea que oscila por encima y por debajo de cero.


Estrategia del oscilador de Chaikin

En esta parte, aprenderemos cómo utilizar el oscilador de Chaikin según su concepto. El objetivo del análisis técnico es aprender a aplicar correctamente las distintas herramientas para tomar decisiones comerciales más fundamentadas. Sin embargo, no debemos olvidar lo importante que es probar a fondo cualquier herramienta antes de utilizarla en una cuenta real. Al fin y al cabo, lo que funciona para otros no tiene por qué funcionar para usted.

  • Estrategia uno: Cruce según el oscilador de Chaikin

Según esta estrategia, recibiremos señales de compra o venta en función del cruce del valor actual del indicador y el nivel cero. Cuando el indicador cruza el nivel cero de abajo hacia arriba, será una señal de compra. Por el contrario, cuando el indicador cae por debajo de cero, será una señal de venta.

Dicho de forma más simple:

Valor actual del indicador > nivel 0 --> señal de compra.

Valor actual del indicador < nivel 0 --> señal de venta.

  • Estrategia dos: Movimiento del oscilador de Chaikin

Según esta estrategia, obtendremos la señal del movimiento de la curva del indicador usando como base los dos últimos valores. Cuando el valor actual del oscilador es mayor que el valor anterior, tenemos una señal de un movimiento alcista. Por el contrario, si el valor actual del oscilador es inferior al valor anterior, tenemos una señal de movimiento bajista.

Dicho de forma más simple:

Valor actual del oscilador > valor anterior --> movimiento ascendente.

Valor actual del oscilador < valor anterior --> movimiento descendente.

  • Estrategia tres: Oscilador de Chaikin - tendencia alcista

En esta estrategia, durante una tendencia alcista, determinaremos si se ha formado un fuerte movimiento alcista en el mercado o si se trata de una divergencia bajista. Para ello, se miden los valores del máximo actual y el máximo anterior, así como el indicador de oscilación actual y el anterior. Si el máximo actual es mayor que el máximo anterior y el valor actual del oscilador de Chaikin es mayor que su valor anterior, esto será una señal de un fuerte movimiento alcista durante una tendencia alcista. Si el máximo actual es mayor que el máximo anterior y el valor actual del oscilador de Chaikin es menor que su valor anterior, será una señal de divergencia bajista.

Máximo actual > máximo anterior y lectura del oscilador actual > lectura anterior --> Fuerte movimiento alcista durante una tendencia alcista.

Máximo actual > máximo anterior y oscilador actual < máximo anterior --> divergencia bajista.

  • Estrategia tres: Oscilador de Chaikin - tendencia bajista

En esta estrategia, durante una tendencia bajista, determinaremos si se ha formado un fuerte movimiento bajista en el mercado o si se trata de una divergencia alcista. Esto se logra midiendo los valores del mínimo actual y el mínimo anterior, así como el indicador de oscilación actual y el anterior. Cuando el mínimo actual es inferior al mínimo anterior y el valor del oscilador actual es inferior a la lectura anterior, esto indicará que la tendencia bajista durante una tendencia descendente es fuerte. Si el mínimo actual es menor que el máximo anterior y el valor actual del oscilador de Chaikin es mayor que su valor anterior, será una señal de divergencia alcista.

Mínimo actual < mínimo anterior y Chaikin actual < lectura anterior --> Fuerte movimiento bajista durante la tendencia bajista.

Mínimo actual < mínimo anterior y oscilador actual > lectura anterior --> divergencia alcista.


Esquema de estrategias del oscilador de Chaikin

En esta sección, desarrollaremos paso a paso un plan para crear un sistema comercial basado en cada una de las estrategias analizadas. A nuestro juicio, es un paso esencial para dotar de unidad a todas nuestras ideas. Procedamos.

  • Estrategia uno: Cruce según el oscilador de Chaikin

Un sistema comercial que use esta estrategia debe retornar un determinado comentario en el gráfico al cumplirse una determinada condición. El sistema comercial deberá comprobar en cada tick el valor del oscilador de Chaikin, y cuando este sea superior a cero, el sistema comercial mostrará un comentario en el gráfico con una señal de compra y el valor actual del oscilador (cada comentario será una línea independiente). De lo contrario, el sistema comercial deberá retornar un comentario con una señal de venta y el valor actual del oscilador de Chaikin cuando el valor del oscilador de Chaikin cae por debajo de cero.

El código completo de esta estrategia tendrá el aspecto siguiente:

Esquema de la estrategia de cruce del oscilador de Chaikin

  • Estrategia dos: Movimiento del oscilador de Chaikin

Esta estrategia requiere que el sistema comercial compruebe dos valores en cada tick y decida cuál es mayor. Estos dos valores son el valor del oscilador de Chaykin actual y el anterior. Si el valor actual es mayor que el valor anterior, el sistema comercial deberá retornar un comentario indicando que el oscilador está aumentando, así como el valor actual y el anterior del indicador (cada uno en una línea distinta). Si el valor actual es inferior al anterior, el sistema comercial deberá retornar un comentario indicando que el oscilador está disminuyendo, así como el valor actual y el anterior del indicador (cada uno en una línea distinta).

La siguiente figura muestra el esquema de la estrategia:

Esquema de la estrategia de movimiento del oscilador de Chaikin

  • Estrategia tres: Oscilador de Chaikin - tendencia alcista

Un sistema comercial basado en esta estrategia, comprobará cuatro valores en cada tick: el máximo actual y el anterior, así como el valor actual y el anterior del oscilador de Chaykin. El sistema comercial deberá comprobar estos valores y decidir cuál de los máximos y cuál de los valores del indicador es mayor. Si el máximo actual es mayor que el máximo anterior y el valor actual de Chaikin es mayor que el valor anterior del indicador, el sistema comercial mostrará un fuerte movimiento alcista durante una tendencia alcista en el gráfico. Además, en líneas aparte del comentario del gráfico, se mostrarán los máximos y los valores del indicador. Y si el máximo actual es mayor que el máximo anterior y el valor actual de Chaikin es menor que el valor anterior del indicador, el sistema comercial mostrará en el gráfico un comentario sobre una divergencia bajista formada. De nuevo, en líneas aparte del comentario del gráfico, se mostrarán los máximos y los valores del indicador.

A continuación, le mostramos el esquema de esta estrategia:

Esquema del sistema comercial del oscilador de Chaykin

  • Estrategia tres: Oscilador de Chaikin - tendencia bajista

Sobre la base de esta estrategia, se creará un sistema comercial que comprobará continuamente cuatro valores en cada tick: el mínimo actual y anterior, así como los valores actual y anterior del oscilador de Chaykin. Así, se determinará cuál de los dos mínimos es más bajo, y cuál de los indicadores es más bajo. Si los dos valores actuales son inferiores a los valores anteriores correspondientes, el sistema mostrará un comentario en el gráfico indicando un fuerte movimiento bajista durante una tendencia bajista, además de líneas aparte para los cuatro valores que se están comprobando. La estrategia también puede emitir una señal de divergencia alcista si se ha formado un mínimo inferior y el oscilador Chaikin ha subido. A continuación, se mostrará el comentario correspondiente en el gráfico, indicando que se ha formado una divergencia alcista, así como los cuatro valores comprobados.

El código completo de esta estrategia tendrá el aspecto siguiente:

Esquema de las estrategias del Oscilador de Chaikin en una tendencia bajista

El oscilador de Chaikin aumenta

Sistema comercial del oscilador de Chaikin

En esta parte, aprenderemos a convertir las estrategias analizadas en sistemas de funcionamiento automático. Para ello, escribiremos el código en MQL5. Empezaremos desarrollando un sencillo programa que mostrará un comentario en el gráfico con el valor actual de las líneas del oscilador de Chaikin. Esta será la base de todas las futuras estrategias. Veremos paso a paso lo que incluye el código.

  • Asimismo, crearemos un array usando una función double que representará los valores de coma flotante. El tipo double es uno de los tipos de datos fraccionarios.
double chaiArray[];
  • Clasificaremos el array de precios creado partiendo de los datos actuales, para ello, utilizaremos la función ArraySetAsSeries: esta retornará true en caso de éxito o false en caso de fallo (bool). Parámetros de la función ArraySetAsSeries:
    • Array[]
    • Bandera
ArraySetAsSeries(chaiArray,true);
  • Creamos la variable de tipo entero chaiDef para el indicador usando la función iChaikin. Esta función retorna el manejador del indicador Chaikin Oscillator. Los parámetros de esta función serán:
    • symbol — nombre del símbolo; si especificamos "_Symbol", el indicador se calculará según el símbolo del gráfico actual.
    • period — marco temporal para el cálculo; el valor "_Period" señalará que el indicador se calculará en el marco temporal actual.
    • fast_ma_period — periodo de la media móvil rápida, por defecto utilizaremos 3.
    • slow_ma_period — periodo de la media móvil, usaremos un valor por defecto de 10.
    • ma_method — tipo de suavizado de la media móvil; usaremos el simple (MODE_SMA).
    • applied_volume — tipo de volúmenes utilizados para calcular el indicador. Usaremos los volúmenes de tick (VOLUME_TICK).
int chaiDef = iChaikin(_Symbol,_Period,3,10,MODE_EMA,VOLUME_TICK);
  • Copiaremos los datos de precio en el array StdDev, usando la función CopyBuffer. Esta retorna la cantidad de datos copiados, o -1 en caso de error. Los parámetros de esta función serán:
    • indicator_handle — manejador del indicador, aquí es "chaiDef".
    • buffer_num — número del búfer de indicador, lo estableceremos en 0.
    • start_pos — indica la posición del comienzo del cálculo; especificaremos 0.
    • count — cantidad de datos para copiar; indicaremos 3.
    • buffer[] — array objetivo a copiar, chaiArray.
CopyBuffer(chaiDef,0,0,3,chaiArray);
  • Obtenemos el valor de StdDev usando la función de tipo double NormalizeDouble. Para ello, crearemos la variable de tipo double StdDevVal. Los parámetros de la función Normalizedouble son:
    • value — número normalizable, indicaremos "chaiArray[0]"; 0 significará que retornamos el valor actual.
    • digits — número de dígitos decimales; establecemos 6.
int chaiVal = NormalizeDouble(chaiArray[0],6);
  • Con la ayuda de la función Comment, mostraremos un comentario con el valor del oscilador de Chaikin.
Comment("Chaikin Oscillator Value is ",chaiVal);

A continuación, le mostramos el código completo para crear la estrategia mencionada:

//+------------------------------------------------------------------+
//|                                    Simple Chaikin Oscillator.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   double chaiArray[];

   ArraySetAsSeries(chaiArray,true);

   int chaiDef = iChaikin(_Symbol,_Period,3,10,MODE_EMA,VOLUME_TICK);

   CopyBuffer(chaiDef,0,0,3,chaiArray);

   int chaiVal = NormalizeDouble(chaiArray[0],6);

   Comment("Chaikin Oscillator Value is ",chaiVal);

  }
//+------------------------------------------------------------------+

Después de realizar la compilación, el asesor aparecerá en la ventana del Navegador en MetaTrader 5:

Navegador

Para iniciar el asesor en la plataforma, arrastraremos el programa desde el Navegador hasta el gráfico, y se abrirá la siguiente ventana:

Sistema de Chaikin sencillo en el Navegador

Pulsamos OK y el programa (asesor) se iniciará en el gráfico como se muestra en la figura siguiente:

Sistema de Chaikin sencillo en el gráfico

Como podemos ver, ha aparecido una indicación en la esquina superior derecha del gráfico señalando que el asesor está funcionando en el gráfico. Si el asesor se ha iniciado y está funcionando, la información debería aparecer en el gráfico.

Señal del oscilador de Chaikin

En la esquina superior izquierda del gráfico aparecerá un comentario con el valor del oscilador de Chaikin. También podremos comprobar que se trata del mismo valor que muestra el indicador incorporado en MetaTrader 5. Para ello, ejecutaremos el asesor creado y el indicador estándar en el gráfico. Al hacerlo, ambos programas mostrarán los mismos valores, como vemos en el ejemplo de la siguiente captura de pantalla:

Señales coincidentes del indicador y el asesor experto

En la esquina derecha del gráfico se encontrará la indicación de que el asesor está vinculado al gráfico, y en la esquina izquierda, los valores generados por el asesor: estos valores coincidirán con los valores del propio indicador en la ventana adicional.

  • Estrategia uno: Cruce según el oscilador de Chaikin

El código completo del sistema comercial que opera según esta estrategia se verá así:

//+------------------------------------------------------------------+
//|                                 Chaikin Oscillator Crossover.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   double chaiArray[];

   ArraySetAsSeries(chaiArray,true);

   int chaiDef = iChaikin(_Symbol,_Period,3,10,MODE_EMA,VOLUME_TICK);

   CopyBuffer(chaiDef,0,0,3,chaiArray);

   int chaiVal = NormalizeDouble(chaiArray[0],6);
   
   if(chaiVal>0)
   {
   Comment("Buy signal","\n","Chaikin Oscillator Value is ",chaiVal);
   }

   if(chaiVal<0)
   {
   Comment("Sell signal","\n","Chaikin Oscillator Value is ",chaiVal);
   }

  }
//+------------------------------------------------------------------+

Diferencias en este código:

Condiciones de cruce del indicador Chaikin Oscillator:

Señal de compra:

   if(chaiVal>0)
   {
   Comment("Buy signal","\n","Chaikin Oscillator Value is ",chaiVal);
   }

Señal de venta:

   if(chaiVal<0)
   {
   Comment("Sell signal","\n","Chaikin Oscillator Value is ",chaiVal);
   }

Después de realizar la compilación, el asesor experto aparecerá en la ventana del Navegador en MetaTrader 5:

Chaikin en el Navegador 1

Arrastramos nuestro programa desde el Navegador al gráfico y lo soltamos. Se abrirá una ventana así:

Ventana de la estrategia según el cruce de Chaikin Oscillator

Pulsamos OK y el programa (asesor) se iniciará en el gráfico como se muestra en la figura siguiente:

Asesor según el cruce de Chaikin Oscillator en el Gráfico

Como podemos ver, ha aparecido una indicación en la esquina superior derecha del gráfico señalando que el asesor está funcionando en el gráfico. El asesor está funcionando y ha comenzado a generar señales. A continuación, le mostramos un ejemplo de las mismas.

Señal de compra:

Estrategia de cruce de Chaikin Oscillator - señal de compra

En la esquina superior izquierda del gráfico, podemos ver que la señal de compra se ha generado cuando el valor del oscilador de Chaikin ha cruzado el nivel cero de abajo hacia arriba.

Señal de venta:

Estrategia de cruce de Chaikin Oscillator - señal de venta

En la esquina superior izquierda del gráfico, podemos ver que se ha formado una señal de venta cuando el valor del indicador ha descendido por debajo de cero.

  • Estrategia dos: Movimiento del oscilador de Chaikin

El código completo del sistema comercial que opera según esta estrategia tiene el aspecto siguiente:

//+------------------------------------------------------------------+
//|                                  Chaikin Oscillator Movement.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   double chaiArray[];

   ArraySetAsSeries(chaiArray,true);

   int chaiDef = iChaikin(_Symbol,_Period,3,10,MODE_EMA,VOLUME_TICK);

   CopyBuffer(chaiDef,0,0,3,chaiArray);

   int chaiCurrentVal = NormalizeDouble(chaiArray[0],6);
   int chaiPrevVal = NormalizeDouble(chaiArray[1],6);

   if(chaiCurrentVal>chaiPrevVal)
     {
      Comment("Chaikin Oscillator is rising","\n",
              "Chaikin Oscillator Cuurent Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

   if(chaiCurrentVal<chaiPrevVal)
     {
      Comment("Chaikin Oscillator is declining","\n",
              "Chaikin Oscillator Cuurent Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

  }
//+------------------------------------------------------------------+

Cuáles son las diferencias en este código:

Se analiza el valor actual y el anterior del indicador.

   int chaiCurrentVal = NormalizeDouble(chaiArray[0],6);
   int chaiPrevVal = NormalizeDouble(chaiArray[1],6);

Las condiciones de la estrategia.

Durante el crecimiento

   if(chaiCurrentVal>chaiPrevVal)
     {
      Comment("Chaikin Oscillator is rising","\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

Durante la caída

   if(chaiCurrentVal<chaiPrevVal)
     {
      Comment("Chaikin Oscillator is declining","\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

Después compilamos el código del asesor, y este aparecerá en la ventana del Navegador, en el terminal de MetaTrader 5:

 Chaikin Oscillator en el Navegador 2

Clicamos dos veces en el archivo o lo arrastramos y soltamos en el gráfico. Después de eso, la ventana del asesor aparecerá nuevamente:

Ventana de la estrategia de Chaikin Oscillator Movement

Pulsamos OK y el programa (asesor) se iniciará en el gráfico como se muestra en la figura siguiente:

Estrategia de Chaikin Oscillator Movement en el gráfico

Ejemplos de señales generadas al poner a prueba esta estrategia.

Si el indicador aumenta + los valores actuales en la ventana de datos:

Chaikin Oscillator Movement - señal sobre valores ascendentes del indicador - valor actual

Si el indicador aumenta + valores anteriores en la ventana de datos:

Chaikin Oscillator Movement - señal sobre valores ascendentes del indicador - valor anterior

En la captura de pantalla se ve cómo se muestra un comentario de tres líneas en la esquina superior izquierda del gráfico:

  • Chaikin Oscillator is rising (el oscilador aumenta)
  • Valor actual de Chaikin Oscillator
  • Valor anterior de Chaikin Oscillator

Vamos a considerar otro escenario en el que el indicador disminuye

Chaikin Oscillator Movement - señal sobre valores descendentes del indicador - valor actual

También disminuye, pero la ventana de datos muestra el valor anterior

Chaikin Oscillator Movement - señal sobre valores descendentes del indicador - valor anterior

Nuevamente, podemos ver que aparece un comentario en la esquina superior izquierda del gráfico:

Chaikin Oscillator is declining.

Chaikin Oscillator current value.

Chaikin Oscillator previous value.

  • Estrategia tres: Oscilador de Chaikin - tendencia alcista

El código completo del sistema comercial que opera según esta estrategia tiene el aspecto siguiente:

//+------------------------------------------------------------------+
//|                                 Chaikin Oscillator - Uptrend.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   double chaiArray[];
   MqlRates priceArray[];

   ArraySetAsSeries(chaiArray,true);
   int Data=CopyRates(_Symbol,_Period,0,3,priceArray);

   int chaiDef = iChaikin(_Symbol,_Period,3,10,MODE_EMA,VOLUME_TICK);

   CopyBuffer(chaiDef,0,0,3,chaiArray);

   int chaiCurrentVal = NormalizeDouble(chaiArray[0],6);
   int chaiPrevVal = NormalizeDouble(chaiArray[1],6);


   double currentHighVal=NormalizeDouble(priceArray[2].high,6);
   double prevHighVal=NormalizeDouble(priceArray[1].high,6);

   if(currentHighVal>prevHighVal&&chaiCurrentVal>chaiPrevVal)
     {
      Comment("Strong Up Move During The Uptrend","\n",
              "Current High Value is: ",currentHighVal,"\n",
              "Previous High Value is: ",prevHighVal,"\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }


   if(currentHighVal>prevHighVal&&chaiCurrentVal<chaiPrevVal)
     {
      Comment("Bearish Divergence","\n",
              "Current High Value is: ",currentHighVal,"\n",
              "Previous High Value is: ",prevHighVal,"\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

  }
//+------------------------------------------------------------------+

Cuáles son las diferencias en este código:

Creamos dos arrays: uno para ChaiArray y un array de precios usando la función MqlRates, que almacenará información sobre los precios, los volúmenes y el spread.

ArraySetAsSeries(chaiArray,true);
int Data=CopyRates(_Symbol,_Period,0,3,priceArray);

A continuación, determinamos los valores actual y anterior del oscilador de Chaikin.

int chaiCurrentVal = NormalizeDouble(chaiArray[0],6);
int chaiPrevVal = NormalizeDouble(chaiArray[1],6);

Determinamos los valores de los máximos actuales y anteriores.

double currentHighVal=NormalizeDouble(priceArray[2].high,6);
double prevHighVal=NormalizeDouble(priceArray[1].high,6);

Las condiciones de esta estrategia son:

En caso de un movimiento fuerte durante una tendencia alcista:

   if(currentHighVal>prevHighVal&&chaiCurrentVal>chaiPrevVal)
     {
      Comment("Strong Up Move During The Uptrend","\n",
              "Current High Value is: ",currentHighVal,"\n",
              "Previous High Value is: ",prevHighVal,"\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

En caso de una divergencia bajista:

   if(currentHighVal>prevHighVal&&chaiCurrentVal<chaiPrevVal)
     {
      Comment("Bearish Divergence","\n",
              "Current High Value is: ",currentHighVal,"\n",
              "Previous High Value is: ",prevHighVal,"\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

Después de realizar la compilación, el asesor experto aparecerá en la ventana del Navegador en MetaTrader 5:

 Chaikin Oscillator en el Navegador 3

Arrastramos nuestro programa desde el Navegador al gráfico y lo soltamos. Se abrirá una ventana así:

Ventana de la estrategia según Chaikin Oscillator - tendencia alcista

Pulsamos OK y el programa (asesor) se iniciará en el gráfico como se muestra en la figura siguiente:

Sistema de Chaikin Oscillator - tendencia alcista - en el gráfico

Ejemplos de señales generadas al poner a prueba esta estrategia.

En caso de movimiento fuerte + datos actuales:

Chaikin Oscillator - tendencia alcista - fuerte - valores actuales

En caso de movimiento fuerte + datos anteriores:

Chaikin Oscillator - tendencia alcista - fuerte - valores anteriores

Ahora podemos ver que el comentario del gráfico ya consta de cinco líneas:

  •  A strong up move during the uptrend (un fuerte movimiento alcista durante la tendencia alcista)
  • Máximo actual
  • Máximo anterior
  • Valor actual de Chaikin
  • Valor anterior Chaikin

Hay otra variante para la señal de esta estrategia: la divergencia bajista. Aquí tenemos algunos ejemplos de estas señales:

Chaikin Oscillator - tendencia alcista - divergencia - datos actuales

Divergencia bajista y datos anteriores

Chaikin Oscillator - tendencia alcista - divergencia - datos anteriores

Nuevamente, hay cinco líneas de comentarios en los gráficos:

Bearish Divergence.

Máximo actual

Máximo anterior

Valor actual de Chaikin

Valor actual de Chaikin

  • Estrategia tres: Oscilador de Chaikin - tendencia bajista

El código completo del sistema comercial que opera según esta estrategia tiene el aspecto siguiente:

//+------------------------------------------------------------------+
//|                               Chaikin Oscillator - Downtrend.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   double chaiArray[];
   MqlRates priceArray[];

   ArraySetAsSeries(chaiArray,true);
   int Data=CopyRates(_Symbol,_Period,0,3,priceArray);

   int chaiDef = iChaikin(_Symbol,_Period,3,10,MODE_EMA,VOLUME_TICK);

   CopyBuffer(chaiDef,0,0,3,chaiArray);

   int chaiCurrentVal = NormalizeDouble(chaiArray[0],6);
   int chaiPrevVal = NormalizeDouble(chaiArray[1],6);


   double currentLowVal=NormalizeDouble(priceArray[2].low,6);
   double prevLowVal=NormalizeDouble(priceArray[1].low,6);

   if(currentLowVal<prevLowVal&&chaiCurrentVal<chaiPrevVal)
     {
      Comment("Strong Down Move During The Downtrend","\n",
              "Current Low Value is: ",currentLowVal,"\n",
              "Previous Low Value is: ",prevLowVal,"\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }


   if(currentLowVal<prevLowVal&&chaiCurrentVal>chaiPrevVal)
     {
      Comment("Bullish Divergence","\n",
              "Current Low Value is: ",currentLowVal,"\n",
              "Previous Low Value is: ",prevLowVal,"\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

  }
//+------------------------------------------------------------------+

Este código se diferencia en cuanto a las condiciones de la estrategia.

Si hay un fuerte movimiento bajista durante una tendencia bajista,

   if(currentLowVal<prevLowVal&&chaiCurrentVal<chaiPrevVal)
     {
      Comment("Strong Down Move During The Downtrend","\n",
              "Current Low Value is: ",currentLowVal,"\n",
              "Previous Low Value is: ",prevLowVal,"\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

En caso de una divergencia alcista:

   if(currentLowVal<prevLowVal&&chaiCurrentVal>chaiPrevVal)
     {
      Comment("Bullish Divergence","\n",
              "Current Low Value is: ",currentLowVal,"\n",
              "Previous Low Value is: ",prevLowVal,"\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

Después de realizar la compilación, el asesor experto aparecerá en la ventana del Navegador en MetaTrader 5:

 Chaikin Oscillator en el Navegador 4

Clicamos dos veces en el archivo o lo arrastramos y soltamos en el gráfico. Después de eso, la ventana del asesor aparecerá nuevamente:

Estrategia según el oscilador de Chaikin en tendencia bajista - ventana

Pulsamos OK y el programa (asesor) se iniciará en el gráfico como se muestra en la figura siguiente:

Estrategia según el oscilador de Chaikin en tendencia bajista en el gráfico

La siguiente captura de pantalla nos muestra un ejemplo con las señales generadas al realizar pruebas basadas en esta estrategia.

En caso de un fuerte movimiento bajista durante una tendencia bajista + datos actuales,

Chaikin Oscillator - tendencia bajista - señal fuerte - datos actuales

Fuerte movimiento bajista + datos anteriores

Chaikin Oscillator - tendencia bajista - señal fuerte - datos anteriores

Nuevamente, hay cinco líneas de comentarios en los gráficos:

  • Strong down move during the downtrend (fuerte movimiento bajista durante la tendencia bajista)
  • Mínimo actual
  • Mínimo anterior
  • Valor actual de Chaikin
  • Valor anterior Chaikin

Hay otra variante para la señal de esta estrategia: la divergencia alcista. Aquí tenemos algunos ejemplos de estas señales:

Divergencia alcista y datos actuales

Chaikin Oscillator - tendencia bajista - divergencia - datos actuales

Divergencia alcista y datos anteriores

Chaikin Oscillator - tendencia bajista - divergencia - datos anteriores

 

Nuevamente, hay cinco líneas de comentarios en los gráficos:

  • Bullish divergence
  • Mínimo actual
  • Mínimo anterior
  • Valor actual de Chaikin
  • Valor anterior Chaikin


Conclusión

Así, en este artículo hemos estudiado con detalle el indicador «Oscilador de Chaikin». Además, hemos aprendido qué es, qué mide y cómo se puede calcular manualmente. Asimismo, hemos visto cómo usarlo con estrategias sencillas basadas en su concepto básico. También hemos estudiado las siguientes estrategias:

  • Cruce según Chaikin Oscillator: las señales de compra y venta se generan cuando el indicador cruza el nivel cero.
  • Movimiento según Chaikin Oscillator: se analizan los valores del indicador y se concluye si el indicador está aumentando o disminuyendo.
  • Oscilador Chaikin - Tendencia alcista: confirmación de una señal fuerte durante una tendencia alcista o divergencia bajista.
  • Oscilador Chaikin - Tendencia alcista: confirmación de una señal fuerte durante una tendencia bajista o divergencia alcista.

En este apartado, hemos desarrollado un plan paso a paso para crear un sistema comercial basado en cada una de las estrategias analizadas. Este es un paso esencial para unificar todas nuestras ideas. Después de eso, hemos visto el desarrollo de varios sistemas comerciales: hemos creado un asesor en MQL5 para cada estrategia, hemos obtenido un programa que puede funcionar en la plataforma comercial MetaTrader 5, y también hemos visto ejemplos de las señales generadas.

Una vez más, resulta vital que el lector pruebe a fondo los materiales antes de aplicarlos a una cuenta real. No existen estrategias que se adapten a todo el mundo. Trate de poner en práctica lo que ha aprendido e intente programar por su cuenta, ya que la práctica supone un factor de vital importancia en cualquier proceso de aprendizaje. Si le ha gustado este artículo y lo ha encontrado útil, lea los artículos anteriores de la misma serie para aprender a desarrollar un sistema comercial basado en los indicadores técnicos más populares.

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

Aprendiendo a diseñar un sistema de trading con Force Index Aprendiendo a diseñar un sistema de trading con Force Index
Aquí tenemos un nuevo artículo de nuestra serie destinada a la creación de sistemas comerciales basados en indicadores técnicos populares. En esta ocasión, analizaremos el indicador Force Index y aprenderemos a crear sistemas comerciales basados en él.
Redes neuronales: así de sencillo (Parte 19): Reglas asociativas usando MQL5 Redes neuronales: así de sencillo (Parte 19): Reglas asociativas usando MQL5
Continuamos con el tema de la búsqueda de reglas asociativas. En el artículo anterior, vimos los aspectos teóricos de este tipo de problemas. En el presente artículo, mostraremos la implementación del método FP-Growth usando MQL5. Y también pondremos a prueba nuestra aplicación con datos reales.
Indicador CCI. Modernización y nuevas posibilidades Indicador CCI. Modernización y nuevas posibilidades
En este artículo, analizaremos la posibilidad de modernizar el indicador CCI. Además, presentaremos un ejemplo de modificación de este indicador.
DoEasy. Elementos de control (Parte 9): Reorganizando los métodos de los objetos WinForms, los controles "RadioButton" y "Button" DoEasy. Elementos de control (Parte 9): Reorganizando los métodos de los objetos WinForms, los controles "RadioButton" y "Button"
En este artículo, ordenaremos los nombres de las clases de objeto WinForms y crearemos los objetos WinForms Button y RadioButton.