Diskussion zum Artikel "Nachthandel während der asiatischen Handelszeit: wie man im Plus bleibt"

 

Neuer Artikel Nachthandel während der asiatischen Handelszeit: wie man im Plus bleibt :

Der Artikel beschäftigt sich mit dem Begriff des Nachthandels, Handelsstrategien und deren Implementierung in MQL5. Es wurden Tests durchgeführt und Schlussfolgerungen gezogen.

Börsen der asiatisch-pazifischen Region, deren Zeitzone zur amerikanischen und europäischen versetzt ist, beginnen später zu arbeiten. Hier beginnt erst der Handel, während amerikanische Händler nach Hause zurückkehren, und ihre europäischen Kollegen ins Bett gehen. Das ist der Nachthandel für unsere Begriffe. Die Perioden der Handelszeiten kann man auf der Weltkarte wie folgt darstellen (von rechts nach links):


Abb.1. Handelssessionen auf der Weltkarte

Abb.1. Handelszeiten auf der Weltkarte

Autor: Dmitriy Zabudskiy

 
//--- Eingabeparameter
input int      order_time=0;                        // Öffnungszeit der Bestellung

Das Problem bei beiden Testern ist, dass datetime nicht optimiert werden kann. Daraus resultiert diese erzwungene Hässlichkeit.

Wir hätten dieses Problem schon vor langer Zeit lösen müssen.


ZY OnTesterInit kann mit datetime helfen, aber nicht jeder kann das.

 

Es wäre gut, wenn es im Terminal möglich wäre, die Schichtzeit des Brokers zumindest relativ zur GMT zu kennen. Genauer gesagt, würde es im Terminal für jeden Makler geschrieben werden. Und in den Testergebnissen. Aber Tests sind gegeben - welche Zeitverschiebung gibt es? Ich weiß es nicht.

Request TimeGMT() ist gut, aber es ist nicht genug. Und es gibt nichts, um den Test zu berücksichtigen. Wir brauchen genau die Zeit der Verschiebung des Brokers relativ zu GMT.

 
fxsaber:

Das Problem bei beiden Testern ist, dass datetime nicht optimiert werden kann. Daraus resultiert diese erzwungene Hässlichkeit.

Hier hätte man schon vor langer Zeit etwas tun müssen.

Es ist nicht datetime, das hier gemeint ist - siehe:

if(time_now_str.hour==order_time && work==true && work_day==true)
Es ist nur so, dass der Autor ein Problem mit Variablennamen hat
 
ANG3110:

Es wäre gut, wenn es im Terminal möglich wäre, die Schichtzeit des Brokers zumindest relativ zur GMT zu kennen. Genauer gesagt, würde es im Terminal für jeden Makler geschrieben werden. Und in den Testergebnissen. Aber Tests sind gegeben - welche Zeitverschiebung gibt es? Ich weiß es nicht.

Request TimeGMT() ist gut, aber es ist nicht genug. Und es gibt nichts, um den Test zu berücksichtigen. Es ist die Zeitverschiebung des Brokers relativ zu GMT, die benötigt wird.

Es ist einfach, TimeGMT im Optimierungsmodus in MT5 zu bestimmen, ein einziger Lauf - Sie sollten darüber nachdenken.

 
Andrey F. Zelinsky:

Das ist nicht datetime - siehe:

Es ist nur so, dass der Autor ein Problem mit Variablennamen hat

Ich bereue es, ich habe den Artikel nur bis zur zitierten Zeile gelesen. Aber das datetime-Problem gibt es tatsächlich. Die Zeit sollte nicht nur durch MQL, sondern auch, menschlich gesprochen, durch die GUI optimiert werden.

 
fxsaber:

Im Optimierungsmodus in MT5 ist es nicht schwer, TimeGMT zu bestimmen, ein einziger Lauf - Sie müssen darüber nachdenken.

Aber was ist, wenn eine andere Person die Testergebnisse liefert? Es gibt keine Möglichkeit, sie zu bestimmen.
 
ANG3110:
Was ist, wenn andere Personen die Testergebnisse erhalten? Das kann man nicht feststellen.

Ja, das wird in dem Bericht nicht erwähnt. Deshalb sind benutzerdefinierte Berichte so leistungsstark. Besonders im MT5.

 

Vielleicht sollte man statt

//+------------------------------------------------------------------+
//| Experten-Tick-Funktion|
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   time_now_var=TimeCurrent(time_now_str);// aktuelle Uhrzeit

   switch(time_now_str.day_of_week)
     {
      case 1: if(mon==false){work_day=false;}
      else {work_day=true;}
      break;
      case 2: if(tue==false){work_day=false;}
      else {work_day=true;}
      break;
      case 3: if(wen==false){work_day=false;}
      else {work_day=true;}
      break;
      case 4: if(thu==false){work_day=false;}
      else {work_day=true;}
      break;
      case 5: if(fri==false){work_day=false;}
      else {work_day=true;}
      break;
     }

ein einfacheres verwenden

//+------------------------------------------------------------------+
//| Experten-Tick-Funktion|
//+------------------------------------------------------------------+
void OnTick()
  {
   time_now_var=TimeCurrent(time_now_str);// aktuelle Uhrzeit

   switch(time_now_str.day_of_week)
     {
      case 1: work_day=mon; break;
      case 2: work_day=tue; break;
      case 3: work_day=wen; break;
      case 4: work_day=thu; break;
      case 5: work_day=fri; break;
     }
...

Wie gesagt, es ist nichts Persönliches, nur eine dumme Angewohnheit - ich kann nicht vorbeigehen, wenn ich einen ineffizienten Code sehe.
Ich habe nicht weiter in den Code schauen.

 
Eugene Myzrov:

Vielleicht kann man statt

ein einfacheres verwenden

Wie gesagt, es ist nichts Persönliches, nur eine dumme Angewohnheit - ich kann nicht vorbeigehen, wenn ich einen ineffizienten Code sehe.
Ich habe mir den Code nicht weiter angesehen.

Ich danke Ihnen für Ihren Kommentar. Das ist eine gute Angewohnheit, ich mache das selbst manchmal auch.....

Ihr Beispiel:

//+------------------------------------------------------------------+
//| Experten-Tick-Funktion|
//+------------------------------------------------------------------+
void OnTick()
  {
   time_now_var=TimeCurrent(time_now_str);// aktuelle Uhrzeit

   switch(time_now_str.day_of_week)
     {
      case 1: work_day=mon; break;
      case 2: work_day=tue; break;
      case 3: work_day=wen; break;
      case 4: work_day=thu; break;
      case 5: work_day=fri; break;
     }
...

Ehrlich gesagt, ich verstehe es nicht, es muss ergänzt werden... Denn in den eingehenden Variablen im Expert Advisor sind die Wochentage, an denen Sie arbeiten müssen, als "true" markiert, und wenn Sie an diesem Tag nicht arbeiten müssen, dann "false".

Und die Variable "work_day" sendet die Antwort als "true" oder "false". In Ihrem Beispiel wird die Variable vom Typ "string", so dass Sie erneut einen Vergleich durchführen müssen.

Ich bin also für Code-Optimierung, auch wenn sie in diesem EA nicht vorrangig war.

Dieser spezielle Code kann optimiert werden:

//+------------------------------------------------------------------+
//| Experten-Tick-Funktion|
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   time_now_var=TimeCurrent(time_now_str);// aktuelle Uhrzeit

   work_day=true;

   switch(time_now_str.day_of_week)
     {
      case 1: if(mon==false){work_day=false;}
      break;
      case 2: if(tue==false){work_day=false;}
      break;
      case 3: if(wen==false){work_day=false;}
      break;
      case 4: if(thu==false){work_day=false;}
      break;
      case 5: if(fri==false){work_day=false;}
      break;
     }

Die Codegröße wird reduziert, aber die Arbeitsgeschwindigkeit nicht...

Vielleicht können Sie eine Schleife in die Funktion einbauen, dann ist die Größe vielleicht kleiner, aber die Verarbeitungsgeschwindigkeit wird länger.

Sie können auch arbeiten und die Eingangsparameter ändern, dann können Sie den Code ändern, ihn vielleicht vereinfachen.

 
Dmitriy Zabudskiy: Danke für den Kommentar. Das ist eine gute Angewohnheit, ich mache das auch manchmal.... Ihr Beispiel:Ehrlich gesagt, verstehe ich es nicht, es muss ergänzt werden... Denn in den eingehenden Variablen im Expert Advisor sind die Wochentage, an denen Sie arbeiten müssen, als "true" markiert, und wenn Sie an diesem Tag nicht arbeiten müssen, dann "false". Und die Variable "work_day" sendet die Antwort als "true" oder "false". In Ihrem Beispiel wird die Variable vom Typ "string", so dass Sie erneut einen Vergleich durchführen müssen. Ich bin also für die Code-Optimierung, auch wenn sie in diesem EA nicht vorrangig war. Dieser spezielle Code kann optimiert werden. Die Codegröße wird reduziert, aber die Geschwindigkeit nicht... Vielleicht können Sie eine Schleife in die Funktion einbauen, dann ist der Code zwar kleiner, aber die Verarbeitungsgeschwindigkeit ist höher. Sie können noch weiter arbeiten und die eingehenden Parameter irgendwie ändern, dann kann der Code geändert, vielleicht vereinfacht werden.
   work_day=false;
   switch(time_now_str.day_of_week)
     {
      case 1: if (mon) work_day=true; break;
      case 2: if (tue) work_day=true; break;
      case 3: if (wen) work_day=true; break;
      case 4: if (thu) work_day=true; break;
      case 5: if (fri) work_day=true; break;
     }


Sie könnten auch einen solchen Code anbieten. Aber durch das Entfernen der "else"-Operatoren haben Sie den Quellcode nur um die Hälfte vereinfacht. Die optimale Variante ergibt sich, wenn Sie auch die "if"-Operatoren entfernen, so dass nur noch 5 Zuweisungsoperatoren übrig bleiben. Dies wäre die optimale Variante, die vorgeschlagen wurde.

switch(time_now_str.day_of_week)
     {
      case 1: work_day=mon; break;
      case 2: work_day=tue; break;
      case 3: work_day=wen; break;
      case 4: work_day=thu; break;
      case 5: work_day=fri; break;
     default: work_day=false; // в субботу и воскресенье не торгуем...
     }

Aber ich verstehe überhaupt nicht, was es mit der Variablen auf sich hat, die vom Typ "string" ist.