Librerie: Calendario - pagina 6

 
Automated Trading :

Calendario :

Autore: fxsaber

Grazie fxsaber,
Questa libreria è davvero fantastica.
Posso chiedere se il file.bin è leggibile da notepad++? Il file creato dal mio EA non è leggibile da notepad++, e durante il BT, il calendar.Load non restituisce nulla. Avete qualche suggerimento in merito?

Grazie
 
eepatk #:
Posso chiedere se il file.bin è leggibile da notepad++? Il file creato dal mio EA non è leggibile da notepad++, e durante il BT, il calendar.Load non restituisce nulla. Avete qualche suggerimento in merito?

È meglio formulare immediatamente il compito.

 
fxsaber # :

È meglio formulare immediatamente il compito.

Scusa fxsaber, permettimi di chiarire.

In pratica, partendo dall'esempio di codice che hai condiviso, sono in grado di scaricare e creare un file .bin.

Sto cercando di codificare il sottostante per il backtest, l'obiettivo è quello di caricare il .bin in ogni iterazione, in modo da controllare le notizie/eventi di ogni valuta elencata nella classe.

Tuttavia, quando eseguo il backtesting, Calendar.ToString restituisce il vuoto (la "stampa" serve per il debug).


Grazie,

 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 #:

Sto cercando di codificare il seguente codice per il Backtest, l'obiettivo è quello di caricare il .bin in ogni iterazione, in modo da controllare le notizie/eventi di ogni valuta elencata nella classe.

È necessario caricare i dati dal file in una variabile statica solo una volta.

#define  CALENDAR_FILENAME "Calendar.bin" // Nome del file per la lettura/scrittura del Calendario.
#property tester_file CALENDAR_FILENAME  // Specifica che MT5-Tester preleva questo file.

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

CALENDAR CalendarFull; // Oggetto con i dati del calendario.

int OnInit()
{      
  return(CalendarFull.Load(CALENDAR_FILENAME) == -1); // Carica gli eventi dal file
}

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

È sufficiente caricare i dati dal file in una variabile statica una sola volta.


Grazie mille, è bello e preciso.

 
fxsaber # :

È sufficiente caricare i dati dal file in una variabile statica una sola volta.

Grazie fxaber,

Sono riuscito a riordinare il codice con il tuo suggerimento, ma comunque il CalendarFULL è vuoto anche dopo il caricamento del .bin.

CalendarFULL.Load restituisce un "1", ma non sembra esserci nulla all'interno di CalendarFULL.

Potrebbe essere un problema di codifica del file .bin?

Grazie

 
eepatk #:

CalendarFULL.Load restituisce un "1", ma non sembra esserci nulla all'interno di CalendarFULL.

Eseguire questo script una volta nel terminale MT5 per generare il file bin.

#define  CALENDAR_FILENAME "Calendar.bin" // Nome del file per la lettura/scrittura del Calendario.

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

void OnStart()
{
  CALENDAR Calendar;

  if (Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, 0, 0)) // Caricati assolutamente tutti gli eventi (storia + futuro) dal terminale MT5.
    Calendar.Save(CALENDAR_FILENAME);                     // Salvarli in un file.
}
 
fxsaber # :

Eseguire questo script una volta nel terminale MT5 per generare il file bin.

Grazie fxsaber, l'ho fatto e ha generato un file .bin 7xmb. Tuttavia, una volta che ho tentato di caricarlo e stamparlo, è tornato vuoto.
 
eepatk #:
Grazie fxsaber, l'ho fatto e ha generato un file .bin 7xmb. Tuttavia, una volta che ho tentato di caricarlo e stamparlo, è tornato vuoto.
#define  CALENDAR_FILENAME "Calendar.bin" // Nome del file per la lettura/scrittura del Calendario.
#property tester_file CALENDAR_FILENAME  // Specifica che MT5-Tester preleva questo file.

#include <fxsaber\Calendar\Calendar.mqh> // https://www.mql5.com/it/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 #:

Grazie fxsaber,

Alla fine ho scoperto il problema del mio codice, il mio .mq5 era stato salvato in qualche modo come Unicode, il che ha fatto sì che il fileread non funzionasse, una volta che l'ho cambiato in ANSI, funziona.


Grazie,