Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Telegram!
Participe de nossa página de fãs
Script interessante?
Coloque um link para ele, e permita que outras pessoas também o avaliem
Você gostou do script?
Avalie seu funcionamento no terminal MetaTrader 5
Visualizações:
125
Avaliação:
(30)
Publicado:
2025.04.03 11:16
\MQL5\Include\fxsaber\Calendar\
DST.mqh (11.46 KB) visualização
\MQL5\Experts\
Freelance MQL5 Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance

O MetaTrader5 tem um histórico volumétrico atualizado de eventos fundamentais do calendário, cujos dados podem ser acessados programaticamente.


Essa biblioteca permite que você trabalhe de forma conveniente com esses dados. Em particular, para usá-los no testador e na negociação real.


O trabalho com a biblioteca é mostrado na forma de comentários do código-fonte dos exemplos.


Obtenção de dados históricos.

// O script gera dados históricos.

#include <fxsaber\Calendar\Calendar.mqh> // Calendário - análise fundamental do histórico e em tempo real.

void OnStart()
{
  CALENDAR Calendar;
  
  // Registrou eventos para todas as moedas (NULL), começando pela de menor importância (NONE).
  const int Size = Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, D'2020.12.07', D'2020.12.08');
  
  // Imprimiu-os.
  for (int i = 0; i < Size; i++)
    Print(Calendar[i].ToString());
}


Resultado.

2020.12.07 AllDay EUR 0 День Конституции(constitution-day), Испания(ES) |  |  |  | 
2020.12.07 00:00 AUD 3 Выступление председателя Резервного Банка Австралии Лоу(rba-governor-lowe-speech), Австралия(AU) |  |  |  | 
2020.12.07 01:50 JPY 1 Международные резервы(jp-foreign-reserves), Япония(JP) | $1384.6 B |  | $1384.4 B | 
2020.12.07 02:30 AUD 1 Количество объявлений о вакансиях от ANZ м/м(anz-job-advertisements-mm), Австралия(AU) | 13.9% | 0.8% | 9.4% | 
2020.12.0705:00 CNY 1 Объем импорта USD г/г(imports-usd-yy), Китай(CN) | 4.5% | 4.4% | 4.7% | 
2020.12.0705:00 CNY 1 Объем экспорта USD г/г(exports-usd-yy), Китай(CN) | 21.1% | 3.6% | 11.4% | 
2020.12.0705:00 CNY 2 Торговый баланс(trade-balance), Китай(CN) | ¥507.1 B | ¥271.31 B | ¥401.75 B | 
2020.12.0705:00 CNY 2 Торговый баланс USD(trade-balance-usd), Китай(CN) | $75.42 B | $52.55 B | $58.44 B | 
2020.12.0705:00 CNY 1 Объем импорта г/г(imports-yy), Китай(CN) | -0.8% | -0.6% | 0.9% | 
2020.12.0705:00 CNY 1 Объем экспорта г/г(exports-yy), Китай(CN) | 14.9% | 2.2% | 7.6% | 
2020.12.07 07:00 JPY 1 Индекс совпадающих индикаторов(coincident-index), Япония(JP) | 89.7 | 81.8 | 81.1 | 84.8
2020.12.07 07:00 JPY 1 Индекс ведущих экономических индикаторов(leading-index), Япония(JP) | 93.8 | 92.7 | 92.5 | 93.3
2020.12.07 07:00 JPY 1 Индекс совпадающих индикаторов Японии м/м(coincident-index-mm), Япония(JP) | 4.9% |  | 1.7% | 2.4%
2020.12.07 07:00 JPY 1 Индекс ведущих экономических индикаторов м/м(leading-index-mm), Япония(JP) | 0.5% |  | 4.0% | 4.2%
2020.12.07 08:00 ZAR 1 Валовые международные резервы(gross-international-reserves), Южно-Африканская Республика(ZA) | $53.76 B | $54.129 B | $53.658 B | 
2020.12.07 08:00 ZAR 1 Чистые международные резервы(net-international-reserves), Южно-Африканская Республика(ZA) | $51.257 B | $52.719 B | $51.364 B | 
2020.12.07 09:00 EUR 2 Промышленное производство г/г(industrial-production-yy), Германия(DE) | -3.0% | -11.4% | -7.3% | -6.7%
2020.12.07 09:00 EUR 2 Промышленное производство м/м(industrial-production-mm), Германия(DE) | 3.2% | 7.7% | 1.6% | 2.3%
2020.12.07 09:00 NOK 1 Производство в обрабатывающей промышленности м/м(manufacturing-production-mm), Норвегия(NO) | 0.6% | 0.1% | -0.5% | 
2020.12.07 09:00 NOK 1 Производство в обрабатывающей промышленности г/г(manufacturing-production-yy), Норвегия(NO) | -2.7% | -3.3% | -3.4% | 
2020.12.07 09:00 NOK 1 Промышленное производство м/м(industrial-production-mm), Норвегия(NO) | -3.5% | 0.0% | -1.7% | -1.6%
2020.12.07 09:00 NOK 1 Промышленное производство г/г(industrial-production-yy), Норвегия(NO) | 0.0% | 6.9% | 6.3% | 

    Você pode compará-lo com o próprio terminal MT5.


    Obtenção dos próximos eventos.

    // O script exibe os próximos eventos.
    
    #include <fxsaber\Calendar\Calendar.mqh> // Calendário - análise fundamental do histórico e em tempo real.
    
    void OnStart()
    {
      CALENDAR Calendar;
      
      string Currencies[2];
      
      // Obter as moedas do caractere atual.
      Currencies[0] = ::SymbolInfoString(_Symbol, SYMBOL_CURRENCY_BASE);
      Currencies[1] = ::SymbolInfoString(_Symbol, SYMBOL_CURRENCY_PROFIT);
        
      // Anotou os próximos eventos importantes por moedas de símbolo.
      Calendar.Set(Currencies);
      
      Print(Calendar.ToString()); // Imprimiu-os.
    }

    Essa incorporação em sistemas de informação permite informar sobre os próximos eventos importantes do calendário em Expert Advisors/indicadores.


    Backtest em dados fundamentais.


    Abaixo está um Expert Advisor que negocia NonFarm Payrolls comparando os valores atuais e previstos.

    // Expert Advisor para negociação em MT4/5 - Testar o histórico de dados fundamentais.
    
    #define  CALENDAR_FILENAME "Calendar.bin" // Nome do arquivo para leitura/gravação do Calendário.
    #property tester_file CALENDAR_FILENAME  // Especifica que o MT5-Tester coleta esse arquivo.
    
    #include <fxsaber\Calendar\Calendar.mqh> // Calendário - análise fundamental do histórico e em tempo real.
    
    input group "Calendar"
    input string inCurrency = "USD";        // Moeda
    input string inFilterName = "payrolls"; // FilterName
    
    input group "EA"
    input int inTP = 1000; // TakeProfit
    input int inSL = 1000; // StopLoss
    input bool inReverse = true; // Direção da negociação
    
    CALENDAR Calendar; // Objeto com dados do calendário.
    
    int OnInit()
    {      
      bool Res = false;
      
      if (MQLInfoInteger(MQL_TESTER)) // Se estiver trabalhando no Tester
      {
        Res = Calendar.Load(CALENDAR_FILENAME) &&      // Carregou os eventos do arquivo.
              Calendar.FilterByCurrency(inCurrency) && // Aplicou um filtro de moeda.
              Calendar.FilterByName(inFilterName);     // Aplicou um filtro no nome do evento.
        
        if (!Res)                                      // Se houver problemas com os dados carregados,
          Print("Run the EA in the MT5-Terminal!");    // informou que você precisa obtê-los executando o EA no MT5-Terminal.
      }
    #ifdef __MQL5__
      // Trabalhando no terminal.
      else if (Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, 0, 0) && // Carregou absolutamente todos os eventos (histórico + futuro) do terminal MT5.
               Calendar.Save(CALENDAR_FILENAME))                     // Salve-os em um arquivo.
        MessageBox("You can run the EA in the MT4/5-Tester.");       // Informou que agora podemos trabalhar no MT4/5-Tester.
    #endif // #ifdef __MQL5__
    
      return(!Res);
    }
    
    void OnTick()
    {
      static int Pos = Calendar.GetPosAfter(TimeCurrent()); // Obter a posição do evento no calendário, que é logo após a hora atual.
      
      if ((Pos < Calendar.GetAmount()) &&       // Se você não foi além do Calendário
          (Calendar[Pos].time < TimeCurrent())) // e a hora atual passou do evento.
      {        
        const EVENT Event = Calendar[Pos];      // Recebeu o evento correspondente.
        
        if ((Event.Actual != LONG_MIN) && (Event.Forecast != LONG_MIN)) // Se os valores atuais e previstos do evento forem definidos
        {
          Print(Event.ToString()); // Imprima esse evento em sua totalidade.
    
          if (Event.Actual > Event.Forecast)                                                                          // Se o valor atual for maior que o valor previsto,
            PositionOpen(inReverse, "Act.(" + Event.ActualToString() + ")>(" + Event.ForecastToString() + ")For.");   // abrir uma posição de uma direção.
          else
            PositionOpen(!inReverse, "Act.(" + Event.ActualToString() + ")<=(" + Event.ForecastToString() + ")For."); // Caso contrário, uma direção diferente.
        }
                
        Pos = Calendar.GetPosAfter(TimeCurrent(), Pos); // Obter a posição do evento no calendário, que é logo após a hora atual.
      }
    }
    
    #include <MT4Orders.mqh> // https://www.mql5.com/pt/code/16006
    
    #define  Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
    #define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)
    
    // Abre uma posição com o comentário especificado.
    TICKET_TYPE PositionOpen( const int Type, const string comment )
    {
      return(Type ? OrderSend(_Symbol, OP_SELL, 1, Bid, 0, Bid + inSL * _Point, Bid - inTP * _Point, comment)
                  : OrderSend(_Symbol, OP_BUY, 1, Ask, 0, Ask - inSL * _Point, Ask + inTP * _Point, comment));
    }

    Execute-o uma vez no MT5-Terminal para salvar todos os dados históricos (~60 Mb). Depois disso, eles estarão disponíveis no testador.


    Resultado (por seis anos a preços de abertura H1).


    Recursos.

    • Não usa DLLs, pode ser executado no Marketplace.
    • Operação entre plataformas: no MT4, obtém dados do arquivo.

    Traduzido do russo pela MetaQuotes Ltd.
    Publicação original: https://www.mql5.com/ru/code/32430

    SingleTesterCache SingleTesterCache

    Dados de passagem única do testador.

    Countdown 2.0 Countdown 2.0

    O Countdown é um indicador avançado desenvolvido para traders que desejam acompanhar o tempo restante até o próximo candlestick ou a próxima abertura do mercado de forma clara e eficiente. Com três modos de exibição flexíveis (comentário, bordas do gráfico ou próximo ao preço), este indicador oferece uma solução personalizável para atender às suas necessidades de trading.

    Chute para trás Chute para trás

    Ciclo do algoritmo: quando não houver posições abertas, abra duas posições opostas. Aguarde o fechamento de ambas as posições.

    MA Tendência 2 MA Tendência 2

    Sistema de negociação pelo indicador iMA (Média Móvel, MA). Desenvolvimento da tendência MA.