English Русский 中文 Deutsch 日本語 Português
preview
Aprendiendo a diseñar un sistema de trading con MFI

Aprendiendo a diseñar un sistema de trading con MFI

MetaTrader 5Trading | 12 agosto 2022, 08:41
619 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Introducción

Este artículo es la continuación de una serie en la que aprendemos cómo crear sistemas comerciales simples basados en los indicadores técnicos más populares. Un objetivo más amplio sería aprender a programar en MQL5. En este nuevo artículo, veremos un nuevo indicador técnico, el índice de flujo de dinero o MFI. Estudiaremos este indicador con todo n detalle y aprenderemos a escribir sistemas comerciales simples basados en su concepto. Como en artículos anteriores, dividiremos el trabajo sobre el indicador en varias secciones:

  1. Definición del índice de flujo de dinero MFI
  2. Estrategia del indicador MFI
  3. Esquema de la estrategia del indicador MFI
  4. Sistema comercial del indicador MFI
  5. Conclusión

Si ha leído los otros artículos de esta serie, habrá notado que la información aquí se organiza de la misma manera. En los temas que ya nos son familiares, analizaremos nueva información, y también nuevos códigos basados en estrategias de indicadores. El objetivo principal es aprender nuevos conceptos comerciales y la codificación en MQL5. Aprenderemos qué es el indicador MFI, qué mide y cómo podemos calcularlo manualmente. Luego consideraremos un ejemplo de cálculo del indicador con un conjunto de datos. Por supuesto, estos son solo los conceptos básicos. A continuación, veremos un tema más importante: cómo usar el indicador en estrategias simples, considerando su concepto básico. Después de eso, desarrollaremos un plan paso a paso para cada estrategia analizada, que nos ayudará a desarrollar un sistema comercial basado en ellas. El tema más interesante será aprender a crear un sistema comercial basado en estas estrategias usando MQL5 y luego utilizar dichas estrategias en la plataforma comercial MetaTrader 5.

Para que usted pueda crear más tarde su propio sistema comercial basado en su propia experiencia, le recomendamos que escriba todo el código por sí mismo. No se conforme solo con leer: aplique lo que lea, para así escribir cada código usted mismo. Busque información adicional sobre funciones y conceptos de programación, mejórelos e impleméntelos en la vida cotidiana. No olvide que una de las habilidades más importantes de cualquier programador de éxito, además de la práctica, es la capacidad de encontrar los datos necesarios de forma eficiente. Ambas cosas resultan vitales en cualquier proceso de aprendizaje y desarrollo.

Además, asegúrese de probar cualquier estrategia antes de usarla, sobre todo si proviene de un artículo ilustrativo. No existe una estrategia única para todo el mundo. Lo que puede resultar útil para mí podría no serlo para usted.

En este artículo, escribiremos el código usando el lenguaje de programación MetaQuotes Language (MQL5) y el editor de código MetaEditor integrado en la plataforma MetaTrader 5. Si no sabe cómo descargar o usar el MetaEditor, le recomiendo 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 lo 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. 

Ahora vamos a estudiar un nuevo tema y a expandir el arsenal de herramientas comerciales del que disponemos.


Definición del índice de flujo de dinero MFI

En esta sección, veremos la descripción del índice de flujo de dinero (MFI), y también el concepto de este indicador, que es uno de los indicadores de volumen. Vamos a ver qué es y qué mide, y luego aprenderemos a calcularlo manualmente, analizando para ello un ejemplo.

Como hemos mencionado en artículos anteriores, el volumen es un factor muy importante en el trading. Un análisis exhaustivo de los volúmenes ofrece ventajas en el comercio, ya que el mercado tiene muchos aspectos que pueden afectarle. Cuantos más aspectos entendamos, mejores decisiones podremos tomar, porque el conocimiento adquirido aumenta el peso de la evidencia y nos dirige en una dirección determinada a la hora de tomar una decisión.

Si hay un activo que se compra y vende activamente, ese activo tendrá más valor en comparación con otro que muestre menos transacciones. En los mercados financieros, el volumen es el número de acciones o contratos negociados en un periodo temporal determinado. Una buena señal es un volumen alto cuando el precio rompe la resistencia durante una tendencia alcista, o el apoyo durante una tendencia bajista: esta es una de las señales importantes de la fuerza del movimiento. Lo mejor es que el volumen suba en una tendencia alcista y baje en una corrección en una tendencia alcista. Por el contrario, tenderá a disminuir durante una tendencia bajista y a aumentar durante una corrección. Si el volumen se mueve junto con la tendencia, esto será una de las señales importantes que confirmen la tendencia actual.

El indicador Money Flow Index (MFI) fue creado por Gene Quong y Avrum Soudack. Este es un indicador basado en el volumen que usa el precio y el volumen en el cálculo para medir la presión de los compradores y los vendedores. Las lecturas oscilan entre 0 y 100. Un aumento en el índice MFI significará que existe presión por parte de los compradores y viceversa, una disminución en el índice MFI indicará la presión por parte de los vendedores. El índice puede confirmar una tendencia o advertir sobre reversiones. Si quiere saber más sobre las tendencias, podrá leer la sección "Definición de la tendencia" de mi artículo publicado anteriormente.

El cálculo manual de MFI consta de los pasos siguientes:

  • Cálculo de precio típico (TP) = (Máximo + Mínimo + Cierre)/3
  • Cálculo del flujo de dinero inicial = volumen * TP
  • Definición del movimiento TP: ascendente o descendente. Si TP actual > TP anterior = movimiento ascendente; si TP actual < TP anterior = movimiento descendente.
  • Cálculo 1+MF = flujo inicial MF de periodos crecientes
  • Cálculo 1-MF = flujo inicial MF de periodos decrecientes
  • Cálculo 14 +MF = suma de 14 (1+MF)
  • Cálculo 14 -MF = suma de 14 (1-MF)
  • Cálculo de la relación 14MF = 14+MF / 14-MF
  • Cálculo de MFI = 100-100/(relación 1+MF)

Veamos el cálculo de todos estos pasos usando un ejemplo. Supongamos que tenemos los siguientes datos para un instrumento:

Día Máximo Mínimo Cerrar Volumen
1 55 53 54 12000
2 56 54 55 10000
3 61 59 60 15000
4 67 64 65 20000
5 63 58 60 10000
6 58 52 55 5000
7 64 58 60 7000
8 52 47 50 7500
9 52 48 48 8000
10 50 48 49 5000
11 49 47 48 6000
12 48 47 47 7500
13 50 46 48 9000
14 52 45 47 10000
15 55 46 49 7000
16 53 45 47 7500
17 51 43 46 6000
18 50 42 44 5000
19 50 43 45 15000

Para calcular el indicador MFI usando estos datos como base, realizaremos los siguientes pasos:

Calculamos el Precio Típico (TP) = (Máximo + Mínimo + Cierre)/3

Después de calcularlo, obtendremos los siguientes valores de precio típico:

 Cálculo de MFI 2

Calculamos el flujo de dinero inicial = volumen * TP

Cálculo de MFI 3

Definimos el movimiento de TP: ascendente o descendente.

Cálculo de MFI 4

Encontramos 1+MF = flujo inicial MF de los periodos de crecimiento

Encontramos 1-MF = flujo original de los periodos decrecientes

 Cálculo de MFI 5

Calculamos 14+MF = suma de 14 (1+MF)

14-MF = suma de 14 (1-MF)

Cálculo de MFI 6

Calculamos la relación 14 MF = 14+MF / 14-MF

 Cálculo de MFI 7

Finalmente, calculamos MFI = 100-100/(1+MF ratio)

Cálculo de MFI 8

Estos han sido los pasos para calcular el indicador MFI de forma manual. Por fortuna, no será necesario que haga esto ahora. Simplemente, saber cómo se calcula el indicador nos permitirá comprender mejor el concepto. Y ahora podremos utilizar el indicador listo para usar integrado en MetaTrader 5. Todo lo que necesitamos hacer es seleccionar el indicador deseado de la lista de instrumentos en la plataforma:

En MetaTrader 5, abra el menú "Insertar" --> "Indicadores" --> "Indicadores de volumen" --> Índice de flujo de dinero

Insertando MFI

Una vez que hayamos seleccionado el índice de flujo de dinero, se abrirá la ventana de opciones:

Ventana de parámetros de MFI

1. Periodo de cálculo del indicador.

2. Tipo de volumen (tick o real).

3. Color de la línea MFI.

4. Tipo de línea.

5. Grosor de la línea MFI.

Clique en Aceptar y el indicador MFI se iniciará en el gráfico:

 MFI en el gráfico


Estrategia del indicador MFI

En esta sección, hablaremos sobre cómo podemos usar el indicador MFI en función de los detalles de su cálculo y su concepto. Lo veremos usando el ejemplo de estrategias simples.

  • Estrategia uno: MFI - zonas de sobrecompra y sobreventa

En esta estrategia, determinaremos las zonas de sobrecompra y sobreventa según los valores del indicador. Cuando MFI se acerca al nivel 20, esta será una zona de sobreventa. El nivel 80 será una zona de sobrecompra. Las zonas de sobreventa aumentan el potencial alcista, mientras que las zonas de sobreventa, al contrario, aumentan el potencial bajista.

Entonces, de forma esquemática: 

MFI <= 20 --> Sobreventa

MFI >= 80 --> Sobrecompra

  • Estrategia dos: MFI - tendencia alcista - Buy

Según esta estrategia, esperaremos a que MFI alcance o caiga por debajo del nivel 50; en este momento, se activará una señal de compra. Además, alcanzar el nivel 70 servirá como señal de take-profit. El sentido de esta estrategia reside en que, durante una tendencia alcista, el MFI fluctúa entre los niveles 50 y 70 la mayor parte del tiempo.

De este modo,

MFI <= 50 --> Señal de compra:

MFI >= 70 --> Señal de take-profit:

  • Estrategia tres: MFI - Tendencia bajista - Short

Esta estrategia es la opuesta a la anterior (para una tendencia alcista). Esperamos a que MFI alcance el nivel 50 o suba por encima de él; esta será una señal de venta. Se formará una señal de take-profit cuando MFI caiga por debajo de 30. Resulta que durante una tendencia bajista, los indicadores de MFI fluctúan entre los niveles 50 y 30.

De este modo,

IMF >=50 --> Señal de venta

IMF <= 30 --> Take-profit

  • Estrategia cuatro: IMF - tendencia alcista o divergencia

En esta estrategia, el indicador deberá confirmar el movimiento actual, mostrando si es fuerte o débil. Para ello, compararemos los valores MFI actuales y anteriores, así como el máximo actual y anterior. El indicador deberá confirmar la tendencia o mostrar la presencia de una divergencia. Durante una tendencia alcista, si el MFI actual es mayor que el MFI anterior y el máximo actual es mayor que el máximo anterior, consideraremos que el movimiento es fuerte. Si el MFI actual es menor que el anterior, mientras que el máximo actual es mayor que el máximo anterior, esto indicará una divergencia bajista, ya que el indicador no confirmará el movimiento del precio. Al seguir usándola, podrá cambiar la longitud de los valores comparados para sus estrategias específicas.

De este modo,

MFI actual > MFI anterior y máximo actual > máximo anterior --> movimiento alcista fuerte

MFI actual < MFI anterior y máximo actual > máximo anterior --> divergencia bajista

  • Estrategia cinco: MFI - tendencia bajista o divergencia

Esta estrategia es opuesta a la anterior: el indicador confirma la fuerza de la tendencia bajista o muestra una divergencia basada en la comparación de los valores. En una tendencia bajista, si el MFI actual es menor que el valor anterior y el mínimo actual es menor que el mínimo anterior, el movimiento bajista se considerará fuerte. Si el MFI actual es más alto que el anterior, mientras que el mínimo actual es más bajo que el mínimo anterior, esto indicará una divergencia alcista.

En palabras más simples:

MFI actual < MFI anterior y mínimo actual < mínimo anterior --> movimiento bajista fuerte

MFI actual > MFI anterior y mínimo actual < mínimo anterior --> divergencia alcista


Esquema de la estrategia del indicador MFI

En esta sección, desarrollaremos esquemas para las estrategias analizadas. Los esquemas nos ayudarán a crear sistemas comerciales para cada uno de las estrategias. Pero primero, vamos a desarrollar el esquema del sistema comercial simple que se convertirá en la base para todos los demás. Según esta estrategia, el sistema simplemente mostrará el valor MFI actual como un comentario en el gráfico. Para hacer esto, el asesor deberá verificar el valor de MFI en cada tick y mostrarlo en el gráfico. El esquema de tal sistema será simple:

Esquema de un sistema IMF simple

Ahora vamos a pasar a nuestras estrategias:

  • Estrategia uno: MFI - zonas de sobrecompra y sobreventa

Según esta estrategia, el sistema comercial deberá verificar el valor MFI en cada tick y compararlo con niveles determinados (20 y 80). Luego verificará las condiciones y retornará el resultado deseado. Si el valor MFI es inferior o igual al nivel 20, se retornará una señal de sobreventa y el valor MFI actual como un comentario de varias líneas en el gráfico. Si MFI es mayor o igual al nivel 80, el sistema retornará una señal de sobrecompra y el valor actual de MFI, cada indicador en una línea separada. Si MFI está por encima de 20 y por debajo de 80, solo se retornará el valor MFI actual. El esquema de este sistema comercial tendrá el aspecto siguiente:

Esquema de la estrategia basada en el indicador MFI - sobrecompra y sobreventa

  • Estrategia dos: MFI - tendencia alcista - Buy

Según las condiciones de esta estrategia, el sistema comercial, aparte del valor MFI, deberá comprobar los niveles 50 y 70 en cada tick. Si el valor MFI está por debajo o en el nivel de 50, se retornará una señal de compra. Si MFI está en 70 o por encima, el sistema retornará una señal de take-profit. Este es el aspecto del esquema general:

 Esquema de la estrategia de MFI - Tendencia alcista - Buy

  • Estrategia tres: MFI - Tendencia bajista - Short

Como parte de esta estrategia, el sistema comercial generará señales basadas en la comparación del valor MFI con los niveles 50 y 30. Si el valor MFI está en el nivel 50 o superior, se retornará una señal de venta, y si el MFI es menor o igual a 30, se retornará una señal de take-profit. El esquema de desarrollo se verá así:

Esquema de la estrategia de IMF - Tendencia bajista - Sell

  • Estrategia cuatro: IMF - tendencia alcista o divergencia

El sistema comercial basado en esta estrategia verificará cuatro valores en cada tick (IMF actual, MFI anterior, Máximo actual y Máximo anterior) y generará la señal correspondiente.

MFI actual > MFI anterior y máximo actual > máximo anterior --> señal de movimiento ascendente fuerte

MFI actual < MFI anterior y máximo actual > máximo anterior --> divergencia bajista

El esquema de desarrollo se verá así:

 Esquema de la estrategia de MFI: tendencia alcista o divergencia

 

  • Estrategia cinco: MFI - tendencia bajista o divergencia

Esta estrategia es la opuesta a la anterior. El sistema comercial verificará cuatro valores en cada tick (IMF actual, MFI anterior, Mínimo actual y Mínimo anterior) y generará la señal correspondiente.

MFI actual < MFI anterior y mínimo actual < mínimo anterior --> señal de movimiento bajista fuerte

MFI actual > MFI anterior y mínimo actual < mínimo anterior --> divergencia alcista

El esquema de desarrollo se verá así:

Esquema de la estrategia de MFI - tendencia bajista o divergencia


Sistema comercial del indicador MFI

Vamos a pasar a la parte más interesante: ahora desarrollaremos sistemas comerciales para todas las estrategias analizadas, y también escribiremos un código MQL5 que se podrá ejecutar en MetaTrader 5. Empezaremos por un programa simple que mostrará un comentario en el gráfico con el valor actual del índice MFI.

  • Creamos un array para los valores MFI usando la función double, que se utiliza para valores de punto flotante.
double MFIArray[];
  • Luego, clasificamos el array de precios creado a partir de los datos actuales, para ello, usaremos la función ArraySetAsSeries: esta retornará true en caso de éxito o false en caso de fallo (bool) (parámetros array[] y flag).
ArraySetAsSeries(MFIArray,true);
  • Definimos MFI usando la función iMFI, para ello, primero hemos creado la variable entera MFIDef. La función iMFI retornará el identificador del indicador MFI, los parámetros de su símbolo, el periodo, el periodo de la media móvil y el tipo de volumen).
int MFIDef=iMFI(_Symbol,_Period,24,VOLUME_TICK);
  • Rellenamos la matriz usando la función CopyBuffer con los datos del indicador MFI.
CopyBuffer(MFIDef,0,0,3,MFIArray);
  • Calculamos el valor actual de MFI usando la función NormalizeDouble, que retornará un valor double. Para lograrlo, hemos creado la variable double MFIValue.
double MFIValue=NormalizeDouble(MFIArray[0],5);
  • Mostramos la señal generada en el gráfico usando la función Comment:
Comment("MFI Value is: ",MFIValue);

El código completo de este sistema será:

//+------------------------------------------------------------------+
//|                                                   Simple MFI.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()
  {
//Create an array for MFI
   double MFIArray[];

//sorting the array from the current data
   ArraySetAsSeries(MFIArray,true);

//defining MFI
   int MFIDef=iMFI(_Symbol,_Period,24,VOLUME_TICK);

//filling the array
   CopyBuffer(MFIDef,0,0,3,MFIArray);

//calculating current MFI value
   double MFIValue=NormalizeDouble(MFIArray[0],5);

//creating a comment with MFI value
   Comment("MFI Value is: ",MFIValue);
  }
//+------------------------------------------------------------------+

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

MFI en el Navegador 1

Clique dos veces en el archivo o arrástrelo y suéltelo en el gráfico, y aparecerá la siguiente ventana:

Ventana de estrategia de MFI simple

Clique en Aceptar y el asesor se ejecutará en el gráfico:

Estrategia de MFI simple en el gráfico

Ejemplos de señales generadas a partir de esta estrategia.

Señal de la estrategia de MFI

Si desea asegurarse de que el asesor generará exactamente el mismo valor que el indicador MFI original, podrá ejecutar el indicador y el asesor al mismo tiempo.

Estrategia MFI simple - señales idénticas

  • Estrategia uno: MFI - zonas de sobrecompra y sobreventa

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

//+------------------------------------------------------------------+
//|                                                  MFI - OB&OS.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()
  {
   //Create an array for MFI
   double MFIArray[];
   
   //sorting the array from the current data
   ArraySetAsSeries(MFIArray,true);
   
   //defining MFI
   int MFIDef=iMFI(_Symbol,_Period,24,VOLUME_TICK);
   
   //filling the array
   CopyBuffer(MFIDef,0,0,3,MFIArray);
   
   //calculating current MFI value
   double MFIValue=NormalizeDouble(MFIArray[0],5);
   
   
   //Conditions of OS&OS
   //OS
   if(MFIValue<=20)
   {
   Comment("Oversold","\n","MFI value is : ",MFIValue);
   }
   
   //OB
   if(MFIValue>=80)
   {
   Comment("Overbought","\n","MFI value is : ",MFIValue);
   }
   
   //no signal
   if(MFIValue>20 && MFIValue<80 )
   {
   Comment("MFI value is : ",MFIValue);
   }   
  }
//+------------------------------------------------------------------+

Qué ha cambiado en el código con respecto al anterior:

Hemos añadido las condiciones de sobreventa y sobrecompra:
   //Conditions of OS&OS
   //OS
   if(MFIValue<=20)
   {
   Comment("Oversold","\n","MFI value is : ",MFIValue);
   }
   
   //OB
   if(MFIValue>=80)
   {
   Comment("Overbought","\n","MFI value is : ",MFIValue);
   }
   
   //no signal
   if(MFIValue>20 && MFIValue<80 )
   {
   Comment("MFI value is : ",MFIValue);
   } 

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

MFI en el Navegador 2

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

 Ventana de la estrategia de MFI - OB_OS

Clique en Aceptar y el asesor se ejecutará en el gráfico:

 MFI - OB_OS en el gráfico

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

Señal de sobreventa:

Estrategia MFI - OB_OS - sobreventa

Señal de sobrecompra:

Estrategia de MFI - OB_OS - sobrecompra

Sin señal

MFI simple - OB_OS - sin señal

  • Estrategia dos: MFI - tendencia alcista - Buy

A continuación, le mostramos el código para esta estrategia:

//+------------------------------------------------------------------+
//|                                          MFI - Uptrend - Buy.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()
  {
   //Create an array for MFI
   double MFIArray[];
   
   //sorting the array from the current data
   ArraySetAsSeries(MFIArray,true);
   
   //defining MFI
   int MFIDef=iMFI(_Symbol,_Period,24,VOLUME_TICK);
   
   //filling the array
   CopyBuffer(MFIDef,0,0,3,MFIArray);
   
   //calculating current MFI value
   double MFIValue=NormalizeDouble(MFIArray[0],5);
   
   
   //Buy signal
   if(MFIValue<=50)
   {
   Comment("Buy signal");
   }
   
   //TP
   if(MFIValue>=70)
   {
   Comment("Take profit");
   }
  }
//+------------------------------------------------------------------+

Diferencias en el código:

Condiciones de la señal

Señal de compra:

//Buy signal
   if(MFIValue<=50)
   {
   Comment("Buy signal");
   }

Señal de take-profit:

//TP
   if(MFIValue>=70)
     {
      Comment("Take profit");
     }

Después de realizar la compilación, el archivo generado aparecerá en la ventana del Navegador:

MFI en el Navegador 3

Al seleccionar un asesor, se abrirá la siguiente ventana:

Ventana de la estrategia de MFI - Tendencia alcista - Compra

Clique en Aceptar y el asesor se ejecutará en el gráfico:

 Sistema comercial de MFI - Tendencia alcista - Compra en el gráfico

Ejemplos de señales generadas a partir de esta estrategia.

Señal de compra:

 Estrategia de MFI - Tendencia alcista - señal de compra

Señal de take-profit:

Estrategia de MFI - Uptrend - señal de take-profit

  • Estrategia tres: MFI - Tendencia bajista - Short

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

//+------------------------------------------------------------------+
//|                                      MFI - Downtrend - Short.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()
  {
//Create an array for MFI
   double MFIArray[];

//sorting the array from the current data
   ArraySetAsSeries(MFIArray,true);

//defining MFI
   int MFIDef=iMFI(_Symbol,_Period,24,VOLUME_TICK);

//filling the array
   CopyBuffer(MFIDef,0,0,3,MFIArray);

//calculating current MFI value
   double MFIValue=NormalizeDouble(MFIArray[0],5);


//Sell signal
   if(MFIValue>=50)
     {
      Comment("Sell signal");
     }

//TP
   if(MFIValue<=30)
     {
      Comment("Take profit");
     }
  }
//+------------------------------------------------------------------+

Qué ha cambiado en el código con respecto al anterior:

Condiciones de la señal

Señal para Sell:

//Sell signal
   if(MFIValue>=50)
     {
      Comment("Sell signal");
     }

Señal de take-profit:

//TP
   if(MFIValue<=30)
     {
      Comment("Take profit");
     }

Después de realizar la compilación, podremos iniciar clicando dos veces en el programa en el Navegador:


Después de eso, se abrirá la ventana de parámetros del asesor experto:

 Ventana de la estrategia de MFI - Downtrend - Short

Clique en Aceptar y el asesor se ejecutará en el gráfico:

Ventana de la estrategia de MFI - Downtrend - Short en el gráfico

La figura siguiente muestra un ejemplo de señales generadas partiendo de esta estrategia.

Señal para Sell:

SAR Downtrend - señal de venta

Señal de take-profit:

Estrategia de MFI - Downtrend - señal de take-profit

  • Estrategia cuatro: IMF - tendencia alcista o divergencia

El código completo para la cuarta estrategia (confirmación de tendencia o divergencia) tiene el aspecto siguiente:

//+------------------------------------------------------------------+
//|                                  MFI - Uptrend or divergence.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()
  {
//Create arrays for MFI and price
   double MFIArray[];
   MqlRates PriceArray[];

//sorting arrays from the current data
   ArraySetAsSeries(MFIArray,true);
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);

//defining MFI
   int MFIDef=iMFI(_Symbol,_Period,24,VOLUME_TICK);

//filling the MFI array
   CopyBuffer(MFIDef,0,0,3,MFIArray);

//calculating current and previous MFI values
   double MFICurrentValue=NormalizeDouble(MFIArray[0],5);
   double MFIPrevValue=NormalizeDouble(MFIArray[1],5);

//calculating current and previous highs
   double CurrentHighValue=NormalizeDouble(PriceArray[2].high,5);
   double PrevHighValue=NormalizeDouble(PriceArray[1].high,5);

//conditions of strong move or divergence
//strong up
   if(MFICurrentValue>MFIPrevValue&&CurrentHighValue>PrevHighValue)
     {
      Comment("Strong up move");
     }

//bearish divergence
   if(MFICurrentValue<MFIPrevValue&&CurrentHighValue>PrevHighValue)
     {
      Comment("Bearish divergence");
     }
  }
//+------------------------------------------------------------------+

Qué hay de nuevo en este código:

Hemos creado los arrays para MFI y los precios utilizando la función MqlRates, que almacena la información sobre los precios, volúmenes y spreads:

   double MFIArray[];
   MqlRates PriceArray[];


Clasificamos los arrays:

Para el array de MFI, usaremos, como antes, la función ArraySetAsSeries.

Para los precios, utilizaremos la función CopyRates para obtener los datos históricos de MqlRates. Sus parámetros son: el nombre del símbolo, el periodo de tiempo, la hora de inicio, la hora de finalización y el array de precios.

   ArraySetAsSeries(MFIArray,true);
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);

Calculamos los valores MFI actuales y anteriores

   double MFICurrentValue=NormalizeDouble(MFIArray[0],5);
   double MFIPrevValue=NormalizeDouble(MFIArray[1],5);

Calculamos los máximos actuales y anteriores

   double CurrentHighValue=NormalizeDouble(PriceArray[2].high,5);
   double PrevHighValue=NormalizeDouble(PriceArray[1].high,5);

Las condiciones de la estrategia "MFI - confirmación de tendencia alcista o divergencia" son:

Un fuerte movimiento ascendente

   if(MFICurrentValue>MFIPrevValue&&CurrentHighValue>PrevHighValue)
     {
      Comment("Strong up move");
     }

Divergencias:

   if(MFICurrentValue<MFIPrevValue&&CurrentHighValue>PrevHighValue)
     {
      Comment("Bearish divergence");
     }

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

 MFI en el Navegador 5

Iniciamos de nuevo. Arrastramos y soltamos desde el Navegador o clicamos dos veces para abrir. Se abrirá una ventana como esta:

 Ventana de la estrategia de MFI - Downtrend o divergence

Después de clicar en "Aceptar", el programa aparecerá en el gráfico:

Asesor MFI - Uptrend or divergence en el gráfico

A continuación, le mostramos un ejemplo de las señales generadas que muestran la ventana de datos.

Señal alcista fuerte, ventana de datos con valores actuales:

Ventana de la estrategia de MFI - Uptrend or divergence - tendencia fuerte, valores actuales

Señal alcista fuerte, ventana de datos con valores anteriores:

Ventana de la estrategia de MFI - Uptrend or divergence - tendencia fuerte, valores anteriores

Señal de divergencia con ventana de datos y datos actuales:

Ventana de la estrategia de MFI - Uptrend or divergence - Divergencia bajista, valores actuales

Señal del asesor con la ventana de datos y los datos anteriores:


  • Estrategia cinco: MFI - tendencia bajista o divergencia

A continuación, le mostramos el código para esta estrategia.

//+------------------------------------------------------------------+
//|                                MFI - Downtrend or divergence.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()
  {
//Create arrays for MFI and price
   double MFIArray[];
   MqlRates PriceArray[];

//sorting arrays from the current data
   ArraySetAsSeries(MFIArray,true);
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);

//defining MFI
   int MFIDef=iMFI(_Symbol,_Period,24,VOLUME_TICK);

//filling the array
   CopyBuffer(MFIDef,0,0,3,MFIArray);

//calculating current and previous MFI values
   double MFICurrentValue=NormalizeDouble(MFIArray[0],5);
   double MFIPrevValue=NormalizeDouble(MFIArray[1],5);

//calculating current and previous highs
   double CurrentLowValue=NormalizeDouble(PriceArray[2].low,5);
   double PrevLowValue=NormalizeDouble(PriceArray[1].low,5);

//conditions of strong move or divergence
//Strong down move
   if(MFICurrentValue<MFIPrevValue&&CurrentLowValue<PrevLowValue)
     {
      Comment("Strong down move");
     }

//bullish divergence
   if(MFICurrentValue>MFIPrevValue&&CurrentLowValue<PrevLowValue)
     {
      Comment("Bullish divergence");
     }
  }
//+------------------------------------------------------------------+

Qué ha cambiado en el código con respecto al anterior:

Las condiciones de las señales generadas para esta estrategia.

Señal bajista fuerte:

   if(MFICurrentValue<MFIPrevValue&&CurrentLowValue<PrevLowValue)
     {
      Comment("Strong down move");
     }

Divergencia alcista:

   if(MFICurrentValue>MFIPrevValue&&CurrentLowValue<PrevLowValue)
     {
      Comment("Bullish divergence");
     }

Después de compilar el programa, este aparecerá en la ventana del Navegador:

MFI en el Navegador 6

Después del inicio, aparecerá la siguiente ventana:

Ventana de la estrategia de MFI - Downtrend or divergence

Clique en Aceptar y el asesor se ejecutará en el gráfico:

Estrategia de MFI - Downtrend or divergence en el gráfico

A continuación, le mostramos un ejemplo de las señales generadas obtenidas durante la prueba del asesor experto.

Señal descendente fuerte, ventana de datos con los valores actuales:

Ventana de la estrategia de MFI - Downtrend or divergence - tendencia fuerte, valores actuales

Señal baja fuerte, ventana de datos con los valores anteriores:

Ventana de la estrategia de MFI - Downtrend or divergence - tendencia fuerte, valores anteriores

Señal de divergencia alcista con ventana de datos y los datos actuales:

Ventana de la estrategia de MFI - Downtrend or divergence - Divergencia alcista, valores actuales

Señal de divergencia alcista con ventana de datos y datos anteriores:

Ventana de la estrategia de MFI - Downtrend or divergence - Divergencia alcista, valores anteriores

Conclusión

En este artículo, hemos hablado del indicador Money Flow Index (MFI), analizando nueva información que puede mejorar los resultados comerciales. Hemos aprendido qué es el volumen, por qué es muy importante en el trading, qué es el indicador MFI y qué mide. También hemos aprendido a calcular el volumen manualmente y cómo usar el indicador MFI incorporado en MetaTrader 5. Tras asimilar los conceptos básicos del indicador MFI y entender el concepto principal en el que se basa, nos hemos familiarizado con varias estrategias simples: hemos hablado de estrategias de sobrecompra y sobreventa, de una estrategia de tendencia alcista que se puede usar para encontrar señales de compra y fijar los beneficios durante una tendencia alcista, y también de una estrategia similar para generar señales de venta y fijar los beneficios durante una tendencia bajista basada en el indicador MFI. También hemos analizado estrategias que pueden confirmar una tendencia alcista o bajista o mostrar una divergencia, una divergencia bajista o alcista.

Además, hemos desarrollado esquemas para todas estas estrategias que servirán como una base excelente para crear un sistema comercial que genere automáticamente señales en MetaTrader 5. Y luego, para cada estrategia, hemos creado un asesor en MQL5 que se puede ejecutar en la plataforma comercial MetaTrader 5 para generar automáticamente y con precisión las señales según las condiciones y reglas dadas de cada estrategia.

Realmente esperamos que intente usted escribir el código por sí mismo y ponga en práctica lo que ha aprendido de este artículo. También esperamos que el artículo le haya resultado útil, le haya presentado nuevas estrategias de trabajo, y le haya ayudado a encontrar nuevas ideas relacionadas o no con el tema del artículo. Una vez más, asegúrese de poner a prueba cualquier estrategia antes de usarla en una cuenta real, ya que el objetivo principal de este artículo es ofrecer información a los principiantes para enseñarles cómo programar estrategias comerciales simples por su cuenta. Por lo tanto, las estrategias analizadas podrían requerir de optimización o ajustes. También podría resultar mejor combinarlas con alguna otra herramienta técnica. En general, una combinación de diferentes herramientas técnicas supone un enfoque útil a la hora de analizar la situación desde diferentes puntos de vista y poder tomar una decisión adecuada. Además, usando una combinación de estos recursos, podemos crear un sistema comercial que, como cualquier otro, simple o complejo, nos permita superar el problema de la subjetividad, que puede suponer un obstáculo para lograr nuestros objetivos comerciales. La programación es una herramienta increíble que hace las cosas más fáciles y precisas, librándonos de la necesidad de repetir las mismas tareas.

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. Esperamos que el artículo le sea útil en el comercio.

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

Aprendizaje automático y data science (Parte 03): Regresión matricial Aprendizaje automático y data science (Parte 03): Regresión matricial
En esta ocasión, vamos a crear modelos usando matrices: estas ofrecen una gran flexibilidad y permiten crear modelos potentes que pueden manejar no solo cinco variables independientes, sino muchas otras, tantas como los límites computacionales de nuestro ordenador nos permitan. El presente artículo será muy interesante, eso seguro.
El modelo de movimiento de precios y sus principales disposiciones (Parte 1): La versión del modelo más simple y sus aplicaciones El modelo de movimiento de precios y sus principales disposiciones (Parte 1): La versión del modelo más simple y sus aplicaciones
En el presente artículo, le presentamos los fundamentos de una teoría matemáticamente rigurosa del movimiento de precios y el funcionamiento del mercado. Aún no se ha creado una teoría matemática rigurosa del movimiento de precios: solo había una serie de suposiciones, sin respaldo estadístico o teoría alguna, sobre que después de tales patrones, el precio se mueve de tal o cual manera.
Aprendizaje automático y data science (Parte 04): Predicción de una caída bursátil Aprendizaje automático y data science (Parte 04): Predicción de una caída bursátil
En este artículo, intentaremos usar nuestro modelo logístico para predecir una caída del mercado de valores según las principales acciones de la economía estadounidense: NETFLIX y APPLE. Analizaremos estas acciones, y también usaremos la información sobre las anteriores caídas del mercado en 2019 y 2020. Veamos cómo funcionará nuestro modelo en las poco favorables condiciones actuales.
DoEasy. Elementos de control (Parte 7): Elemento de control «etiqueta de texto». DoEasy. Elementos de control (Parte 7): Elemento de control «etiqueta de texto».
En este artículo, crearemos la clase de control «Etiqueta de texto» de WinForms. Dicho objeto se podrá colocar en cualquier lugar de nuestro contenedor, y su propia funcionalidad replicará algunas de las funcionalidades de las etiquetas de texto de MS Visual Studio: podremos establecer los parámetros de fuente para el texto mostrado.