Bibliotheken: Kontrolle_Handel_Sitzungen - Seite 2

 
Forester #:
Es wird einfach ein zeitlicher Vergleich durchgeführt.
Anstelle von … können Sie übrigens einen beliebigen Wert festlegen.

Die Sitzungsdauer wird vom Broker übernommen oder kann manuell festgelegt werden.

Ich habe vom internen Code gesprochen, nicht vom Aufruf und dem Eingabeparameter.

datetime Sec = TimeSec(time); //aktuelle Sekunde des Tages
...
if(( Sec >= this.TradeTimeFrom[i][DayOfWeek] ) && ( Sec < this.TradeTimeTo[i][DayOfWeek] ))

Hier wird „Sec“ auf einen Zeitraum von 24 Stunden bezogen, und es gibt keine „from-to“-Grenze. Wenn beispielsweise die Uhrzeit 3 Uhr morgens abgefragt wird und die Handelssitzung von 21 Uhr abends bis 8 Uhr morgens läuft, müsste „true“ zurückgegeben werden, aber die Bedingung wird nicht erfüllt und es wird „false“ zurückgegeben.

 
Stanislav Korotky #:

Ich habe vom internen Code gesprochen, nicht vom Aufruf und vom Eingabeparameter.

Hier wird „Sec“ auf den Tagesbereich normiert, und es gibt keine „from-to“-Grenze. Wenn beispielsweise die Uhrzeit 3 Uhr morgens abgefragt wird und die Handelssitzung von 21 Uhr abends bis 8 Uhr morgens läuft, müsste „true“ zurückgegeben werden, aber die Bedingung wird nicht erfüllt und es wird „false“ zurückgegeben.

Dies lässt sich mit zwei Sitzungen festlegen:
21–24 und 0–8

Ist das eine theoretische Frage oder gibt es bei den Handelszentren tatsächlich solche „from-to“-Bereiche?

 
Forester #:

Dies lässt sich in zwei Durchgängen festlegen:
21–24 und 0–8

Ist das nur eine theoretische Frage oder gibt es bei DC tatsächlich solche „from-to“-Bereiche?

Was bedeutet „in zwei Sitzungen festlegen“? – Diese werden doch aus den MT5-Einstellungen übernommen und nicht von uns festgelegt. Und in MT5 gilt: eine Sitzung = ein Eintrag. Bei einigen Brokern (aufgrund der geografischen Entfernung zum Markt) kann dies der Fall sein. In diesem Fall gibt „SymbolInfoSessionTrade“ die „to“-Zeit unter Berücksichtigung zusätzlicher Tage zurück (zumindest war das früher so – ich habe es gerade nicht überprüft), d. h., die Bedingung „from < to“ wurde immer eingehalten.
 
Stanislav Korotky #:
Was bedeutet es, zwei Sitzungen festzulegen?

In sunput-Dateien besteht die Möglichkeit, die Sitzungen für jeden Tag individuell festzulegen. Auf dieser Grundlage wird dann gearbeitet.
Wird aktiviert:
#define LoadSessionFromInputs // Sitzungen aus den Eingaben lesen

Stanislav Korotky #:
In diesem Fall gibt SymbolInfoSessionTrade die Zeit „to“ unter Berücksichtigung des zusätzlichen Tages zurück (zumindest war das früher so – ich habe es gerade nicht überprüft), d. h., die Bedingung„from < to“ wurde immer eingehalten.

Also 20:00 – 32:00?

Wenn es ein funktionierendes Beispiel vom Handelszentrum gibt, an dem man das testen kann, lässt sich das Beispiel entsprechend anpassen und überprüfen.
Derzeit gibt es eine einfache Lösung: Die Sitzung selbst um Mitternacht in zwei Teile zu unterteilen. Dabei kann man angeben, an welchem Tag dies geschehen soll – zum Beispiel am Samstag bis 8:00 Uhr (der Rest vom Freitag) oder am Sonntag ab 20:00 Uhr (Beginn des Montags).

 
Forester #:

Das heißt also von 20:00 bis 32:00 Uhr?

Ja. Es gibt kein fertiges Rechenzentrum mit einem solchen Server im Blickfeld. Man muss irgendwo in Neuseeland suchen.
 
Stanislav Korotky #:
Ja. Es gibt kein fertiges Rechenzentrum mit einem solchen Server in Aussicht. Man muss irgendwo in Neuseeland danach suchen.

Mit dem Editor für benutzerdefinierte Symbole habe ich Folgendes gemacht:


 
Forester #:

Im Editor für benutzerdefinierte Symbole habe ich Folgendes getan:

Ich habe Sitzungen mit einem Übergang am nächsten Tag für die im Screenshot gezeigten Varianten programmiert, d. h. von 20:00 bis 08:00 Uhr.
Ich habe die Funktion geändert:
      for (int i = 0; i < this.TradeSessions[DayOfWeek]; i++){//Durchlaufen der Sitzungen an diesem Wochentag
         if(( Sec >= this.TradeTimeFrom[i][DayOfWeek] )){ //Die Sitzung hat begonnen – das Ende suchen
            if(Sec < this.TradeTimeTo[i][DayOfWeek]){//Es ist noch nicht vorbei, merk dir das
               this.NextTradeStop = (datetime)(day * 86400) + this.TradeTimeTo[i][DayOfWeek]; //Endzeit der aktuellen Sitzung; bis dahin muss die nächste Sitzung nicht überprüft werden = (Beginn dieses Tages + Sitzungsdauer) 
               //Print("new Stop ", this.NextTradeStop);
               return true; 
            }else if (this.TradeTimeTo[i][DayOfWeek] < this.TradeTimeFrom[i][DayOfWeek]){// Ende < Beginn, zum Beispiel 20:00–04:00 – Übergang zum nächsten Tag + 1 Tag zur Uhrzeit
               this.NextTradeStop = (datetime)((day+1) * 86400) + this.TradeTimeTo[i][DayOfWeek]; //Endzeit der aktuellen Sitzung; bis dahin muss die nächste Sitzung nicht überprüft werden = (Beginn dieses Tages + Sitzungsdauer) 
               //Print("new Stop ", this.NextTradeStop);
               return true;
            }
         }
      }

Der hinzugefügte Code prüft, ob das Ende vor dem Beginn der Sitzung liegt, und fügt dann einfach einen Tag zur Endzeit hinzu.

Ich habe dies mit folgenden Sitzungen getestet:

Tag: 1 Handelssitzungen: 1: 23:55–00:05
Tag: 2 Handelssitzungen: 1: 00:15–00:17


Erste Sitzung mit Übertrag auf den nächsten Tag:

29.06.2020 23:55:03 29.06.2020 23:55:03
29.29.06.2020 23:55:09 29.06.2020 23:55:09
29.29.06.2020 23:56:39 29.06.2020 23:56:39
2020.29.06.2020 23:57:01 29.06.2020 23:57:01
29.06.2020 23:59:59 29.29.06.2020 23:59:59
30.06.2020 00:00:00 30.06.2020 00:00:00
30.30.06.2020 00:00:08 30.06.2020 00:00:08
30.30.06.2020 00:01:52 30.06.2020 00:01:52
30.06.2020 00:02:02 30.06.202030.06.2020 00:02:02
30.06.2020 00:02:30 30.06.2020 00:02:30
30.30.06.2020 00:03:25 30.06.2020 00:03:25
30.30.06.2020 00:03:31 30.06.2020 00:03:31

Zweite Sitzung, wie üblich an einem Tag:
30.06.2020 00:15:29 30.06.2020 00:15:29
30.06.2020 00:16:01 2020.30.06.2020 00:16:01
30.06.2020 00:16:09 30.06.2020 00:16:09

Die erste Sitzung findet in einer Woche statt:
06.07.2020 23:55:01 06.07.2020 23:55:01
06.06.07.2020 23:55:09 06.07.2020 23:55:09