Bibliotheken: Kalender - Seite 6

 
Automated Trading :

Kalender :

Autor: fxsaber

Danke fxsaber,
Diese Bibliothek ist wirklich großartig.
Darf ich fragen, ob die.bin-Datei von notepad++ gelesen werden kann? Die von meinem EA erstellte Datei ist für notepad++ nicht lesbar, und bei BT gibt die calendar.Load nichts zurück. Haben Sie einen Tipp dazu?

Danke
 
eepatk #:
Darf ich fragen, ob die.bin-Datei von notepad++ gelesen werden kann? Die von meinem EA erstellte Datei ist für notepad++ nicht lesbar, und bei BT gibt die calendar.Load nichts zurück. Haben Sie einen Hinweis dazu?

Es ist besser, gleich zu formulieren, was die Aufgabe ist.

 
fxsaber # :

Es ist besser, sofort zu formulieren, was die Aufgabe ist.

Sorry fxsaber, lassen Sie mich klarstellen.

Grundsätzlich beginne ich mit dem Beispielcode, den Sie geteilt haben, ich bin in der Lage, eine .bin-Datei herunterzuladen und zu erstellen.

Ich versuche, die unten für Backtest, Ziel ist es, die .bin in jeder Iteration zu laden, um für Nachrichten/Ereignisse von jeder Währung in der Klasse aufgeführt zu überprüfen.

Allerdings, wenn ich Backtesting, The Calendar.ToString zurückgegeben leer.(die "Print" sind für die Fehlersuche)


danke,

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

Ich versuche, die unten für Backtest zu codieren, Ziel ist es, die .bin in jeder Iteration zu laden, um für Nachrichten/Ereignisse von jeder Währung in der Klasse aufgeführt zu überprüfen.

Sie müssen die Daten aus der Datei nur einmal in eine statische Variable laden.

#define  CALENDAR_FILENAME "Calendar.bin" // Dateiname zum Lesen/Schreiben des Kalenders.
#property tester_file CALENDAR_FILENAME  // Gibt an, dass MT5-Tester diese Datei abholt.

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

CALENDAR CalendarFull; // Objekt mit Kalenderdaten.

int OnInit()
{      
  return(CalendarFull.Load(CALENDAR_FILENAME) == -1); // Laden von Ereignissen aus der Datei
}

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

Sie müssen die Daten aus der Datei nur einmal in eine statische Variable laden.


Vielen Dank, das ist schön und präzise.

 
fxsaber # :

Sie müssen die Daten aus der Datei nur einmal in eine statische Variable laden.

Danke fxaber,

Ich konnte den Code mit deinem Vorschlag aufräumen, aber trotzdem ist der CalendarFULL auch nach dem Laden der .bin leer.

Die CalendarFULL.Load gibt zwar eine "1" zurück, aber innerhalb von CalendarFULL scheint es nichts zu geben.

Könnte es ein Kodierungsproblem der .bin-Datei sein?

Vielen Dank

 
eepatk #:

die CalendarFULL.Load gibt eine "1" zurück, aber es scheint nichts in der CalendarFULL.

Führen Sie dieses Skript einmal im MT5-Terminal aus, um die bin-Datei zu erzeugen.

#define  CALENDAR_FILENAME "Calendar.bin" // Dateiname zum Lesen/Schreiben des Kalenders.

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

void OnStart()
{
  CALENDAR Calendar;

  if (Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, 0, 0)) // Lädt absolut alle Ereignisse (Historie + Zukunft) vom MT5-Terminal.
    Calendar.Save(CALENDAR_FILENAME);                     // Speichern Sie sie in einer Datei.
}
 
fxsaber # :

Führen Sie dieses Skript einmal im MT5-Terminal aus, um die bin-Datei zu erzeugen.

Danke fxsaber, ich habe das getan und es hat eine 7xmb .bin-Datei erzeugt. Sobald ich jedoch versuche, die Datei zu laden und auszudrucken, bleibt sie leer.
 
eepatk #:
Danke fxsaber, ich habe das getan und es hat eine 7xmb .bin-Datei erzeugt. Sobald ich jedoch versuche, die Datei zu laden und auszudrucken, wird sie leer zurückgegeben.
#define  CALENDAR_FILENAME "Calendar.bin" // Dateiname zum Lesen/Schreiben des Kalenders.
#property tester_file CALENDAR_FILENAME  // Gibt an, dass MT5-Tester diese Datei abholt.

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

Danke fxsaber,

Schließlich fand ich heraus, das Problem mit meinem Code, meine .mq5 wurde als Unicode irgendwie gespeichert, das machte die fileread nicht funktionieren, sobald ich es zu ANSI ändern, es funktioniert.


Danke!