
Aprendiendo a diseñar un sistema de trading basado en el Índice de Facilitación del Mercado MFI de Bill Williams
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:
- Definición del indicador BW MFI
- Estrategia del indicador BW MFI
- Esquema del sistema del indicador BW MFI
- Sistema comercial del indicador BW MFI
- 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:
Una vez que hayamos seleccionado el MFI en el menú, se abrirá la ventana de parámetros del indicador. Tendrá el aspecto que sigue:
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:
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:
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:
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:
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:
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:
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:
A continuación le mostramos ejemplos de las señales que un asesor de este tipo puede generar partiendo de esta estrategia:
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:
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
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:
En la esquina izquierda del gráfico aparece un comentario con la señal Fade.
En caso de estado falso:
Nuevamente un comentario sobre el gráfico - esta vez con una señal sobre el estado falso (Fake):
En el estado «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:
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:
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:
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:
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:
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:
Para formar una 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
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





- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso