Como Utilizar o Manipulador de Eventos OnTick para Múltiplas Moedas no MetaTrader 5

Mike 2011.02.02 03:03 16 0 0
Anexo

Se você é trader e utiliza o MetaTrader 5, vai adorar a nova implementação do modo multi-moeda que foi adicionada ao OnTick. Vamos entender como isso funciona e como você pode aproveitar ao máximo essa funcionalidade.

Vantagens:

  • Permite um verdadeiro modo multi-moeda em contas demo e reais.
  • Configurações simples e diretas.
  • A lista de eventos para OnTick pode ser configurada: NovoTick e/ou NovaBar.
  • É possível configurar a lista de símbolos (todos os símbolos do Market Watch ou alguns específicos).
  • Ao trabalhar com símbolos do Market Watch, você pode gerenciar os eventos "on the fly" no OnTick.
  • Não é necessário entender todos os detalhes da implementação. Todo o código está contido em um arquivo incluído.
  • Funciona também no Testador de Estratégias.

O template do Expert Advisor é o seguinte:

//+------------------------------------------------------------------+
//|                                        OnTick(string symbol).mq5 |
//|                                            Copyright 2010, Lizar |
//|                            https://www.mql5.com/ru/users/Lizar |
//+------------------------------------------------------------------+
#define VERSION       "1.00 Build 1 (01 Fab 2011)"

#property copyright   "Copyright 2010, Lizar"
#property link        "https://www.mql5.com/ru/users/Lizar"
#property version     VERSION
#property description "Template do Expert Advisor"
#property description "com manipulador de eventos OnTick(string symbol)"

//+------------------------------------------------------------------+
//|                CONFIGURAÇÕES DO MODO MULTI-MOEDA                       |
//|           do manipulador de eventos OnTick(string symbol)                 |
//|                                                                  |
//| 1.1 Lista de símbolos necessários para continuar com os eventos:             |
#define  SYMBOLS_TRADING    "EURUSD","GBPUSD","USDJPY","USDCHF"
//| 1.2 Se você quiser todos os símbolos do Market Watch, use isso:         |
//#define  SYMBOLS_TRADING    "MARKET_WATCH"
//|     Nota: Selecione apenas um dos métodos, 1.1 ou 1.2.                   |
//|                                                                  |
//| 2.  Tipo de evento para OnTick(string symbol):                        |
#define  CHART_EVENT_SYMBOL CHARTEVENT_TICK 
//|     Nota: o tipo de evento deve corresponder ao                 |
//|                 ENUM_CHART_EVENT_SYMBOL enumeration.             |
//|                                                                  |
//| 3.  Arquivo incluído:                                            |
#include <OnTick(string symbol).mqh>
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Função de inicialização do Expert                                   |
//| Esta função deve ser declarada, mesmo que esteja vazia.                |
//+------------------------------------------------------------------+
int OnInit()
  {
   //--- Adicione seu código aqui...
   return(0);
  }
  
//+------------------------------------------------------------------+
//| Função multi tick do Expert                                      |
//| Use esta função em vez da função padrão OnTick()      |
//+------------------------------------------------------------------+
void OnTick(string symbol)
  {
   //--- Adicione seu código aqui...
   Print("Novo evento no símbolo: ",symbol);
  }
  
//+------------------------------------------------------------------+
//| Função ChartEvent                                              |
//| Esta função deve ser declarada, mesmo que esteja vazia.                |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // id do evento
                  const long& lparam,   // parâmetro de evento do tipo long
                  const double& dparam, // parâmetro de evento do tipo double
                  const string& sparam) // parâmetro de evento do tipo string
  {
   //--- Adicione seu código aqui...
  }
  
//+------------------------------------------------------------------+
//| Função de desinicialização do Expert                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   //--- Adicione seu código aqui...
  }

//+------------------------------ fim -------------------------------+

Algumas funcionalidades:

1. Configurações

Todas as configurações podem ser ajustadas usando as diretivas #define. Para o funcionamento correto da função OnTick(string symbol), você precisa especificar apenas dois parâmetros: SYMBOLS_TRADING e CHART_EVENT_SYMBOL. O primeiro (SYMBOLS_TRADING) define a lista de símbolos usados para os eventos. O segundo (CHART_EVENT_SYMBOL) define os tipos de eventos para todos os símbolos.

A lista SYMBOLS_TRADING pode ser definida assim:

#define  SYMBOLS_TRADING    "EURUSD","GBPUSD","USDJPY","USDCHF"

A lista deve ser preparada como strings, separadas por vírgula. A lista termina com o fim da linha.

A SYMBOLS_TRADING pode ser definida da seguinte forma:

#define  SYMBOLS_TRADING    "MARKET_WATCH"

Dessa forma, todos os símbolos do Market Watch serão utilizados. Este método pode ser usado para alterar a lista de símbolos "on the fly". Basta adicionar ou remover os símbolos desejados do Market Watch.

O tipo de evento CHART_EVENT_SYMBOL é definido por flag ou pela combinação deles da enumeração ENUM_CHART_EVENT_SYMBOL. Veja mais detalhes aqui (em russo).

Aqui estão exemplos de tipos de eventos:

//--- Exemplo 1. Evento OnTick:
#define  CHART_EVENT_SYMBOL CHARTEVENT_TICK 
//--- Exemplo 2. NovaBar M1 e Nova Bar H1:
#define  CHART_EVENT_SYMBOL CHARTEVENT_NEWBAR_H1|CHARTEVENT_NEWBAR_M1

2.  Arquivo incluído.

O #include OnTick(string symbol).mqh é necessário, pois este arquivo contém a implementação da função OnTick(string symbol). Ele fornece uma maneira simples de usar todas as funções de OnTick. Algumas funções padrão devem ser declaradas no código do Expert Advisor, mesmo que estejam vazias.

3. Testador de Estratégias.

Como você sabe, no momento, o OnChartEvent não é suportado no Testador de Estratégias. Para resolver esse problema, variáveis globais são usadas para lidar com os eventos. Esse método é utilizado apenas no Testador de Estratégias; em todos os outros casos (em contas reais/demo), os eventos são processados via OnChartEvent.

Aqui está a funcionalidade: no Testador de Estratégias, o OnTick(string symbol) funcionará nos ticks do símbolo especificado nas configurações do Testador de Estratégias. Em outras palavras, ele funciona como o OnTick(), mas também é chamado quando novos ticks são recebidos nos símbolos selecionados. Para trabalhar com o Testador de Estratégias, SYMBOLS_TRADING deve ser especificado como uma lista de símbolos.

4. "Espiões".

Ele utiliza os "espiões" (agentes indicadores). O arquivo "Spy Control panel MCM.ex5" deve estar localizado na pasta \MQL5\Indicators\.

5. Os arquivos do arquivo compactado devem ser extraídos na pasta \MQL5. Os arquivos necessários são:

    • /MQL5/Experts/OnTick(string symbol).mq5 - Exemplo de Expert Advisor, código fonte do template;
    • /MQL5/Experts/OnTick(string symbol).ex5 - Exemplo de arquivo compilado do Expert Advisor;
    • /MQL5/Indicators/Spy Control panel MCM.mq5 - Agente-indicador, código fonte;
    • /MQL5/Indicators/Spy Control panel MCM.ex5 - Agente-indicador, arquivo compilado;
    • /MQL5/Include/OnTick(string symbol).mqh - arquivo incluído com todas as funções necessárias para a implementação da função OnTick(string symbol).
Lista
Comentário 0