English Русский 中文 Español Deutsch 日本語
preview
Desenvolvimento de um sistema de negociação baseado no Índice de Facilitação do Mercado de Bill Williams

Desenvolvimento de um sistema de negociação baseado no Índice de Facilitação do Mercado de Bill Williams

MetaTrader 5Negociação | 12 junho 2023, 10:31
397 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Introdução

Aqui está um novo artigo da uma série em que aprendemos como criar sistemas de negociação baseados em indicadores técnicos populares. Este artigo apresenta mais uma ferramenta técnica que pode ser um adicional valioso para suas operações de negociação, principalmente se combinada com outras ferramentas para uma compreensão mais profunda dos processos que ocorrem no mercado. Vamos nos familiarizar com o Índice de Facilitação do Mercado de Bill Williams (Market Facilitation Index, MFI). Durante o estudo deste indicador, abordaremos os seguintes tópicos:

  1. Definição do BW MFI
  2. Estratégia do BW MFI
  3. Diagrama do sistema baseado no BW MFI
  4. Sistema de negociação baseado no BW MFI
  5. Considerações finais

Como em todos os artigos anteriores, utilizaremos a plataforma de negociação MetaTrader 5 e o MetaQuotes Language Editor para trabalhar com códigos e programas. Se você não sabe como baixá-los e utilizá-los, leia a seção "Como escrever código MQL5 no MetaEditor" em um dos artigos anteriores, ela detalha como fazer o download e usar essas ferramentas.

Todas as estratégias discutidas neste artigo são apenas para fins educacionais. Se você decidir usá-las em uma conta real, certifique-se de testá-las primeiro. Além disso, não as execute sem otimização. Lembre-se de que as estratégias podem simplesmente não se adequar ao seu estilo de negociação, pois não existem soluções universais que se encaixam a todos. Também é recomendado que você escreva todos os códigos por conta própria e siga todos os passos mencionados neste artigo. Essa prática ajudará a aprimorar suas habilidades de programação.

Atenção! Todo o conteúdo deste artigo é apresentado "como está", apenas para fins educacionais e não constitui uma recomendação de negociação. O artigo não fornece qualquer garantia de resultados. Tudo o que você implementar baseado neste artigo será por sua conta e risco, o autor não garante nenhum resultado.


Definição do BW MFI

Nesta seção, vamos detalhar o que constitui o Índice de Facilitação do Mercado (Market Facilitation Index, MFI). Este é um dos indicadores técnicos, desenvolvido pelo conhecido trader e autor Bill Williams. Ele é projetado para medir a direção do mercado através da análise de preço e volume. A utilidade deste indicador para um trader reside na sua capacidade de sugerir a futura movimentação do mercado e fornecer uma noção da força do atual movimento de preços. Com base nisso, pode-se determinar se o movimento vai continuar ou se o preço pode vir a se reverter. A vantagem dessas informações é que elas auxiliam a negociar alinhado aos pontos fortes do mercado e a tomar decisões embasadas.

Para compreender a situação, analisamos o MFI e o volume. Com base nisso, temos as seguintes possibilidades:

  • Se o valor do BW MFI aumenta e o volume cresce, isso indica o interesse dos participantes do mercado neste instrumento financeiro.
  • Se o valor do BW MFI diminui e o volume reduz, isso indica uma diminuição no interesse dos participantes neste instrumento financeiro.
  • Se o valor do BW MFI aumenta, mas o volume diminui, isso sinaliza que o volume não está apoiando o movimento atual.
  • Se o valor do BW MFI diminui, enquanto o volume aumenta, isso indica que o mercado estabeleceu um equilíbrio entre compradores e vendedores.

Agora, vamos examinar como calcular o BW MFI manualmente. Entender como um indicador é calculado permite uma melhor compreensão do conceito subjacente. Na realidade, não é necessário realizar nenhum cálculo, pois existe um indicador já preparado incorporado no MetaTrader 5. Para calcular o valor do índice BW MFI, deve-se dividir o resultado da diferença entre o máximo e o mínimo pelo volume.

BW MFI = (High - Low) / Volume

Onde:

High — preço máximo;
Low — preço mínimo;
Volume — volume atual.

Mas, como mencionei acima, na verdade, não é necessário calcular nada. Tudo o que você precisa fazer é selecionar um indicador já pronto na lista do MetaTrader 5. A seguir, explicarei como fazer isso.

Abra o terminal de negociação MetaTrader 5, clique no menu "Inserir" -> "Indicadores" -> "Bill Williams" -> Market Facilitation Index. A figura abaixo mostra isso:

Executando o BW MFI no gráfico

Após selecionar o MFI no menu, a janela de opções do indicador será aberta. Ela se parece com isso:

do BW MFIJanela

1 — cor do indicador quando o MFI e os volumes estão aumentando.

2 — cor do indicador quando o MFI e os volumes estão diminuindo.

3 — cor do indicador quando o MFI está aumentando, mas os volumes estão diminuindo.

4 — cor do indicador quando o MFI está diminuindo, mas os volumes estão aumentando.

5 — tipo de volume (por tick ou real).

6 — espessura das barras do indicador.

Selecione os parâmetros adequados para o indicador, pressione o botão OK e o indicador será iniciado no gráfico, como mostrado abaixo:

Indicador BW MFI no gráfico

Como você pode ver na figura anterior, o indicador é exibido em uma janela adicional do gráfico. Ele é representado como barras de tamanhos e cores diferentes, dependendo do preço e do volume, com base no cálculo do BW MFI. Cada cor e valor do indicador indicam um certo estado do movimento de preço.

  • Uma barra verde significa que tanto o BW MFI quanto o volume estão aumentando, indicando que os participantes do mercado estão interessados neste instrumento.
  • Uma barra marrom indica que o MW MFI e o volume estão diminuindo, sinalizando uma falta de interesse no instrumento financeiro por parte dos participantes do mercado.
  • Uma barra azul indica que o índice BW MFI está aumentando e o volume está diminuindo, sugerindo que o movimento do mercado não é suportado pelo volume.
  • Uma barra rosa indica que o BW MFI está diminuindo e o volume está aumentando, sinalizando um equilíbrio entre compradores e vendedores.

Estratégia do BW MFI

Neste tópico, discutiremos algumas estratégias simples que se baseiam no conceito fundamental do BW MFI. Gostaria de lembrar mais uma vez que todas as estratégias são apresentadas estritamente para fins educacionais. Para alcançar resultados, será necessária a otimização, modificação dos parâmetros ou a combinação do MFI com outros indicadores técnicos. Portanto, é extremamente importante testar essas estratégias com cuidado, como qualquer outra, antes de aplicá-las em uma conta real. É crucial assegurar-se de que você será capaz de utilizá-las de forma benéfica em suas negociações.

Estratégia 1: BW MFI - estado do movimento

Esta estratégia irá determinar o estado de movimento do BW MFI. Para isso, analisaremos os valores do BW MFI e dos volumes. Assim, podemos ter quatro estados possíveis:

  • O valor atual do BW MFI é maior que o anterior, e o volume atual também é maior que o anterior. Nesse caso, uma barra verde é exibida no gráfico. Definiremos isso como o estado "verde".
  • O valor atual do BW MFI é menor que o anterior, e o volume atual também é menor que o anterior. Nesse caso, uma barra marrom é exibida no gráfico. Definiremos isso como o estado de "enfraquecimento".
  • O valor atual do BW MFI é maior que o anterior, mas o volume atual é menor que o anterior. A barra será azul, indicando um estado "falso".
  • O valor atual do BW MFI é menor que o anterior, mas o volume atual é maior que o anterior. A barra será rosa, indicando um estado chamado de "agachamento".

Se olharmos de forma esquemática:

  • BW MFI atual > BW MFI anterior e volume atual > volume anterior ==> Estado verde, barra verde
  • BW MFI atual < BW MFI anterior e volume atual < volume anterior ==> Estado de enfraquecimento - barra marrom
  • BW MFI atual > BW MFI anterior e volume atual < volume anterior ==> Estado falso - barra azul
  • BW MFI atual < BW MFI anterior e volume atual > volume anterior ==> Estado de gachamento - barra rosa

Estratégia 2: sinais do BW MFI

Esta estratégia gerará sinais com base no estado do BW MFI. Inicialmente, é preciso determinar o estado do mercado da mesma forma que na estratégia anterior. Em seguida, baseando-se no estado, a estratégia formará um sinal de ação favorável. Segundo essa estratégia, teremos quatro sinais conforme os estados:

  • Se o estado for verde, será um sinal de uma oportunidade favorável de entrada.
  • No caso do estado de enfraquecimento, a estratégia gerará um sinal de possível saída.
  • Um estado falso indicará a probabilidade de uma falsa ruptura.
  • Com um agachamento, será formado um sinal de equilíbrio do mercado.

Estratégia 3: Combinando BW MFI e MA

Nesta estratégia, analisaremos os indicadores de dois indicadores - BW MFI e média móvel. Dependendo dos resultados da análise, geraremos sinais de compra e venda. Se a condição do MFI for verde e o preço de fechamento estiver acima da média móvel, será um sinal de compra. Se a condição for verde e o preço de fechamento estiver abaixo da média móvel, será um sinal de venda. A análise técnica permite combinar diferentes ferramentas para analisar uma situação sob diferentes perspectivas e tomar decisões mais informadas. Este indicador pode ser combinado com outras ferramentas, como níveis de suporte e resistência, MACD e outros indicadores que irão filtrar e confirmar os sinais gerados.

Então temos:

  • Status verde, preço de fechamento > MA ==> sinal de compra
  • Status verde, preço de fechamento < MA ==> sinal de venda

Diagrama do sistema baseado no BW MFI

Nesta seção do artigo, abordamos uma etapa crucial no desenvolvimento de qualquer sistema de negociação - a criação de um plano passo a passo para a estratégia. Tal diagrama será extremamente útil durante a programação da estratégia, pois visualiza cada etapa. Portanto, esta etapa pode ser considerada como a fase de planejamento da estratégia futura.

 Estratégia 1: BW MFI - estado do movimento

Para essa estratégia, criaremos um sistema de negociação que permita receber um sinal acerca do movimento do BW MFI. Para tanto, a cor do indicador será analisada, que por sua vez é determinada ao comparar quatro valores em cada tick, a fim de determinar suas posições relativas. Esses quatro valores são os valores atuais e anteriores do BW MFI, assim como os volumes atuais e anteriores. O programa checará esses valores e definirá suas posições. O primeiro estado ocorre quando o atual BW MFI é maior que o anterior e o volume atual supera o anterior. Nesse caso, o sistema de negociação mostrará o comentário "Green State - Green Bar" no gráfico. O segundo estado ocorre quando o atual BW MFI é menor que o anterior e o volume atual é menor que o anterior. Nesse caso, o sistema de negociação exibirá o comentário "Fade State - Brown Bar" no gráfico. O terceiro caso ocorre quando o atual BW MFI é maior que o anterior, mas o valor do volume atual é menor que o anterior. O sistema exibirá um comentário acerca de um sinal falso no gráfico: "Fake State - Blue Bar". O quarto e último caso ocorre quando o atual BW MFI é menor que o anterior, porém o volume atual supera o anterior. Nesse caso, o sistema exibirá o comentário "Squat State - Pink Bar".

A figura abaixo apresenta o fluxo de desenvolvimento de uma estratégia para determinar o estado do movimento:

Diagrama de estratégia por estado de movimento

Estratégia 2: sinais do BW MFI

De acordo com esta estratégia, com base na determinação do estado das barras do indicador, conceberemos um sistema de negociação que pode ser usado para gerar um sinal assentado nesse estado do BW MFI. O sinal será também exibido na forma de um comentário no gráfico. Para tal, será necessário desenvolver um programa que verifique os quatro estados em cada tick e devolva o sinal correspondente. Se o sistema de negociação identificar que o BW MFI exibe um estado verde, o programa deve apresentar um comentário no gráfico com o sinal "Find a good entry". Se o sistema identificar o segundo estado (desvanecimento), um comentário com o sinal "Find a good exit" será exibido no gráfico. Se o sistema determinar que o terceiro estado do indicador é falso, o comentário no gráfico irá indicar um possível falso rompimento: "False breakout probability". E, por fim, se o quarto estado do indicador for identificado, isto é, agachamento, o comentário no gráfico indicará um equilíbrio de forças no mercado: "Market is Balanced".

A figura abaixo apresenta o esquema para desenvolver uma estratégia que gera tais sinais:

Diagrama de estratégia com sinais BW MFI

Estratégia 3: Combinando BW MFI e MA

O sistema que opera de acordo com esta estratégia deve exibir um comentário no gráfico com sinais de compra e venda com base no BW MFI e numa média móvel simples. Para tal, iremos monitorizar constantemente os preços de fechamento, o valor atual da média móvel simples e o status do BW MFI. Lembro que os estados são determinados em cada tick. Se o preço de fechamento estiver acima do valor atual da média móvel simples e o estado atual do BW MFI for verde, o sistema de negociação exibirá um sinal de compra como um comentário no gráfico. Se o preço de fechamento estiver abaixo do valor atual da média móvel simples e, ao mesmo tempo, o estado atual do BW MFI for verde, nesse caso, o sistema de negociação exibirá um sinal de venda no gráfico. Em qualquer outra situação, nenhum comentário deve ser exibido.

A figura abaixo mostra o esquema de desenvolvimento da estratégia com base nos indicadores BW MFI e MA:

Diagrama de estratégia BW MFI com MA

Sistema de negociação baseado no BW MFI

Nesta seção do artigo, construiremos sistemas de negociação para cada estratégia que discutimos. Começaremos por desenvolver um programa simples que vai exibir no gráfico um comentário com o valor atual do BW MFI. Este programa será posteriormente usado como base para outras estratégias. Aqui estão as etapas para criar o programa:

Primeiro, criamos um array BWMFIArray utilizando a função double. Double é um tipo numérico com ponto flutuante, ou seja, um valor que contém uma parte fracionária.

double BWMFIArray[];

A seguir, definimos a ordenação dos dados nos arrays com o uso da função ArraySetAsSeries. Os parâmetros desta função são:

  • array[] — definimos os arrays criados, BMWFIArray.
  • flag — definimos a direção da indexação no array, true.
ArraySetAsSeries(BWMFIArray,true);

Depois, criamos uma variável do tipo inteiro, BWMFIDef, e definimos o indicador 'Bill Williams Market Facilitation Index' usando a função iBWMFI. Essa função retorna o identificador do indicador. Os parâmetros desta função são:

  • symbol — nome do símbolo; usamos é _SYMBOL, ou seja, calculamos o indicador usando o símbolo do gráfico atual.
  • period — período gráfico para cálculo; usamos o valor _PERIOD, o que significa que o indicador será calculado no período de tempo atual.
  • applied_volume — tipo de volumes usados para calcular o indicador. Usaremos volumes de ticks (VOLUME_TICK).
int BWMFIDef=iBWMFI(_Symbol,_Period,VOLUME_TICK);

Então, definimos os dados e armazenamos os resultados em BWMFIArray com o uso da função CopyBuffer.

  • indicator_handle — identificador do indicador, BWMFIDef
  • buffer_num — número do buffer do indicador, definimos como 0
  • start_pos — estabelecemos a posição inicial do cálculo, definimos como 0
  • count — quantidade de dados a serem copiados, especificamos 3
  • buffer[] — definimos o array de preços para copiar, usamos BWMFIArray BWMFIArray
CopyBuffer(BWMFIDef,0,0,3,BWMFIArray);

Obtemos o valor atual de BWMFI. Para isso, inicialmente, criamos uma variável double, BWMFIVal. Posteriormente, usamos a função NormalizeDouble para arredondamento.

  • value — valor atual do BWMFIArray[0].
  • digits — número de casas decimais, 5.
double BWMFIVal=NormalizeDouble(BWMFIArray[0],5);

Finalmente, usamos a função Comment para exibir no gráfico o valor atual do BW MFI.

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

O código completo desse sistema de negociação se apresenta assim:

//+------------------------------------------------------------------+
//|                             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);
  }
//+------------------------------------------------------------------+

Para compilar o código, é necessário garantir que não existem erros ou avisos. Após isso, o programa compilado deve aparecer no navegador do terminal de negociação MetaTrader 5, na pasta Experts:

Programa BW MFI no navegador

Executamos o programa a partir do Navegador clicando duas vezes no arquivo 'Simple Market Facilitation Index' ou arrastando-o para o gráfico. Depois disso, a janela do EA aparecerá:

Janela do BW MFI

Habilitamos a negociação automática (Allow Algo Trading), clicamos em OK e o programa será executado no gráfico conforme mostrado abaixo:

Programa Simple BW MFI no gráfico

Abaixo temos exemplos de sinais que esse tipo de EA pode gerar com esta estratégia:

Sinais da estratégia Simple BW MFI

No gráfico anterior, aparece no canto superior esquerdo o comentário gerado pelo software com o valor atual do BW MFI.

Estratégia 1: BW MFI - estado do movimento

Vamos dar uma olhada no código completo dessa estratégia:

//+------------------------------------------------------------------+
//|                                     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");
     }
  }
//+------------------------------------------------------------------+

Essas são as diferenças neste código:

Crie dois arrays (BWMFIArray e volArray) e definimos a classificação dos dados nesses arrays usando a função 'ArraySetAsSeries'.

   double BWMFIArray[];
   double volArray[];
   ArraySetAsSeries(BWMFIArray,true);
   ArraySetAsSeries(volArray,true);
Criamos variáveis inteiras para BWMFiDef e volDef. Determinamos o BW MFI usando a função iBWMFI e os volumes usando a função iVolumes. A função retorna os identificadores do indicador. Parâmetros:
  • symbol — nome do símbolo; usamos é _SYMBOL, ou seja, calculamos o indicador usando o símbolo do gráfico atual.
  • period — período gráfico para cálculo; usamos o valor _PERIOD, o que significa que o indicador será calculado no período de tempo atual.
  • applied_volume — tipo de volumes usados para calcular o indicador. Usaremos volumes de ticks (VOLUME_TICK).
   int BWMFIDef=iBWMFI(_Symbol,_Period,VOLUME_TICK);
   int volDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

Definimos os dados e armazenamos os resultados em volArray usando a função CopyBuffer

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

Determinaremos os valores atuais e anteriores do indicador e volumes BW MFI:

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

Essas são asa condições da estratégia:

No caso de barra verde

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

No caso de barra marrom

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

No caso de barra azul

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

No caso de barra rosa

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

Depois de compilar o código e iniciar o programa a partir do Navegador, o EA começará a trabalhar no gráfico:

Programa Movement Status no gráfico

Vemos que o Expert Advisor está anexado ao gráfico com seu ícone no canto superior direito. Agora estamos prontos para receber sinais para esta estratégia. Abaixo podemos ver exemplos de sinais de teste.

No caso do estado verde:

Programa Movement Status - sinal verde

 

Na captura de tela acima vemos um exemplo de um sinal verde, exibido no canto superior esquerdo.

No caso do estado de desvanecimento:

Movement Status - sinal de desvanecimento

No canto esquerdo do gráfico, é exibido um comentário com um sinal de desvanecimento.

Em caso de estado falso:

Программа Movement Status - sinal falso

Novamente temos um comentário no gráfico, desta vez com um sinal falso:

No caso do estado de agachamento:

Programa Movement Status - sinal de agachamento

Vemos o comentário da condição em questão no canto superior esquerdo do gráfico. 

Estratégia 2: sinais do BW MFI

Abaixo vemos o código para a segunda estratégia que gera sinais usando o 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");
     }
  }
//+------------------------------------------------------------------+

Essas são as diferenças deste código:

Declaramos variáveis booleanas para quatro estados: verde, desvanecimento, falso e agachamento de acordo com as condições 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;

Essas são asa condições da estratégia:

Em caso de estado verde:

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

Em caso de estado desvanecimento:

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

Em caso de estado falso:

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

No caso do estado de agachamento:

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

Compilamos o código e executamos o programa na janela Navegador. O EA funcionará no gráfico assim:

Programa BW MFI signals no gráfico

Podemos ver que o Expert baseado nos sinais do BW MFI está anexado ao gráfico; há um ícone correspondente no canto superior direito. Abaixo estão exemplos de sinais gerados por essa estratégia.

Sinal de que foi encontrada uma boa oportunidade de entrada:

Sinal Find a good entry

Como você pode ver, no gráfico acima, um comentário sobre a possibilidade de entrar no mercado é exibido no canto superior esquerdo do gráfico.

Sinal de que foi encontrada uma boa oportunidade de saída:

Sinal Find a good exit

Como você pode ver, no gráfico acima, um comentário sobre a possibilidade de sair do mercado é exibido no canto superior esquerdo do gráfico.

Esse é um exemplo de um sinal sobre um possível falso rompimento:

Sinais do BW MFI - sinal de falso rompimento

Na captura de tela acima, um comentário sobre a probabilidade de um falso rompimento é exibido no canto superior esquerdo do gráfico.

Esse é um exemplo de um sinal de equilíbrio de mercado:

Sinais do BW MFI - sinal de equilíbrio

No canto superior esquerdo do gráfico, há um comentário indicando um sinal de mercado equilibrado.

Estratégia 3: Combinando BW MFI e MA

Vamos dar uma olhada no código completo desse sistema de negociação baseado em uma estratégia na qual combinamos o BW MFI e a média móvel.

//+------------------------------------------------------------------+
//|                                               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("");
  }
//+------------------------------------------------------------------+

Essas são as diferenças neste código:

Criamos mais dois arrays para maArray usando a função double e pArray por meio da função MqlRates.

   double maArray[];
   MqlRates pArray[];

A seguir, definimos a ordenação dos dados nos arrays com o uso da função ArraySetAsSeries.

ArraySetAsSeries(maArray,true);

Criamos uma variável inteira do tipo maDef e definimos a média móvel usando a função iMA, que retorna o identificador do indicador. Os parâmetros desta função são:

  • symbol — nome do símbolo; usamos _SYMBOL — o símbolo do gráfico atual.
  • period — período gráfico para cálculo; usamos o valor _PERIOD, o que significa que o indicador será calculado no período de tempo atual, PERIOD_CURRENT.
  • ma_period — período de cálculo da média móvel; no nosso exemplo é 10.
  • ma_shift — deslocamento horizontal do MA. Definimos como 0 para não deslocar.
  • ma_method — tipo de média móvel, usamos um SMA simples (Simple Moving Average)
  • applied_price — determina o tipo de preço usado para o cálculo; usamos o preço de fechamento
int maDef=iMA(_Symbol,_Period,10,0,MODE_SMA,PRICE_CLOSE);

Obtemos os dados históricos de MqlRates usando a função CopyRates:

  • symbol_name — nome do símbolo para cálculo do indicador, _Symbol — símbolo atual.
  • timeframe — período gráfico para cálculo, _Period significa o período gráfico atual.
  • start_pos — posição do início do cálculo do indicador, especificamos 0 para o cálculo a partir da posição atual
  • count — quantidade de dados a serem copiados, especificamos 10
  • rates_array[] — array aonde copiamos os dados, pArray
int data=CopyRates(_Symbol,_Period,0,10,pArray);

Então, definimos os dados e armazenamos os resultados em BWMFIArray com o uso da função 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);

Obtemos os valores atuais do BW MFI, volumes, média móvel simples e preço de fechamento, além dos valores anteriores de BW MFI e volumes.

   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;

Criamos variáveis booleanas para quatro estados: verde, desvanecimento, falso e agachamento.

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

Essas são as condições dessa estratégia:

Para gerar um sinal de compra

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

Para gerar um sinal de venda

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

De outra forma

      else
         Comment("");

Depois de compilar o código e executar o programa no gráfico, o EA começará a funcionar e gerar sinais:

Programa da estratégia do BW MFI com MA no gráfico

Para gerar um sinal de compra

Estratégia do BW MFI com MA - sinal de compra

No canto superior esquerdo do gráfico, é exibido um comentário com o sinal e os valores.

Para gerar um sinal de venda

Estratégia do BW MFI com MA - sinal de venda

No canto superior esquerdo do gráfico, é exibido um comentário com o sinal e os valores. Desse modo, concluímos nosso tema sobre como projetar e construir um sistema de negociação usando o Índice de Facilitação de Mercado.

Considerações finais

Depois de ler este artigo, esperamos que você tenha adquirido um sólido entendimento do conceito fundamental do indicador técnico Market Facilitation Index, desenvolvido por Bill Williams. Analisamos como calcular manualmente o indicador e como implementá-lo em um gráfico na plataforma de negociação MetaTrader 5, bem como interpretar seus resultados. Demonstramos também como ele pode ser aplicado. Para isso, exploramos diversas estratégias simples baseadas no BW MFI:

  • A estratégia "BW MFI - Movement Status": ela pode ser usada para gerar automaticamente sinais sobre as condições de mercado com base na cor das barras do indicador (estados: verde, desvanecimento, falsos e agachamento).
  • A estratégia "Sinais com base no BW MFI": ela pode ser usada para receber sinais sobre a possibilidade de tomar uma decisão (procurando uma boa oportunidade de entrada ou saída, sinalizando uma possível falso rompimento ou o estabelecimento de um equilíbrio no mercado) com base nas leituras do BW MFI.
  • A estratégia "MFI e MA": ela pode ser usada para gerar sinais de compra e venda com base nos valores do BW MFI e uma média móvel simples.

O próximo passo que recomendamos é tentar usar outras ferramentas técnicas além das já mencionadas para obter resultados ainda melhores e obter mais informações sobre o mercado. Além disso, antes de aplicar qualquer estratégia em uma conta real, certifique-se de testá-la para garantir que ela seja adequada para você. Lembre-se que todas as informações apresentadas são para fins educacionais. Neste artigo, também elaboramos planos passo a passo para cada estratégia discutida, o que facilitará a criação de um sistema de negociação para operar no terminal MetaTrader 5. Estudamos e as criamos usando a linguagem MQL5.

Esperamos que este artigo seja útil para você e o ajude a encontrar novas ideias e melhorar seus resultados comerciais. Também esperamos que você tenha tentado escrever todos os códigos deste artigo por conta própria, criando seus próprios programas - a prática é uma parte crucial de qualquer processo de aprendizado e, neste caso, permite aprimorar diretamente suas habilidades de programação. Se você achou este artigo útil, convidamos você a ler nossos artigos anteriores desta série para aprender a desenvolver sistemas de negociação com base em diversos indicadores técnicos populares.

Traduzido do Inglês pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/en/articles/12172

Desenvolvendo um fator de qualidade para os EAs Desenvolvendo um fator de qualidade para os EAs
Nesse artigo vamos explicar como desenvolver um fator de qualidade para ser retornado pelo seu EA no testador de estratégia. Iremos mostrar duas formas de cálculo conhecidas (Van Tharp e Sunny Harris).
Teoria das Categorias em MQL5 (Parte 3) Teoria das Categorias em MQL5 (Parte 3)
A Teoria das Categorias representa um segmento diversificado e em constante expansão da matemática, que até agora está relativamente pouco explorado na comunidade MQL5. Esta sequência de artigos visa elucidar algumas das suas concepções com o intuito de constituir uma biblioteca aberta e potencializar ainda mais o uso deste notável setor na elaboração de estratégias de negociação.
Algoritmos de otimização populacionais: Algoritmo do macaco (MA) Algoritmos de otimização populacionais: Algoritmo do macaco (MA)
Neste artigo, estaremos analisando o algoritmo do macaco (Monkey Algorithm, MA). A habilidade destes animais ágeis para superar obstáculos complexos e atingir as partes mais inacessíveis das árvores foi a inspiração para a concepção do MA.
Desenvolvendo um sistema de Replay - Simulação de mercado (Parte 14): Nascimento do SIMULADOR (IV) Desenvolvendo um sistema de Replay - Simulação de mercado (Parte 14): Nascimento do SIMULADOR (IV)
Neste artigo continuaremos a fase de desenvolvimento do simulador. Mas agora, vamos ver como criar de fato um movimento do tipo RANDOM WALK. Este tipo de movimentação é muito interessante, pois tudo envolvido no mercado de capitais tem como base este tipo de movimentação. Além do mais você vai começar a entender alguns conceitos importantes para quem faz estáticas de mercado.