Backtest Probleme

Einloggen oder registrieren, um einen Kommentar zu schreiben
Shey Fabian Winkler
36
Shey Fabian Winkler  
Moin Moin,

Ich habe eine EA geschrieben MQL5, welcher immer freitags eine position eröffnet, wenn einige Bedingungen gegeben sind.
Mit den Bedingungen ist alles in Ordnung, aber mit dem "Zeitpunkt" habe ich einige Schwierigkeiten. 
Der Code lautet wie folgt:

MqlDateTime lokalzeit;
TimeToStruct(TimeLocal(),lokalzeit);
int wochentag = lokalzeit.day_of_week;
int stunde = lokalzeit.hour;
int minute = lokalzeit.min;
int sekunde = lokalzeit.sec; 
Um die Parameter zu überprüfen, lasse ich mir sie auf dem chart anzeigen (fettgedruckte beachten):
 //Verschiedene Informationen im MT5 auf Chart ausgeben  
   Comment(Symbol(),",",EnumToString(Period()),"\n",
           "Time Bar opened: "  ,TimeToString(timebaropen,TIME_DATE|TIME_SECONDS),"\n",
           "Open: "  ,DoubleToString(open,Digits()),"\n",
           "High: "  ,DoubleToString(high,Digits()),"\n",
           "Low: "   ,DoubleToString(low,Digits()),"\n",
           "Close: " ,DoubleToString(close,Digits()),"\n",
           "Volume: ",IntegerToString(volume),"\n",
           "Bars: "  ,IntegerToString(bars),"\n",
           "Differenz: ",DoubleToString(Diff,Digits()),"\n",
          /* "Zeit Aktuell: "   ,TimeToString(aktuell,TIME_DATE|TIME_SECONDS),"\n",
           "Zeit Trade Server: " ,TimeToString(tradeserver,TIME_DATE|TIME_SECONDS),"\n",
           "Zeit Local: ",TimeToString(local,TIME_DATE|TIME_SECONDS),"\n",
           "Zeit GMT: "  ,TimeToString(gmt,TIME_DATE|TIME_SECONDS),"\n",*/
           "Wochentag: "  ,IntegerToString(wochentag),"\n",
           "Stunde: "  ,IntegerToString(stunde),"\n",
           "Minute: "  ,IntegerToString(minute),"\n",
           "Sekunde: "  ,IntegerToString(sekunde),"\n"
            "TP: "  ,DoubleToString(TP,Digits()),"\n",
           "SL: "  ,DoubleToString(SL,Digits()),"\n",
           "Low: "   ,DoubleToString(low,Digits()),"\n",
           "Close: " ,DoubleToString(close,Digits()),"\n"
         /*  "LongSignal: "   ,IntegerToString(ls),"\n",
           "ShortSignal: " ,IntegerToString(ss),"\n"*/
          );
Das Problem:

Wenn ich einen Backtest mache, funktioniert es ziemlich gut für 2018 und
 einen Teil von 2017. 
Aber für frühere Zeiten scheint der Code:

MqlDateTime lokalzeit;
TimeToStruct (TimeLocal (), lokalzeit);
nicht zu funktionieren. Für die Zeit vor 2017 bekomme ich also den Wert '0' für 'stunde' und 'minute'. Das heißt, ich bekomme kein Signal, obwohl die Bedingungen erfüllt sind. Was ich gerade während des Schreibes bemerkt habe: Für die Zeit vor 2017 zählen die Sekunden von 0 bis 59 und stellen dann den Wochentag + 1 ein. Das bedeutet in diesem zusammenhang, dass die Woche aus 5 Minuten besteht ..... Irgendwo muss der Fehler liegen. kann es sein, dass die historischen daten irgendwie falsch formatiert sind? Liegt es an dem Broker? Gibt es eine andere Möglichkeit den Backtest erfolgreich durchzuführen? Dritanbierter von historischen Daten? Bitte für Vorschläge, Danke

Dateien:
Carl Schreiber
Moderator
7566
Carl Schreiber  

Seufz - F1 schon mal probiert? Auf TimeLocal() stellen und F1 drücken und lesen.

Du solltest TimeCurrent() an der Stelle verwenden - warum? F1 drücken :)

Carl Schreiber
Moderator
7566
Carl Schreiber  
Shey Fabian Winkler:

Auf meinem anderen Demokonto funktioniert vor 2017 gar nichts und wenn der Strategietester auf 2017 umspringt läuft es wie gewollt?
Kann es mir nicht erklären. Habe auch die GetLastError Funktion eingefügt. Die bleibt immer '0' .

kann es sein das es am Datensatz vom Broker liegt?

Versuch mal ein MQL-Demokonto, die haben Daten bis zurück von 1971 (allerdings zunächst nur ich glaube 1 Kurs pro Tag, egal bei welchem Zeitrahmen).
Shey Fabian Winkler
36
Shey Fabian Winkler  
Carl Schreiber:
Versuch mal ein MQL-Demokonto, die haben Daten bis zurück von 1971 (allerdings zunächst nur ich glaube 1 Kurs pro Tag, egal bei welchem Zeitrahmen).
Hatte den falschen Code geschrieben. Deswegen den Text nochmal gelöscht. aber Danke für den hinweis. Werde das mal Probieren...
Shey Fabian Winkler
36
Shey Fabian Winkler  
Shey Fabian Winkler:
Hatte den falschen Code geschrieben. Deswegen den Text nochmal gelöscht. aber Danke für den hinweis. Werde das mal Probieren...

Sorry wenn ich nochmal ganz dumm Frage. Ich brauche den Dax. Bei dem MetaQuotes Demokonto finde ich nur ein paar Forex produkte und dann noch irgendwelche anderen mit kyrillischer Beschreibung mit denen ich nicht viel anfangen kann und die auch keine Kursdaten haben...... Was isch da loos? Was kann ich tun?

Carl Schreiber
Moderator
7566
Carl Schreiber  
Dann frag den Broker, wie weit die History zurückgeht - und/oder such Dir einen anderen!
Shey Fabian Winkler
36
Shey Fabian Winkler  

Nur nochmal für die Statistik.... Der Code sollte doch so in Ordnung sein?!


  // Marktdaten abfragen / berechnen   
   //datetime aktuell = TimeCurrent(); 
   datetime tradeserver = TimeTradeServer();
  // datetime local =  TimeLocal();
   datetime gmt =  TimeGMT();
   datetime timebaropen  = iTime(Symbol(),Period(),shift);      //Speichert die Zeit der Eröffnung des Balkens (e.g. Weekly)
   double   open  = iOpen(Symbol(),Period(),shift);      //Speichert Eröffnungspreis des Balkens
   double   high  = iHigh(Symbol(),Period(),shift);      //Speichert den Höchstkurs des Balkens
   double   low   = iLow(Symbol(),Period(),shift);       //Speichert den Tiefstkurs des Balkens
   double   close = iClose(Symbol(),Period(),shift);     //Speichert den Schlusskurs des Balkens
   long     volume= iVolume(Symbol(),0,shift);           
   int      bars  = iBars(NULL,0);    
   Diff = NormalizeDouble(high - low,2);
   
    //Wochentag/Stunde/Minute der Woche/Stunde bestimmen
    MqlDateTime lokalzeit; 
    TimeToStruct(TimeCurrent(),lokalzeit);
    int errorCode = GetLastError();
    int wochentag = lokalzeit.day_of_week;
    int stunde = lokalzeit.hour;
    int minute = lokalzeit.min;
    int sekunde = lokalzeit.sec;
    Print("Errorcode: ",errorCode);
Shey Fabian Winkler
36
Shey Fabian Winkler  

Vielleicht fällt Dir ja noch was auf.

Weißt Du zufällig von einem Online Service bei dem man Backtests machen kann? Och gegen Bezahlung?

Carl Schreiber
Moderator
7566
Carl Schreiber  

Lies doch bitte nach, wie TimeGMT sich im Tester verhält -> F1!

Die Richtigkeit musst letztlich Du beurteilen, geh mit dem Debugger (an Hand historischer Daten) durch!

Einloggen oder registrieren, um einen Kommentar zu schreiben