Bibliothèque: Calendrier - page 6

 
Automated Trading :

Calendrier :

Auteur : fxsaber

Merci fxsaber,
Cette bibliothèque est vraiment géniale.
Puis-je demander si le fichier .bin est lisible par notepad++ ? Le fichier créé par mon EA n'est pas lisible par notepad++, et pendant BT, le calendar.Load ne renvoie rien. Avez-vous un indice à ce sujet ?

Merci de votre compréhension.
 
eepatk #:
Puis-je demander si le fichier .bin est lisible par notepad++ ? Le fichier créé par mon EA n'est pas lisible par notepad++, et pendant BT, le calendar.Load ne renvoie rien. Avez-vous un indice à ce sujet ?

Il est préférable de formuler immédiatement la tâche à accomplir.

 
fxsaber # :

Il est préférable de formuler immédiatement la tâche à accomplir.

Désolé fxsaber, permettez-moi de clarifier.

En fait, je commence avec l'exemple de code que vous avez partagé, je suis capable de télécharger et de créer un fichier .bin.

J'essaie de coder le fichier ci-dessous pour le Backtest, l'objectif étant de charger le fichier .bin à chaque itération, afin de vérifier les nouvelles/événements de chaque devise répertoriée dans la classe.

Cependant, lorsque j'effectue le backtesting, Calendar.ToString renvoie un champ vide (les "Print" sont destinés au débogage).


Merci,

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

J'essaie de coder ce qui suit pour un backtest, l'objectif étant de charger le fichier .bin à chaque itération, afin de vérifier les nouvelles/événements de chaque devise répertoriée dans la classe.

Vous ne devez charger les données du fichier dans une variable statique qu'une seule fois.

#define  CALENDAR_FILENAME "Calendar.bin" // Nom du fichier pour la lecture/écriture du calendrier.
#property tester_file CALENDAR_FILENAME  // Spécifie que le MT5-Tester récupère ce fichier.

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

CALENDAR CalendarFull; // Objet contenant les données du calendrier.

int OnInit()
{      
  return(CalendarFull.Load(CALENDAR_FILENAME) == -1); // Chargement des événements à partir du fichier
}

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

Vous ne devez charger les données du fichier dans une variable statique qu'une seule fois.


Merci beaucoup, c'est bien et précis.

 
fxsaber # :

Vous ne devez charger les données du fichier dans une variable statique qu'une seule fois.

Merci fxaber,

J'ai pu mettre de l'ordre dans le code grâce à votre suggestion, mais le CalendarFULL est toujours vide après le chargement du fichier .bin.

CalendarFULL.Load renvoie bien un "1", mais il ne semble rien y avoir à l'intérieur de CalendarFULL.

S'agit-il d'un problème d'encodage du fichier .bin ?

Merci beaucoup.

 
eepatk #:

CalendarFULL.Load renvoie bien un "1", mais il n'y a rien à l'intérieur de CalendarFULL.

Exécutez ce script une fois dans le terminal MT5 pour générer le fichier bin.

#define  CALENDAR_FILENAME "Calendar.bin" // Nom du fichier pour la lecture/écriture du calendrier.

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

void OnStart()
{
  CALENDAR Calendar;

  if (Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, 0, 0)) // Chargement absolu de tous les événements (historique + futur) du terminal MT5.
    Calendar.Save(CALENDAR_FILENAME);                     // Les enregistrer dans un fichier.
}
 
fxsaber # :

Exécutez ce script une fois dans le terminal MT5 pour générer le fichier bin.

Merci fxsaber, j'ai fait cela et cela a généré un fichier .bin de 7xmb. Cependant, une fois que j'ai essayé de le charger et de l'imprimer, il est revenu vierge.
 
eepatk #:
Merci fxsaber, c'est ce que j'ai fait et cela a généré un fichier .bin de 7xmb. Cependant, une fois que j'ai essayé de le charger et de l'imprimer, il est revenu vierge.
#define  CALENDAR_FILENAME "Calendar.bin" // Nom du fichier pour la lecture/écriture du calendrier.
#property tester_file CALENDAR_FILENAME  // Spécifie que le MT5-Tester récupère ce fichier.

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

Merci fxsaber,

Finalement, j'ai trouvé le problème avec mon code, mon .mq5 a été sauvegardé en Unicode d'une manière ou d'une autre, ce qui a fait que le fileread n'a pas fonctionné, une fois que je l'ai changé en ANSI, ça fonctionne.


Merci,