Bibliotecas: Calendário - página 6

 
Automated Trading :

Calendário :

Autor: fxsaber

Obrigado, fxsaber,
Essa biblioteca é excelente.
Posso saber se o arquivo.bin pode ser lido pelo notepad++? O arquivo criado pelo meu EA não pode ser lido pelo notepad++ e, durante o BT, o calendar.Load não retorna nada. Você tem alguma dica sobre isso?

Muito obrigado
 
eepatk #:
Posso saber se o arquivo.bin pode ser lido pelo notepad++? O arquivo criado pelo meu EA não pode ser lido pelo notepad++ e, durante o BT, o calendar.Load não retorna nada. Você tem alguma dica sobre isso?

É melhor formular imediatamente qual é a tarefa.

 
fxsaber # :

É melhor formular imediatamente qual é a tarefa.

Desculpe, fxsaber, deixe-me esclarecer.

Basicamente, começo com o código de exemplo que você compartilhou, consigo baixar e criar um arquivo .bin.

Estou tentando codificar o código abaixo para o Backtest. O objetivo é carregar o .bin a cada iteração, de modo a verificar se há notícias/eventos de cada moeda listada na classe.

No entanto, quando estou fazendo o backtesting, o Calendar.ToString retorna em branco (o "Print" é para depuração).


Obrigado,

 if ( MQLInfoInteger ( MQL_TESTER )) 
 {
    NF_Stopped_CCY="";  
      for(int i=0;i<8;i++)        
        {
                Calendar.Load(CALENDAR_FILENAME);
                Print("Raw",Calendar.ToString(0,10,false));  

                Calendar.FilterByTime(TimeCurrent()-NF_Stop_in_Days*24*60*60,TimeCurrent()+NF_Stop_in_Days*24*60*60);
                Print("FilterByTime",Calendar.ToString(0,10,false));  

                Calendar.FilterByCurrency(CCYP[i].Cname);
                Print("FilterByCCY",Calendar.ToString(0,10,false));  

                Calendar.FilterByImportance(NF_Stop_Importance);  
                Print("FilterByImp",Calendar.ToString(0,10,false));  
 
                          
                CCYP[i].Stop_By_News=Calendar.GetAmount();
                if (CCYP[i].Stop_By_News) 
                {
                  int temp=StringConcatenate(NF_Stopped_CCY,NF_Stopped_CCY," ", CCYP[i].Cname);
                  Print(Calendar.ToString(0,-1,false));  
                }
        } 
   Print("NF list(BackTest)   :",NF_Stopped_CCY);
   NEWS_RefreshTime.day =CurrentDay.day;
  }
 
eepatk #:

Estou tentando codificar o código abaixo para o Backtest. O objetivo é carregar o .bin em cada iteração, de modo a verificar se há notícias/eventos de cada moeda listada na classe.

Você só precisa carregar os dados do arquivo em uma variável estática uma vez.

#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> // https://www.mql5.com/pt/code/32430

CALENDAR CalendarFull; // Objeto com dados do calendário.

int OnInit()
{      
  return(CalendarFull.Load(CALENDAR_FILENAME) == -1); // Carregar eventos do arquivo
}

void OnTick()
{
  CALENDAR Calendar = CalendarFull;
  
  //....
}
 
fxsaber # :

Você só precisa carregar os dados do arquivo em uma variável estática uma vez.


Muito obrigado, é muito bom e preciso.

 
fxsaber # :

Você só precisa carregar os dados do arquivo em uma variável estática uma vez.

Obrigado, fxaber,

Consegui organizar o código com sua sugestão, mas, ainda assim, o CalendarFULL também está vazio depois de carregar o .bin.

O CalendarFULL.Load retorna um "1", mas parece não haver nada dentro do CalendarFULL.

Seria algum tipo de problema de codificação do .bin?

Obrigado

 
eepatk #:

o CalendarFULL.Load retorna um "1", mas não parece haver nada dentro do CalendarFULL.

Execute esse script uma vez no terminal MT5 para gerar o arquivo bin.

#define  CALENDAR_FILENAME "Calendar.bin" // Nome do arquivo para leitura/gravação do Calendário.

#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.
    Calendar.Save(CALENDAR_FILENAME);                     // Salve-os em um arquivo.
}
 
fxsaber # :

Execute esse script uma vez no terminal MT5 para gerar o arquivo bin.

Obrigado, fxsaber, fiz isso e ele gerou um arquivo .bin de 7xmb. No entanto, mesmo assim, quando tento carregar e imprimir, ele retorna em branco.
 
eepatk #:
Obrigado, fxsaber, fiz isso e ele gerou um arquivo .bin de 7xmb. No entanto, mesmo assim, quando tentei carregar e imprimir, ele retornou em branco.
#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> // https://www.mql5.com/pt/code/32430

const string inSymbols[] = {"EURUSD", "AUDCAD"};

CALENDAR Calendars[];

int OnInit()
{      
  CALENDAR Calendar;
  const bool Res = (Calendar.Load(CALENDAR_FILENAME) != -1);

  if (Res)
    for (int i = ArrayResize(Calendars, ArraySize(inSymbols)) - 1; i >= 0; i--)
    {
      Calendars[i] = Calendar;
      
      Calendars[i].FilterBySymbol(inSymbols[i]);
    }

  return(!Res);
}

string NewsToString( const CALENDAR &Calendar, const datetime From, const datetime To )
{
  CALENDAR CalendarTmp = Calendar;
  
  CalendarTmp.FilterByTime(From, To);
  
  return(CalendarTmp.ToString(0, 10));
}

#define  HALF_INTERVAL (6 * 3600)

void OnTick()
{  
  string Str = NULL;
  
  for (int i = ArraySize(Calendars) - 1; i >= 0; i--)
  {
    const datetime From = TimeCurrent() - HALF_INTERVAL;
    const datetime To = TimeCurrent() + HALF_INTERVAL;
    
    Str += "\n\n" + inSymbols[i] + "-news (" + (string)From + " - " + (string)To + "):\n" + NewsToString(Calendars[i], From, To);
  }
  
  Comment(Str);
}

 
fxsaber #:

Obrigado, fxsaber,

Por fim, descobri o problema com meu código, meu .mq5 foi salvo como Unicode de alguma forma, o que fez com que o fileread não funcionasse.


Obrigado,