Hilfe für einen Neuling - Tag- und Zeitfunktionen

 

Hallo!

Ich bin ein Neuling hier, also brauche ich etwas Hilfe.

Ich habe eine EA, die Trades, wenn der Markt öffnet am Sonntag. Das Problem mit dem EA ist, dass es auch Trades während der Woche nehmen und ich will nicht, dass.

Ich möchte, dass es wie folgt funktioniert:

extern int StartDay="sunday"

extern int StartTime="23:00"

extern int StopDay="montag"

extern int StopTime="15:00"

Wenn day="sunday" und der Markt geöffnet ist (nur ein Trade kann zwischen Sonntag 23:00 und Montag 15:00 geöffnet sein, keine neuen Trades, wenn unser Trade aufgrund von TP oder SL geschlossen ist)

{

Handel starten (etwas Code, den ich schon habe)

}

Wie kann ich dies in MQL tun?

 

Zeit[0] prüfen

mit diesen Funktionen in der Hilfe Datum & Zeitfunktionen

 
// SEE IF THIS WORK FOR YOU..... (I'VE NOT TESTED IT....)



int start()
{
  bool sunday_cond = ( TimeDayofWeek(TimeCurrent())>=0) && (Hour()>=23);
  bool monday_cond = ( TimeDayofWeek(TimeCurrent())<=1) && (Hour()<=15); 
  if( sunday_cond  || monday_cond )
      go_trading();

}
 
abstract_mind:
  bool sunday_cond = ( TimeDayofWeek(TimeCurrent())>=0) && (Hour()>=23);
  bool monday_cond = ( TimeDayofWeek(TimeCurrent())<=1) && (Hour()<=15); 
  if( sunday_cond  || monday_cond )

Ich bin mir nicht sicher, ob das richtig ist. Die "sunday_cond" ist wahr jeden Tag der Woche zwischen 23 Uhr und Mitternacht. Da der Code also entweder "sunday_cond" oder "monday_cond" ausführt, wird er potenziell jeden Tag nach 23 Uhr handeln. Darüber hinaus wird "monday_cond" an Sonntagen bis 15 Uhr erfüllt. Es ist zwar unwahrscheinlich, aber in einigen Zeitzonen könnte auch das in die Handelszeiten fallen. Noch wichtiger ist, dass Hour() <= 15 bis 3:59pm erfüllt ist, nicht bis 3:00pm.


Aber das Prinzip ist offensichtlich solide in Bezug auf das, was EagleEye tun muss: die Zeit und auch den Wochentag mit DayOfWeek() oder TimeDayOfWeek() überprüfen.

 
jjc:

Ich bin mir nicht sicher, ob das richtig ist. Die "sunday_cond" ist wahr jeden Tag der Woche zwischen 23 Uhr und Mitternacht. Da der Code also entweder "sunday_cond" oder "monday_cond" ausführt, wird er potenziell jeden Tag nach 23 Uhr handeln. Darüber hinaus wird "monday_cond" an Sonntagen bis 15 Uhr erfüllt. Es ist zwar unwahrscheinlich, aber in einigen Zeitzonen könnte auch das in die Handelszeiten fallen. Noch wichtiger ist, dass Hour() <= 15 bis 3:59pm erfüllt ist, nicht bis 3:00pm.


Aber das Prinzip ist offensichtlich solide in Bezug auf das, was EagleEye tun muss: die Zeit und auch den Wochentag mit DayOfWeek() oder TimeDayOfWeek() überprüfen.



Sie haben Recht. Das sollte funktionieren:

  bool sunday_cond = ( TimeDayofWeek(TimeCurrent())==0) && (Hour()>=23);
  bool monday_cond = ( TimeDayofWeek(TimeCurrent())==1) && (Hour()<=15);
  if( sunday_cond  || monday_cond )
go_trading();
 

Danke, Leute,


Ich werde das ausprobieren und Ihnen mitteilen, ob es funktioniert.

 

only one trade can be open between sunday 23:00 and monday 15:00

Der obige Code sollte von Sonntag 23:00 bis Montag 15:59 (Hour()<=15) handeln, nicht 15:00 (Hour()<15)

Außerdem brauchen Sie einen Code, um nur einen Trade während des erlaubten Zeitraums zu öffnen.

 
Welchen Typ sollten sunday_cond und monday_cond haben? int?
 

Ich bin nicht sicher, ob ich verstehe, was Sie mit diesem Teil meinen, WHRoeder: Montag 15:59 (Hour()<=15), nicht 15:00 (Hour()<15)?

Ja u r richtig ich brauche diesen Code auch. Ich hoffe, dass mir jemand diesen Code zur Verfügung stellen kann.

 
EagleEye:

Ja u r Recht ich brauche, dass Code als gut. Ich hoffe, jemand kann ihn mir zur Verfügung stellen.

Dies ist ein etwas ungewöhnliches Problem, denn Sie wollen keinen neuen Handel eingehen, wenn Sie im aktuellen Handelsfenster bereits einen Handel eröffnet haben, selbst wenn dieser nun geschlossen ist. In den meisten Diskussionen in diesem Forum geht es nur darum, zu prüfen, ob nicht gerade ein Handel geöffnet ist (und das ist ein Thema, das häufig auftaucht).


Im Wesentlichen haben Sie drei Möglichkeiten, um nach geschlossenen Geschäften zu suchen:


  1. Wenn Sie ein neues Geschäft eröffnen, speichern Sie die aktuelle Zeit in einer Variablen. Wenn Sie einen neuen Handel in Erwägung ziehen, prüfen Sie, ob die gespeicherte Zeit des letzten Handels nicht in das aktuelle Handelsfenster fällt.
  2. Wie oben, aber speichern Sie die Zeit des letzten Abschlusses in den globalen Variablen von MT4.
  3. Durchsuchen Sie die MT4-Handelsliste nach geschlossenen Geschäften, die während des aktuellen Handelsfensters geöffnet wurden.


Diese Optionen sind ungefähr in der Reihenfolge ihrer Komplexität (und auch in umgekehrter Reihenfolge ihrer Leistung, d.h. 3 ist bei weitem die langsamste, obwohl ein Geschwindigkeitsunterschied zwischen ihnen im wirklichen Leben kaum Probleme bereiten dürfte).


Die Optionen sind jedoch auch nach ihrer Widerstandsfähigkeit geordnet:


  1. Wenn die Last-Trade-Zeit in einer Variablen (im Speicher) gespeichert wird, geht der Wert verloren, wenn MT4 neu gestartet wird oder wenn Ihr EA aus einem anderen Grund neu geladen werden muss. Mit anderen Worten: Wenn der EA neu geladen wird, handelt er möglicherweise mehr als einmal während desselben Handelsfensters.
  2. Wenn die Zeit in einer globalen MT4-Variablen gespeichert ist, sollte die Aufzeichnung dieser Variable das Neuladen des EA überleben. Wenn der Handel jedoch in aller Eile auf einen neuen Computer verlegt werden muss, geht die Aufzeichnung der letzten Handelszeit verloren (es sei denn, es ist eine Sicherungskopie der gvariables.dat-Datei von MT4 verfügbar).
  3. Das Scannen der MT4-Handelsliste ist die einzige Option, die im Hinblick auf die Wiederherstellung im Katastrophenfall wirklich belastbar ist: Sie können sich von einer MT4-Kopie auf einem anderen Computer in das Brokerkonto einloggen, den EA starten und haben die Garantie, dass er keine falschen Zusatzgeschäfte tätigt.


 

// Ansatz_1

  bool sunday_cond = ( TimeDayofWeek(TimeCurrent())==0) && (Hour()>=23);
  bool monday_cond = ( TimeDayofWeek(TimeCurrent())==1) && (Hour()<=15);
  if( sunday_cond  || monday_cond )
if(OrdersTotal()==0)
go_trading();



// Ansatz_2

  bool sunday_cond = ( TimeDayofWeek(TimeCurrent())==0) && (Hour()>=23);
  bool monday_cond = ( TimeDayofWeek(TimeCurrent())==1) && (Hour()<=15);
  if( sunday_cond  || monday_cond )
{
if(number_of_longs()==0) // Count the longs from both "trade context" and history for the period in qestion. There is code for counting open longs/shorts in the forum
go_trading_longs();
if(number_of_shorts()==0)
go_trading_shorts();

}
Grund der Beschwerde: