Bibliotecas: Calendário - página 8

 
AdrianR007 #:
Estou usando o código do seu exemplo, mas o valor atual não está sendo atualizado quando o evento ocorre. Alguma sugestão sobre isso?

Esse exemplo foi criado para demonstrar como o calendário funciona no Tester. Ele vem com esta instrução.

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

Infelizmente, você continua a fazer afirmações inarticuladas, o que me leva a levantar a hipótese de "o que ele quis dizer?".

 
fxsaber #:

Este exemplo foi criado para demonstrar como o calendário funciona no Tester. Ele vem com as seguintes instruções.

Infelizmente, você continua fazendo afirmações inarticuladas, o que me leva a levantar a hipótese de "o que ele quis dizer com isso?".

No momento em que a notícia ocorre, o valor Current não está sendo atualizado em relação ao valor esperado, portanto a operação não é executada. Estou falando da operação em um item de notícias em tempo real e não em um teste. No modo de teste, ela funciona muito bem.
 
AdrianR007 #:
No momento em que a notícia ocorre, o valor Current não está sendo atualizado em relação ao valor esperado, portanto, a operação não é executada. Estou falando sobre a operação em um item de notícias em tempo real e não em um teste. No modo de teste, ela funciona muito bem.

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação.

Bibliotecas: Calendário

BillionerClub, 2023.02.23 19:35

Não é uma biblioteca autoatualizável. Use o id do calendário para obter dados atualizados do mql5.


 
Enrique Dangeroux #:

Obrigado, Enrique. Talvez você tenha um exemplo para fazer isso?
 
AdrianR007 #:
Obrigado, Enrique. Talvez você tenha um exemplo para fazer isso?

Não tenho tempo para dar aulas básicas de codificação. Leia a documentação ou pergunte nos fóruns.

Em uma observação lateral. Se você quiser negociar as notícias, o calendário MQL é inútil. Há atrasos de segundos, minutos e até horas.

 
AdrianR007 #:
No momento em que a notícia ocorre, o valor Current não está sendo atualizado em relação ao valor esperado, portanto, a operação não é executada. Estou falando sobre a operação em um item de notícias em tempo real e não em um teste. No modo de teste, ela funciona muito bem.

Não sei o que você está executando. Com relação às atualizações de dados do calendário, leia a discussão a seguir.


A biblioteca fornece apenas os dados disponíveis na guia Calendar.

MetaTrader5 calendar updates - I'm looking to improve my news trading robot for MT5 platform calendar updates: Is it possible the same broker-by-broker
MetaTrader5 calendar updates - I'm looking to improve my news trading robot for MT5 platform calendar updates: Is it possible the same broker-by-broker
  • 2022.07.14
  • www.mql5.com
I would like to ask about mt5 platform calendar updates: is platform's calendar updated about actual values in real time. Is it possible  updating time is not the same broker-by-broker. Yes, i'm looking how to improve my news trading robot
 
fxsaber #:

Não sei o que você está executando. Com relação às atualizações de dados do calendário, leia a discussão a seguir.


A biblioteca fornece apenas os dados que estão disponíveis na guia Calendar.

Muito obrigado. Agora está tudo claro para mim!!!....
 

A única maneira de entender o calendário do MT5 é comparar os valores ANTES e DEPOIS.

#include <fxsaber\Calendar\Calendar.mqh> // https://www.mql5.com/pt/code/32430

void OnStart()
{
  CALENDAR Calendar;
  
  if (Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, 0, 0)) // Carregou absolutamente todos os eventos (histórico + futuro) do terminal MT5.
  {
    const string FileName = "Calendars\\" + AccountInfoString(ACCOUNT_SERVER) + "\\Calendar_" +
                            AccountInfoString(ACCOUNT_SERVER) + "_" + TimeToString(TimeCurrent(), TIME_DATE) + ".bin";
    
    Calendar.Save(FileName); // Salvo para comparação futura quando EUA/Europa sincronizarem.
  }
}

Obviamente, ninguém fará isso.

 

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Bibliotecas: Calendário

fxsaber, 2023.01.07 21:31.

Parece que devemos criar um corretor automático para as datas do calendário.

Parece que ele obtém um corretor de calendário que corresponde ao servidor de negociação.

#property script_show_inputs

input ulong inEventID = 840030006; // EventID
input string inName = ""; // Nome -> EventID (Nonfarm Payrolls -> 840030016)
input datetime inFrom = D'2020.01.01';
input bool inDST = true;

void OnStart()
{
  CALENDAR Calendar;
    
  if (inName == "")
  {
    Calendar.Set(inEventID);
    Calendar.FilterByTime(inFrom, TimeCurrent());
    
    Calendar.CorrectTime(); // Ignorar as peculiaridades do calendário MQL: https://www.mql5.com/ru/forum/444094/page14#comment_46213385
    
    if (inDST)
      Calendar.DST(); // Chamada se o servidor de negociação estiver sincronizado com o horário europeu.
  
    for (int i = Calendar.GetAmount() - 1; i >= 0; i--)
    {
      const EVENT Event = Calendar[i];    
      const datetime ChartNews = ChartNewsTime(Event.time); // https://www.mql5.com/ru/forum/357793/page5#comment_44225999
      
      if (Event.time != ChartNews)    
        Print("-" + (string)Event.EventID + ": " + TimeToString(ChartNews) + " != " + Event.ToString());
      else
        Print("+" + (string)Event.EventID + ": " + TimeToString(ChartNews) + " == " + Event.ToString());
    }
  }
  else // Obter EventID por nome.
  {
    string Currencies[2];
    
    // Obter as moedas do caractere atual.
    Currencies[0] = ::SymbolInfoString(_Symbol, SYMBOL_CURRENCY_BASE);
    Currencies[1] = ::SymbolInfoString(_Symbol, SYMBOL_CURRENCY_PROFIT);
    
    if (Calendar.Set(Currencies, CALENDAR_IMPORTANCE_MODERATE, inFrom) && Calendar.FilterByName(inName))
      for (int i = Calendar.GetAmount() - 1; i >= 0; i--)
        Print((string)Calendar[i].EventID + ": " + Calendar[i].ToString());
  }
}


Resultado.

+840030016: 2023.04.07 15:30 == 2023.04.07 15:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 236 K | -8 K | 311 K | 326 K
+840030016: 2023.03.10 15:30 == 2023.03.10 15:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 311 K | -35 K | 517 K | 504 K
+840030016: 2023.02.03 15:30 == 2023.02.03 15:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 517 K | 16 K | 223 K | 260 K
+840030016: 2023.01.06 15:30 == 2023.01.06 15:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 223 K | 57 K | 263 K | 256 K
+840030016: 2022.12.02 15:30 == 2022.12.02 15:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 263 K | -30 K | 261 K | 284 K
+840030016: 2022.11.04 14:30 == 2022.11.04 14:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 261 K | -97 K | 263 K | 315 K
+840030016: 2022.10.07 15:30 == 2022.10.07 15:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 263 K | 33 K | 315 K | 
+840030016: 2022.09.02 15:30 == 2022.09.02 15:30 USD 3 Nonfarm Payrolls (nonfarm-payrolls), United States (US) | 315 K | 156 K | 528 K | 526 K

Elas correspondem ao calendário da Web. Se alguém vir alguma discrepância óbvia, me avise.

Essa parece ser a maneira correta de usar o calendário para backtests agora.

 
fxsaber #:

Parece que se trata de um corretor de calendário que corresponde ao servidor de comércio.


Resultado.

Corresponde ao Calendário da Web. Se alguém encontrar alguma discrepância óbvia, me avise.

Agora parece ser correto usar o calendário para backtests.

Mas e se for o horário de outro país? Sei que países diferentes têm datas diferentes para horários diferentes.