Librerías: Calendario - página 6

 
Automated Trading :

Calendario :

Autor : fxsaber

Gracias fxsaber,
Esta biblioteca es tan grande.
¿Puedo preguntar si el archivo.bin ser legible por el bloc de notas + +? El archivo creado por mi EA no es legible por notepad++, y durante BT, el calendar.Load no devuelve nada. ¿Tiene alguna pista sobre esto?

Gracias
 
eepatk #:
¿Puedo preguntar si el archivo .bin es legible por notepad++? El archivo creado por mi EA no es legible por notepad++, y durante BT, el calendar.Load no devuelve nada. ¿Tiene alguna pista sobre esto?

Es mejor formular inmediatamente cuál es la tarea.

 
fxsaber # :

Es mejor formular inmediatamente cuál es la tarea.

Lo siento fxsaber, permítanme aclarar.

Básicamente, empiezo con el código de ejemplo que compartiste, soy capaz de descargar y crear un archivo .bin.

Estoy tratando de código de abajo para Backtest, el objetivo es cargar el .bin en cada iteración, a fin de comprobar si hay noticias / eventos de cada moneda que figuran en la clase.

Sin embargo, cuando estoy haciendo backtesting, el Calendar.ToString devuelto en blanco.(la "impresión" son para la depuración)


Gracias,

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

Estoy tratando de codificar lo siguiente para Backtest, el objetivo es cargar el .bin en cada iteración, a fin de comprobar si hay noticias / eventos de cada moneda que figuran en la clase.

Sólo es necesario cargar los datos del archivo en una variable estática una vez.

#define  CALENDAR_FILENAME "Calendar.bin" // Nombre del fichero para leer/escribir el Calendario.
#property tester_file CALENDAR_FILENAME  // Especifica que MT5-Tester recoge este archivo.

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

CALENDAR CalendarFull; // Objeto con los datos del calendario.

int OnInit()
{      
  return(CalendarFull.Load(CALENDAR_FILENAME) == -1); // Cargar eventos del fichero
}

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

Sólo es necesario cargar los datos del archivo en una variable estática una vez.


Muchas gracias, es bonito y preciso.

 
fxsaber # :

Sólo es necesario cargar los datos del archivo en una variable estática una vez.

Gracias fxaber,

Pude ordenar el código con tu sugerencia, pero aún así, el CalendarFULL también está vacío después de cargar el .bin.

El CalendarFULL.Load devuelve un "1", pero no parece haber nada dentro de CalendarFULL.

¿Será algún problema de codificación del .bin?

Gracias

 
eepatk #:

el CalendarFULL.Load devuelve un "1", pero no parece haber nada dentro de CalendarFULL.

Ejecute este script una vez en el terminal MT5 para generar el archivo bin.

#define  CALENDAR_FILENAME "Calendar.bin" // Nombre del fichero para leer/escribir el Calendario.

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

void OnStart()
{
  CALENDAR Calendar;

  if (Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, 0, 0)) // Cargado absolutamente todos los eventos (historia + futuro) de MT5-Terminal.
    Calendar.Save(CALENDAR_FILENAME);                     // Guárdalos en un archivo.
}
 
fxsaber # :

Ejecute este script una vez en el terminal MT5 para generar el archivo bin.

Gracias fxsaber, lo hice y generó un archivo .bin 7xmb. Sin embargo, todavía una vez que intento cargar e imprimir, volvió en blanco.
 
eepatk #:
Gracias fxsaber, lo hice y generó un archivo .bin 7xmb. Sin embargo, todavía una vez que intento cargar e imprimir, volvió en blanco.
#define  CALENDAR_FILENAME "Calendar.bin" // Nombre del fichero para leer/escribir el Calendario.
#property tester_file CALENDAR_FILENAME  // Especifica que MT5-Tester recoge este archivo.

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

Gracias fxsaber,

Finalmente, descubrí el problema con mi código, mi .mq5 se guardó como Unicode de alguna manera, que hizo que el fileread no funcionaba, una vez que lo cambio a ANSI, funciona.


Gracias,