English Русский 中文 Deutsch 日本語 Português
preview
Aprendiendo a diseñar un sistema de trading basado en el Índice de Facilitación del Mercado MFI de Bill Williams

Aprendiendo a diseñar un sistema de trading basado en el Índice de Facilitación del Mercado MFI de Bill Williams

MetaTrader 5Trading | 23 junio 2023, 12:38
635 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Introducción

Bienvenidos a un nuevo artículo de la serie dedicada a la creación de sistemas comerciales basados en indicadores técnicos populares. Este artículo presenta otra herramienta técnica que puede suponer un complemento útil en su comercio, especialmente al combinarse con otras herramientas para comprender mejor lo que ocurre en el mercado. Echemos un vistazo al Índice de Facilitación del Mercado (MFI) de Bill Williams. Al estudiar el indicador en este artículo nos fijaremos en los siguientes temas:

  1. Definición del indicador BW MFI
  2. Estrategia del indicador BW MFI
  3. Esquema del sistema del indicador BW MFI
  4. Sistema comercial del indicador BW MFI
  5. Conclusión

Como en todos los artículos anteriores, usaremos la plataforma comercial MetaTrader 5 y el editor de lenguaje MetaQuotes para trabajar con el código y los programas. Si no sabe cómo descargarlos y usarlos, lea "Escribiendo el código MQL5 en el MetaEditor" en uno de los artículos anteriores: allí encontrará información detallada sobre cómo descargarlos y utilizarlos.

Todas las estrategias de las que hablaremos aquí se presentan exclusivamente como material de aprendizaje, y si alguna vez quieres utilizarlas en una cuenta real, deberá asegurarse de ponerlas a prueba de antemano. Además, en ningún caso deberán ejecutarse sin ser optimizadas. No olvide que las estrategias podrían no ajustarse a su estilo comercial, ya que no existe ninguna estrategia universal que convenga a todo el mundo. También le recomendamos escribir todos los códigos por sí mismo y recorrer todos los pasos de los que hablaremos en este artículo. Esta práctica le ayudará a mejorar sus habilidades de programación.

¡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.


Definición del indicador BW MFI

En esta sección analizaremos con detalle en qué consiste el Índice de Facilitación del Mercado (MFI), uno de los indicadores técnicos desarrollados por el famoso tráder y autor Bill Williams. El indicador está diseñado para medir la dirección del mercado examinando y analizando el precio y el volumen. La utilidad de este indicador para el tráder reside en que puede sugerir movimientos futuros del mercado y dar una indicación de la fuerza del movimiento actual de los precios. En base a esto, podremos determinar si el movimiento continuará o si el precio podrá revertirse. La ventaja de esta información es que ayuda a comerciar con los puntos fuertes del mercado y a tomar decisiones fundamentadas.

Para comprender la situación, analizaremos el índice MFI y el volumen. Basándonos en ello, tendremos las siguientes opciones:

  • Si el BW MFI asciende y el volumen aumenta, esto indicará el interés de los participantes en el mercado por el instrumento financiero.
  • Si el BW MFI desciende y el volumen disminuye, esto indicará una disminución del interés por parte de los participantes en este instrumento financiero.
  • Si el BW MFI asciende pero el volumen disminuye, esto indicará que el volumen no está apoyando el movimiento actual.
  • Si el BW MFI desciende pero el volumen aumenta, esto indicará que existe un equilibrio entre compradores y vendedores en el mercado.

Veamos ahora cómo calcular manualmente el indicador BW MFI. Saber cómo se calcula el indicador nos permitirá comprender mejor el concepto que lo sustenta. En realidad no necesita calcular nada, porque hay un indicador listo para usar incorporado en MetaTrader 5. Para calcular el valor del BW MFI, deberemos dividir el resultado de la diferencia entre el máximo y el mínimo por el volumen.

BW MFI = (High - Low) / Volume

donde:

High — precio del máximo;
Low — precio del mínimo;
Volume — volumen actual.

Pero, como ya hemos dicho antes, en realidad no tendremos que calcular nada. Todo lo que necesitamos hacer es elegir el indicador listo para usar de la lista en MetaTrader 5. A continuación, le mostraremos cómo hacerlo.

Abra el terminal comercial MetaTrader 5, clique en el menú "Insertar" -> "Indicadores" -> "Bill Williams" -> Índice de Facilitación del Mercado. La siguiente ilustración lo muestra con detalle:

Iniciando el indicador BW MFI en el gráfico

Una vez que hayamos seleccionado el MFI en el menú, se abrirá la ventana de parámetros del indicador. Tendrá el aspecto que sigue:

Ventana del indicador BW MFI

1 — color del indicador cuando las lecturas del MFI y los volúmenes aumentan.

2 — color del indicador cuando las lecturas del MFI y los volúmenes disminuyen.

3 — color del indicador cuando las lecturas del FMI aumentan y los volúmenes disminuyen.

4 — color del indicador cuando las lecturas del FMI disminuyen y los volúmenes aumentan.

5 — tipo de volumen (tick o real).

6 — grosor de las barras del indicador.

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

Indicador BW MFI en el gráfico

Como podemos ver en la figura anterior, el indicador se muestra en una ventana adicional del gráfico; se representa en barras de diferentes tamaños y colores según el precio y el volumen, basándose en el cálculo del indicador BW MFI. Cada color y valor del indicador muestra un estado concreto del movimiento de los precios.

  • Una barra verde indicará que tanto el BW MFI como el volumen están aumentando, lo cual indica que los participantes en el mercado están interesados en este instrumento.
  • Una barra marrón indicará que el BW MFI y el volumen están disminuyendo, lo cual indica una falta de interés en el instrumento financiero por parte de los participantes en el mercado.
  • Una barra azul indicará que el BW MFI está aumentando y el volumen está disminuyendo, lo cual indica que el movimiento del mercado no está respaldado por el volumen.
  • El color rosa indicará que el BW MFI está disminuyendo y el volumen está aumentando, lo cual indica un equilibrio entre alcistas y bajistas.

Estrategia del indicador BW MFI

En este tema veremos algunas estrategias sencillas basadas en la idea básica del indicador BW MFI. Una vez más, querríamos recordarles que todas las estrategias se presentan únicamente con fines ilustrativos. Para obtener resultados, deberá realizar la optimización, modificar los parámetros o combinar el MFI y otros indicadores técnicos. Por lo tanto, es muy importante probar estas estrategias cuidadosamente, como con cualquier otra estrategia, antes de usarlas en una cuenta real. Será obligatorio que primero se asegure de que puede utilizarlas en su beneficio en el comercio.

Estrategia uno: BW MFI - estado del movimiento

Esta estrategia determinará el estado del movimiento del indicador BW MFI. Para ello, analizaremos los valores del indicador BW MFI y valor de los volúmenes. Por lo tanto, podrán existir un total de cuatro estados:

  • Si lectura actual de BW MFI es mayor que la anterior, y el volumen actual es mayor que el anterior, en el gráfico se mostrará una barra verde. Definiremos esto como estado "verde".
  • Si la lectura actual de BW MFI es inferior a la anterior, y el volumen actual también es inferior al anterior, en el gráfico se mostrará una barra marrón. Definiremos esto como estado de debilitamiento.
  • Si lectura actual de BW MFI es mayor que la anterior, y el volumen actual es menor que el anterior, la barra será azul y señalará un estado falso.
  • Si la lectura actual de BW MFI es inferior a la anterior, y el volumen actual es superior al anterior, la barra será de color rosa y este estado se llamará "sentadilla".

Si lo miramos esquemáticamente:

  • BW FMI actual > ant. BW MFI y volumen actual > volumen ant. ==> Estado verde, barra verde
  • BW MFI actual < ant. BW MFI y volumen actual < volumen ant. ==> Debilitamiento - barra marrón
  • BW FMI actual > ant. BW MFI y volumen actual < volumen ant. ==> Estado falso - barra azul
  • BW MFI actual < ant. BW MFI y volumen actual > volumen ant. ==> Sentadilla - barra rosa

Segunda estrategia: señales BW FMI

Esta estrategia generará señales basadas en el estado del indicador BW MFI. Lo primero que deberemos hacer es definir las condiciones del mercado del mismo modo que en la estrategia anterior. La estrategia generará entonces una señal de acción favorable basada en el estado. Según esta estrategia, tendremos cuatro señales según el estado:

  • Si el estado es verde, esto señalará la aparición de una oportunidad de entrada favorable.
  • Si tenemos un estado debilitado, la estrategia generará una señal de oportunidad de salida.
  • El estado falso señalará la posibilidad de una ruptura falsa.
  • El estado de «sentadilla» señalará que el mercado está equilibrado.

Estrategia tres: Combinación de BW FMI y MA

En esta estrategia analizaremos el comportamiento de dos indicadores, BW MFI y la media móvil. En función de los resultados del análisis, generaremos señales de compra y venta. Si el MFI es verde y el precio de cierre está por encima de la media móvil, esto supondrá una señal de compra. Por el contrario, si el estado es verde y el precio de cierre está por debajo de la media móvil, tendremos una señal de venta. El análisis técnico permite combinar distintas herramientas para analizar una situación desde diferentes puntos de vista y tomar decisiones con mayor conocimiento de causa. Este indicador también puede combinarse con otras herramientas como los niveles de apoyo y resistencia, el indicador MACD y otros indicadores que filtrarán y confirmarán las señales generadas.

Entonces, tenemos que:

  • Estado verde, precio de cierre > MA ==> señal de compra
  • Estado verde, precio de cierre < MA ==> señal de venta

Esquema del sistema del indicador BW MFI

En esta parte del artículo analizaremos un paso importante en el desarrollo de cualquier sistema comercial: la creación de un plan estratégico paso a paso. Un esquema de este tipo resultará de gran ayuda a la hora de programar una estrategia, ya que se visualiza cada paso. Así pues, este paso puede considerarse una fase de planificación de la futura estrategia.

 Estrategia uno: BW MFI - estado del movimiento

Para esta estrategia, crearemos un sistema comercial que se podrá utilizar para obtener una señal del movimiento del indicador BW MFI. Esto se logrará analizando el color del indicador, que a su vez se determinará comparando los cuatro valores de cada tick para determinar sus posiciones relativas entre sí. Los cuatro valores representan los valores BW FMI actuales y anteriores, así como los volúmenes actuales y anteriores. El programa comprobará estos valores y determinará su posición. El primer estado se producirá cuando el BW MFI actual sea mayor que el anterior y el volumen actual sea mayor que el anterior. El sistema comercial mostrará entonces el comentario "Green State - Green Bar" en el gráfico. El segundo estado se producirá cuando el BW MFI actual sea inferior al anterior y el volumen actual sea inferior al anterior. A continuación, el sistema comercial mostrará el comentario "Fade State - Brown Bar" en el gráfico. El tercer caso se producirá cuando el BW MFI actual sea superior al anterior y el volumen actual sea inferior al anterior. El sistema mostrará en el gráfico un comentario de señal falsa: "Fake State - Blue Bar". El cuarto y último caso se producirá cuando el BW MFI actual sea inferior al anterior y el volumen actual sea superior al anterior. Con estas lecturas, el sistema mostrará el comentario "Squat State - Pink Bar" en el gráfico.

La siguiente figura muestra el esquema de desarrollo de una estrategia destinada a determinar el estado del movimiento:

Esquema de la estrategia según el estado del movimiento

Segunda estrategia: señales BW FMI

Según esta estrategia, partiendo de la determinación del estado en las barras del indicador, crearemos un sistema comercial que podrá utilizarse para generar una señal basada en dicho estado del indicador BW MFI. La señal también aparecerá como comentario en el gráfico. Para ello, deberemos escribir un programa que compruebe los cuatro estados en cada tick y retorne la señal correspondiente. Si el sistema comercial ha detectado que el indicador BW MFI muestra un estado verde, el software debería representar un comentario en el gráfico con la señal "Find a good entry". Si el sistema detecta el segundo estado (atenuación), se mostrará en el gráfico el comentario con la señal "Find a good exit". Si el sistema identifica el tercer estado del indicador, el estado falso, el comentario correspondiente en el gráfico indicará una posible ruptura falsa: "False breakout probability". Por último, si se ha identificado el cuarto estado del indicador, la «sentadilla», en el gráfico se indicará un equilibrio de fuerzas en el mercado mediante el comentario correspondiente: "Market is Balanced".

La siguiente imagen muestra el esquema necesario para desarrollar una estrategia que genere este tipo de señales:

Esquema de la estrategia con señales BW MFI

Estrategia tres: Combinación de BW FMI y MA

Un sistema basado en esta estrategia debería emitir un comentario en el gráfico con señales de compra y venta basadas en el BW MFI y una media móvil simple. Para ello, vigilaremos constantemente los precios de cierre, el valor actual de la media móvil simple y el estado del indicador BW MFI. Recordemos que los estados se definen en cada tick. Si el precio de cierre está por encima del valor actual de la media móvil simple y el estado actual del BW IMF es verde, el sistema comercial mostrará una señal de compra como comentario en el gráfico. Si el precio de cierre se encuentra por debajo del valor actual de la media móvil simple y el estado actual del BW IMF es verde, el sistema comercial mostrará una señal de venta en el gráfico. En cualquier otra situación, no será necesario mostrar ningún comentario.

La siguiente ilustración muestra el desarrollo de una estrategia basada en los indicadores BW IMF y AM:

Esquema de la estrategia BW MFI con MA

Sistema comercial del indicador BW MFI

En esta parte del artículo, crearemos sistemas comerciales para cada estrategia analizada. Empezaremos creando un sencillo programa que mostrará un comentario en el gráfico con el valor actual del indicador BW MFI. Este programa servirá de base para otras estrategias. Pasos para crear el programa:

Creamos el array BWMFIArray usando una función double. El tipo double es un tipo real, un número de punto flotante, es decir, un valor con una parte fraccionaria.

double BWMFIArray[];

Luego, estableceremos la clasificación de los datos en el array usando la función ArraySetAsSeries: Parámetros de la función:

  • array[] — definimos los arrays creados, BMWFIArray.
  • flag — establecemos la dirección de indexación en el array, true.
ArraySetAsSeries(BWMFIArray,true);

Creamos una variable de tipo entero BWMFIDef y definimos el indicador Bill Williams Market Facilitation Index utilizando la función iBWMFI. La función retornará el manejador del indicador. Parámetros de la función:

  • symbol — nombre del símbolo; nosotros tenemos _SYMBOL, es decir, calcularemos el indicador según el símbolo del gráfico actual.
  • period — marco temporal para el cálculo; si usamos el valor _PERIOD, significará que el indicador se calculará en el marco temporal actual.
  • applied_volume — tipo de volúmenes utilizados para calcular el indicador. Usaremos los volúmenes de tick (VOLUME_TICK).
int BWMFIDef=iBWMFI(_Symbol,_Period,VOLUME_TICK);

Definimos los datos y guardamos los resultados en BWMFIArray utilizando la función CopyBuffer Parámetros de la función:

  • indicator_handle — manejador del indicador, BWMFIDef
  • buffer_num — número del búfer de indicador; lo estableceremos en 0.
  • start_pos — indica la posición del inicio del cálculo; estableceremos 0
  • count — cantidad de datos a copiar; estableceremos 3.
  • buffer[] — define el array de precios a copiar, en nuestro caso es BWMFIArray
CopyBuffer(BWMFIDef,0,0,3,BWMFIArray);

Obtiene el valor actual de BWMFI. Para ello, primero creamos la variable double BWMFIVal. Luego usamos la función NormalizeDouble para redondear.

  • value — valor actual de BWMFIArray[0].
  • digits — número de dígitos después del punto decimal, 5.
double BWMFIVal=NormalizeDouble(BWMFIArray[0],5);

Utilizamos la función Comment para mostrar el valor actual del indicador BW MFI.

Comment("BW MFI Value = ",BWMFIVal);

El código completo de un sistema comercial así tendrá el aspecto que sigue:

//+------------------------------------------------------------------+
//|                             Simple Market Facilitation Index.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   double BWMFIArray[];
   ArraySetAsSeries(BWMFIArray,true);
   int BWMFIDef=iBWMFI(_Symbol,_Period,VOLUME_TICK);
   CopyBuffer(BWMFIDef,0,0,3,BWMFIArray);
   double BWMFIVal=NormalizeDouble(BWMFIArray[0],5);
   Comment("BW MFI Value = ",BWMFIVal);
  }
//+------------------------------------------------------------------+

Compilamos el código, asegurándonos de que no haya errores ni advertencias. El programa compilado debería aparecer en el Navegador del terminal comercial MetaTrader 5, en la carpeta Experts:

Programa BW MFI en el Navegador

Iniciamos el programa desde el Navegador clicando dos veces en el archivo 'Simple Market Facilitation Index' o arrastrándolo y soltándolo en el gráfico. Después de eso, aparecerá la ventana del asesor:

Ventana del indicador BW MFI

Asimismo, permitiremos el comercio automático (Allow Algo Trading), clique en OK y el programa se ejecutará en el gráfico como se muestra a continuación:

Programa Simple BW MFI en el gráfico

A continuación le mostramos ejemplos de las señales que un asesor de este tipo puede generar partiendo de esta estrategia:

Señales de la estrategia Simple BW MFI

En el gráfico de arriba, el comentario generado por el programa con el valor actual del indicador BW MFI aparece en la esquina superior izquierda.

Estrategia uno: BW MFI - estado del movimiento

Veamos directamente el código completo de una estrategia de este tipo:

//+------------------------------------------------------------------+
//|                                     BW MFI - Movement Status.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   double BWMFIArray[];
   double volArray[];
   ArraySetAsSeries(BWMFIArray,true);
   ArraySetAsSeries(volArray,true);
   int BWMFIDef=iBWMFI(_Symbol,_Period,VOLUME_TICK);
   int volDef=iVolumes(_Symbol,_Period,VOLUME_TICK);
   CopyBuffer(BWMFIDef,0,0,3,BWMFIArray);
   CopyBuffer(volDef,0,0,3,volArray);
   double BWMFIVal=NormalizeDouble(BWMFIArray[0],5);
   double BWMFIVal1=NormalizeDouble(BWMFIArray[1],5);
   double volVal=NormalizeDouble(volArray[0],5);
   double volVal1=NormalizeDouble(volArray[1],5);
   if(BWMFIVal>BWMFIVal1&&volVal>volVal1)
     {
      Comment("Green State - Green Bar");
     }
   if(BWMFIVal<BWMFIVal1&&volVal<volVal1)
     {
      Comment("Fade State - Brown Bar");
     }
   if(BWMFIVal>BWMFIVal1&&volVal<volVal1)
     {
      Comment("Fake State - Blue Bar");
     }
   if(BWMFIVal<BWMFIVal1&&volVal>volVal1)
     {
      Comment("Squat State - Pink Bar");
     }
  }
//+------------------------------------------------------------------+

Diferencias en este código:

Creamos dos arrays (BWMFIArray) y (volArray) y establecemos la clasificación de los datos en estos arrays utilizando la función "ArraySetAsSeries".

   double BWMFIArray[];
   double volArray[];
   ArraySetAsSeries(BWMFIArray,true);
   ArraySetAsSeries(volArray,true);
Creamos variables enteras para BWMFiDef y volDef. Definimos el indicador BW MFI usando la función iBWMFI y los volúmenes con la ayuda de la función iVolumes. La función retorna los manejadores de los indicadores. Parámetros:
  • symbol — nombre del símbolo; nosotros tenemos _SYMBOL, es decir, calcularemos el indicador según el símbolo del gráfico actual.
  • period — marco temporal para el cálculo; si usamos el valor _PERIOD, significará que el indicador se calculará en el marco temporal actual.
  • applied_volume — tipo de volúmenes utilizados para calcular el indicador. Usaremos los volúmenes de tick (VOLUME_TICK).
   int BWMFIDef=iBWMFI(_Symbol,_Period,VOLUME_TICK);
   int volDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

Definimos los datos y guardamos los resultados en volArray utilizando la función CopyBuffer

CopyBuffer(volDef,0,0,3,volArray);

Determinamos los valores actuales y anteriores del BW IMF y los volúmenes:

   double BWMFIVal=NormalizeDouble(BWMFIArray[0],5);
   double BWMFIVal1=NormalizeDouble(BWMFIArray[1],5);
   double volVal=NormalizeDouble(volArray[0],5);
   double volVal1=NormalizeDouble(volArray[1],5);

Condiciones de la estrategia:

Si hay una barra verde

   if(BWMFIVal>BWMFIVal1&&volVal>volVal1)
     {
      Comment("Green State - Green Bar");
     }

Si una barra marrón

   if(BWMFIVal<BWMFIVal1&&volVal<volVal1)
     {
      Comment("Fade State - Brown Bar");
     }

Si la barra es azul

   if(BWMFIVal>BWMFIVal1&&volVal<volVal1)
     {
      Comment("Fake State - Blue Bar");
     }

Si la barra es rosa

   if(BWMFIVal<BWMFIVal1&&volVal>volVal1)
     {
      Comment("Squat State - Pink Bar");
     }

Tras compilar el código y ejecutar el programa desde el Navegador, el asesor comenzará a funcionar en el gráfico:

Programa Movement Status en el gráfico

Podemos ver que el asesor experto está adjunto al gráfico, así como el icono correspondiente en la esquina superior derecha. Ahora estamos listos para obtener las señales para esta estrategia. A continuación, le mostraremos algunos ejemplos de señales de prueba.

En caso de señal de estado verde

Programa Movement Status - señal verde

 

La captura de pantalla anterior muestra un ejemplo de señal verde formada que aparece en la esquina superior izquierda.

En el caso del estado atenuado:

Movement Status - señal de atenuación

En la esquina izquierda del gráfico aparece un comentario con la señal Fade.

En caso de estado falso:

Programa Movement Status - señal falsa

Nuevamente un comentario sobre el gráfico - esta vez con una señal sobre el estado falso (Fake):

En el estado «sentadilla»:

Programa Movement Status - señal de «sentadilla»

La condición correspondiente se señala usando un comentario en la esquina superior izquierda del gráfico. 

Segunda estrategia: señales BW FMI

A continuación le mostramos el código de la segunda estrategia que genera señales de BW MFI.

//+------------------------------------------------------------------+
//|                                               BW MFI Signals.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
void OnTick()
  {
   double BWMFIArray[];
   double volArray[];
   ArraySetAsSeries(BWMFIArray,true);
   ArraySetAsSeries(volArray,true);
   int BWMFIDef=iBWMFI(_Symbol,_Period,VOLUME_TICK);
   int volDef=iVolumes(_Symbol,_Period,VOLUME_TICK);
   CopyBuffer(BWMFIDef,0,0,3,BWMFIArray);
   CopyBuffer(volDef,0,0,3,volArray);
   double BWMFIVal=NormalizeDouble(BWMFIArray[0],5);
   double BWMFIVal1=NormalizeDouble(BWMFIArray[1],5);
   double volVal=NormalizeDouble(volArray[0],5);
   double volVal1=NormalizeDouble(volArray[1],5);
   bool greenState = BWMFIVal>BWMFIVal1&&volVal>volVal1;
   bool fadeState = BWMFIVal<BWMFIVal1&&volVal<volVal1;
   bool fakeState = BWMFIVal>BWMFIVal1&&volVal<volVal1;
   bool squatState = BWMFIVal<BWMFIVal1&&volVal>volVal1;
   
   if(greenState)
     {
      Comment("Find a good entry");
     }
   if(fadeState)
     {
      Comment("Find a good exit");
     }
   if(fakeState)
     {
      Comment("False breakout Probability");
     }
   if(squatState)
     {
      Comment("Market is Balanced");
     }
  }
//+------------------------------------------------------------------+

Diferencias en este código:

Ya hemos declarado las variables lógicas para los cuatro estados: verde, atenuado, falso y de «sentadilla» según las condiciones de cada estado.

   bool greenState = BWMFIVal>BWMFIVal1&&volVal>volVal1;
   bool fadeState = BWMFIVal<BWMFIVal1&&volVal<volVal1;
   bool fakeState = BWMFIVal>BWMFIVal1&&volVal<volVal1;
   bool squatState = BWMFIVal<BWMFIVal1&&volVal>volVal1;

Condiciones de la estrategia:

En caso de condición verde

   if(greenState)
     {
      Comment("Find a good entry");
     }

En caso de la condición Fade (atenuación)

   if(fadeState)
     {
      Comment("Find a good exit");
     }

En caso de estado falso

   if(fakeState)
     {
      Comment("False breakout Probability");
     }

En caso de estado de «sentadilla»

   if(squatState)
     {
      Comment("Market is Balanced");
     }

Compilamos el código y ejecutamos el programa desde la ventana del Navegador. El asesor funcionará en el gráfico de la forma siguiente:

Señales BW MFI en el gráfico

Podemos ver que el asesor experto que opera con las señales del BW MFI está vinculado al gráfico: tenemos el icono correspondiente en la esquina superior derecha. A continuación le mostramos algunos ejemplos de señales generadas por una estrategia de este tipo.

Una señal de que se ha encontrado una buena oportunidad de entrada:

Señal Find a good entry

Como podemos ver, en el gráfico anterior aparece un comentario sobre la posibilidad de entrar en el mercado en la esquina superior izquierda del gráfico.

Señal de que se ha encontrado una buena oportunidad de salida:

Señal Find a good exit

Como podemos ver, en el gráfico anterior aparece un comentario sobre la posibilidad de una salida en la esquina superior izquierda del gráfico.

Ejemplo de una posible señal de falsa ruptura:

Señales del BW MFI - falsa señal de ruptura

En la captura de pantalla anterior, en la esquina superior izquierda del gráfico aparece un comentario sobre la probabilidad de una falsa ruptura.

Ejemplo de señal sobre el mercado equilibrado:

Señales del BW MFI - señal de equilibrio

Aparece un comentario en la esquina superior izquierda del gráfico con una señal de mercado equilibrado.

Estrategia tres: Combinación de BW FMI y MA

Veamos el código completo de este sistema comercial basado en una estrategia en la que combinamos el indicador BW MFI y la media móvil.

//+------------------------------------------------------------------+
//|                                               BW MFI with MA.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
void OnTick()
  {
   double BWMFIArray[];
   double volArray[];
   double maArray[];
   MqlRates pArray[];
   ArraySetAsSeries(BWMFIArray,true);
   ArraySetAsSeries(volArray,true);
   ArraySetAsSeries(maArray,true);
   int BWMFIDef=iBWMFI(_Symbol,_Period,VOLUME_TICK);
   int volDef=iVolumes(_Symbol,_Period,VOLUME_TICK);
   int maDef=iMA(_Symbol,_Period,10,0,MODE_SMA,PRICE_CLOSE);
   int data=CopyRates(_Symbol,_Period,0,10,pArray);
   CopyBuffer(BWMFIDef,0,0,3,BWMFIArray);
   CopyBuffer(volDef,0,0,3,volArray);
   CopyBuffer(maDef,0,0,3,maArray);
   double BWMFIVal=NormalizeDouble(BWMFIArray[0],5);
   double BWMFIVal1=NormalizeDouble(BWMFIArray[1],5);
   double volVal=NormalizeDouble(volArray[0],5);
   double volVal1=NormalizeDouble(volArray[1],5);
   double maVal=NormalizeDouble(maArray[0],5);
   double closingPrice=pArray[0].close;
   bool greenState = BWMFIVal>BWMFIVal1&&volVal>volVal1;
   bool fadeState = BWMFIVal<BWMFIVal1&&volVal<volVal1;
   bool fakeState = BWMFIVal>BWMFIVal1&&volVal<volVal1;
   bool squatState = BWMFIVal<BWMFIVal1&&volVal>volVal1;
   if(closingPrice>maVal&&greenState)
     {
      Comment("Buy Signal");
     }
   else
      if(closingPrice<maVal&&greenState)
        {
         Comment("Sell signal");
        }
      else
         Comment("");
  }
//+------------------------------------------------------------------+

Diferencias en este código:

Creamos dos matrices más para maArray utilizando la función double y pArray usando la función MqlRates.

   double maArray[];
   MqlRates pArray[];

Luego, estableceremos la clasificación de los datos en el array usando la función ArraySetAsSeries:

ArraySetAsSeries(maArray,true);

Creamos una variable de tipo entero maDef y definimos la media móvil usando la función iMA, que retorna el identificador del indicador. Parámetros de la función:

  • symbol — nombre del símbolo. Usaremos _SYMBOL, el símbolo del gráfico actual.
  • period — marco temporal para el cálculo; si se usa el valor _PERIOD, significará que el indicador se calculará en el marco temporal actual, al igual que PERIOD_CURRENT.
  • ma_period — periodo para calcular la media móvil; en nuestro ejemplo es 10.
  • ma_shift — desplazamiento horizontal de MA. Estableceremos 0, para no cambiar.
  • ma_method — tipo de media móvil; en nuestro caso será SMA (Simple Moving Average)
  • applied_price — define el tipo de precio utilizado para el cálculo; nosotros utilizaremos el precio de cierre
int maDef=iMA(_Symbol,_Period,10,0,MODE_SMA,PRICE_CLOSE);

Obtendremos los datos históricos de MqlRates usando la función CopyRates:

  • symbol_name — nombre del símbolo para el cálculo del indicador, _Symbol, símbolo actual.
  • timeframe — marco temporal a calcular, _Period indicará el marco temporal actual del gráfico.
  • start_pos — posición de inicio del cálculo del indicador; estableceremos 0 para realizar el cálculo desde la posición actual
  • count — número de datos a copiar, 10.
  • rates_array[] — array al que copiamos los datos, pArray
int data=CopyRates(_Symbol,_Period,0,10,pArray);

Definimos los datos y almacenamos los resultados en BWMFIArray, volArray y maArray utilizando la función CopyBuffer.

   int data=CopyRates(_Symbol,_Period,0,10,pArray);
   CopyBuffer(BWMFIDef,0,0,3,BWMFIArray);
   CopyBuffer(volDef,0,0,3,volArray);
   CopyBuffer(maDef,0,0,3,maArray);

Obtenemos el BW IMF actual, los volúmenes, la media móvil simple y el precio de cierre, además del BW IMF y los volúmenes anteriores.

   double BWMFIVal=NormalizeDouble(BWMFIArray[0],5);
   double BWMFIVal1=NormalizeDouble(BWMFIArray[1],5);
   double volVal=NormalizeDouble(volArray[0],5);
   double volVal1=NormalizeDouble(volArray[1],5);
   double maVal=NormalizeDouble(maArray[0],5);
   double closingPrice=pArray[0].close;

Creamos variables lógicas para los cuatro estados: verde, atenuación, falso y de «sentadilla».

   bool greenState = BWMFIVal>BWMFIVal1&&volVal>volVal1;
   bool fadeState = BWMFIVal<BWMFIVal1&&volVal<volVal1;
   bool fakeState = BWMFIVal>BWMFIVal1&&volVal<volVal1;
   bool squatState = BWMFIVal<BWMFIVal1&&volVal>volVal1;

Condiciones de esta estrategia:

Para formar una señal de compra

   if(closingPrice>maVal&&greenState)
     {
      Comment("Buy Signal");
     }

Para formar una señal de venta

   else
      if(closingPrice<maVal&&greenState)
        {
         Comment("Sell signal");
        }

En caso contrario

      else
         Comment("");

Después de compilar el código y ejecutar el programa en el gráfico, el asesor empezará a funcionar y a generar señales:

 Programa de la estrategia BW MFI with MA en el gráfico

Para formar una señal de compra

Estrategia BW MFI with MA - señal de compra

En la esquina superior izquierda del gráfico aparece un comentario con la señal y los valores.

Para formar una señal de venta

Estrategia BW MFI with MA - señal de venta

Como podemos ver, en la esquina superior izquierda del gráfico aparece un comentario con la señal y los valores. Con esto damos por concluido nuestro tema sobre el diseño y la construcción de un sistema comercial utilizando el Índice de Facilitación del Mercado.

Conclusión

Se supone que tras leer este artículo conocerá bien el concepto básico del indicador técnico Índice de Facilitación del Mercado, desarrollado por Bill Williams. Hoy hemos visto cómo calcular el indicador manualmente y cómo ejecutarlo en un gráfico en la plataforma comercial MetaTrader 5, así como la forma de interpretar sus lecturas. También hemos visto cómo se puede utilizar. Para ello, hemos examinado algunas estrategias sencillas basadas en el indicador BW MFI:

  • La estrategia "BW MFI - Movement Status" permite obtener señales automáticas sobre los estados del mercado en función del color de las barras indicadoras (estado verde, debilitamiento del impulso, estados falsos y de «sentadilla»).
  • La estrategia "Señales BW IMF" permite obtener señales para la toma de decisiones (buscar una buena oportunidad de entrada o de salida, señalar una posible ruptura falsa o un equilibrio en el mercado) a partir de las lecturas del indicador BW IMF.
  • La estrategia "IMF y MA" sirve para generar señales de compra y venta basadas en el IMF BW y la media móvil simple.

Como siguiente paso, le recomendamos probar adicionalmente otras herramientas técnicas para obtener mejores resultados y conseguir más información sobre el mercado. Además, antes de utilizar cualquiera de las técnicas en una cuenta real, siempre deberá probarlas para asegurarse de que son adecuadas para usted. Y no olvide que toda la información tiene fines exclusivamente ilustrativos. También en este artículo hemos desarrollado planes paso a paso para cada estrategia analizada que facilitan y agilizan la configuración de un sistema comercial para que funcione en el terminal MetaTrader 5. Los hemos estudiado y creado en MQL5.

Esperamos que este artículo le resulte útil y que encuentre nuevas ideas y logre mejores resultados en sus operaciones. También esperamos que haya intentado escribir por sí mismo todo el código de este artículo creando sus propios programas: la práctica es un factor importante en cualquier proceso de aprendizaje, y en nuestro caso, permite directamente mejorar los conocimientos sobre programación. Si le ha gustado este artículo y le ha resultado útil, lea los artículos anteriores de la misma serie para aprender a desarrollar sistemas comerciales basados en diferentes indicadores técnicos populares.

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

Algoritmos de optimización de la población: Algoritmo del mono (Monkey algorithm, MA) Algoritmos de optimización de la población: Algoritmo del mono (Monkey algorithm, MA)
En este artículo analizaremos el algoritmo de optimización "Algoritmo del Mono" (MA). La capacidad de estos ágiles animales para superar obstáculos complicados y alcanzar las copas de los árboles más inaccesibles fue la base de la idea del algoritmo MA.
Teoría de categorías en MQL5 (Parte 3) Teoría de categorías en MQL5 (Parte 3)
La teoría de categorías es una rama diversa y en expansión de las matemáticas, relativamente inexplorada aún en la comunidad MQL5. Esta serie de artículos tiene como objetivo destacar algunos de sus conceptos para crear una biblioteca abierta y seguir utilizando esta maravillosa sección para crear estrategias comerciales.
Redes neuronales: así de sencillo (Parte 36): Modelos relacionales de aprendizaje por refuerzo (Relational Reinforcement Learning) Redes neuronales: así de sencillo (Parte 36): Modelos relacionales de aprendizaje por refuerzo (Relational Reinforcement Learning)
En los modelos de aprendizaje por refuerzo analizados anteriormente, usamos varias opciones de redes convolucionales que pueden identificar varios objetos en los datos originales. La principal ventaja de las redes convolucionales es su capacidad de identificar objetos independientemente de la ubicación de estos. Al mismo tiempo, las redes convolucionales no siempre son capaces de hacer frente a diversas deformaciones de los objetos y al ruido. Pero estos problemas pueden resolverse usando el modelo relacional.
Aprendizaje automático y Data Science (Parte 11): Clasificador bayesiano ingenuo y teoría de la probabilidad en el trading Aprendizaje automático y Data Science (Parte 11): Clasificador bayesiano ingenuo y teoría de la probabilidad en el trading
Comerciar con probabilidades es como caminar por la cuerda floja: requiere precisión, equilibrio y una clara comprensión del riesgo. En el mundo del trading, la probabilidad lo es todo: es lo que determina el resultado, el éxito o el fracaso, los beneficios o las pérdidas. Usando el poder de la probabilidad, los tráders pueden tomar decisiones mejor informadas, gestionar el riesgo con mayor eficacia y alcanzar sus objetivos financieros. Tanto si es usted un inversor experimentado como un tráder principiante, comprender las probabilidades puede ser la clave para liberar su potencial comercial. En este artículo, analizaremos el fascinante mundo del trading probabilístico y le mostraremos cómo llevar su modo de comerciar al siguiente nivel.