Function für Handel nur wenn Broker es erlaubt - Fehler

 

Hallo zusammen,


ich möchte gern checken, ob die aktuelle Zeit für Handel vom Broker freigegeben ist. Dazu habe ich folgende Funktion geschrieben und sie in meinen Code eingebettet.

Im StrategyTester zeigt mir die Funktion die korrekte erlaubte Startzeit für Handel an (0:05 Uhr) aber er versucht trotzdem Positionen um 0:00 Uhr zu verändern (weil es dort eine neue Kerze gibt) ich versuche genau das aber zu verhindern...

Noch schlimmer, wenn ich die "SessionEndTime" einbaue und sage die Zeit soll kleiner als diese sein (Ausgabe ist 23:59) sagt er mir dass ich nie handeln kann... selbst eine Zeit wie 05:45 ist für meinen Code größer als 23:59...

Kann mir jemand erklärenwas ich falsch mache?

Vielen Dank im voraus!

Thomas


 MqlDateTime structTimeOnTimer;
 datetime SessionStartTime;
 datetime SessionEndTime;
 CheckforTradingSessions(SymbolArray[SymbolLoop], structTimeOnTimer,SessionStartTime,SessionEndTime);

if(TimeCurrent()> SessionStartTime){
               Print("Time Current: ",TimeToString(TimeCurrent(),TIME_MINUTES),"    SessionStartTime: ",TimeToString(SessionStartTime,TIME_MINUTES));
---- TrailingStop, neue Orders oder Orders schließen....
}

void CheckforTradingSessions(string SymbolFunc, MqlDateTime& structTime,datetime&timeTradeSessionStart,datetime&timeTradeSessionEnd)
{
   string CurrentSymbol = SymbolFunc;
   TimeCurrent(structTime);
   SymbolInfoSessionTrade(CurrentSymbol, (ENUM_DAY_OF_WEEK)structTime.day_of_week,0,timeTradeSessionStart,timeTradeSessionEnd);
   TimeToStruct(timeTradeSessionStart,structTime);

   structTime.hour         = structTime.hour;
   structTime.min          = structTime.min;
   timeTradeSessionStart           = StructToTime(structTime);
   
   TimeToStruct(timeTradeSessionEnd,structTime);
   structTime.hour         = structTime.hour;
   structTime.min          = structTime.min;
   timeTradeSessionEnd             = StructToTime(structTime);

}
Dateien:
 

"..er versucht trotzdem Positionen um 0:00 Uhr zu verändern (weil es dort eine neue Kerze gibt)"

OnTick reagiert auf neue Ticks, unabhängig davon ob der Handelsserver des Brokers Aufträge erlaubt. In Deinem Code ist aber nicht nicht ersichtlich, was wann in OnTick passiert.

 

Hallo,

den Code oben lasse ich in OnTimer alle 5 Minuten laufen. Ontick brauche ich nicht für meine Ausführungen.


Und selbst wenn er auf "jeden Tick" reagieren würde, so hatte ich mit meinem Code gehofft, dass er nichts ausführen würde,wenn die "SessionStartTime" nicht erreicht ist.

Das Print-Statement aus meinem Foto sollte ja nur auftauchen, wenn die Zeit > 00:05 Uhr ist. er gibt es trotzdem bei 00:00 Uhr aus.


Viele Grüße

 

TimeCurrent() liefert die Zeit des letzten Ticks - in OnTick und in OnTimer. Versuch's aml mit TimeLocal.

Außerdem werden im Tester manche Zeitfunktionen anders behandelt, steht alles in der jew. Dok.

In der linken Spalte sind alle Zeitfunktionen, aber man kann auch im Editor den Cursor auf die Funktion setzen und F1 drücken ....

Dokumentation zu MQL5: Datum und Zeit / TimeLocal
Dokumentation zu MQL5: Datum und Zeit / TimeLocal
  • www.mql5.com
TimeLocal - Datum und Zeit - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
 

Hmmm finde zwar nichts was diesen Fehler erklärt, aber ich danke dir für die Hilfe und Ratschläge!


Schönen Abend noch!

 
Na eigentlich tut der Code oben nix, zumindest nicht in dem schnipsel
 
Thomas Behnke:
TimeCurrent(

Hallo,

 

TimeLocal();

ist lokale Zeit. Die Brocker (Server-) zeit (TimeCurrent()) ist Brocker abhängig. Im Normalfall in Deutschland eine Stunde vor.

Gruß Igor

Grund der Beschwerde: