Diskussion zum Artikel "Die Ereignisverarbeitungsroutine "Neuer Balken"" - Seite 5

 
tito.vinicius:

Derzeit öffnet mein EA mehrere Aufträge auf der gleichen Kerze. Ich denke, das Material in diesem Artikel würde mir helfen.

Wie kann ich es implementieren?


Sie können die Handelseinstiegslogik aus dem OnTick()-Ereignis herausnehmen und in die OnNewBar()-Funktion einfügen. Auf diese Weise wird sie nur ausgeführt, wenn es einen neuen Balken gibt. Sie müssen nicht mehr mehrmals bei der gleichen Kerze einsteigen, denn wenn sie einmal ausgeführt wurde, wird sie erst wieder bei der nächsten Kerze ausgeführt.

 
vielen Dank für dieses sehr schöne Stück Papier - Ihre Bemühungen werden sehr gewürdigt!
 

Guter Artikel.

Danke!

 

Sehr sehr schön, danke,

Ich hatte gehofft, für eine MQL5 Bibliotheken Funktion, aber es scheint, es gibt keine? Ich habe eine modulare Handelslib und ich lief in das Problem, wo das Signalmodul seine IsNewBar Flag setzen würde und überschreibt die prevCandleTime und wenn TrailingSL Modul hatte die gleiche Funktion zu bewerten es falsch zurückgegeben, weil die prevCandleTime gleich wie aktuell ist.

Ja, ich kann das Ergebnis in einem zentralen Flag speichern und verwenden Sie es für alle Module und ich würde nicht auf diese laufen ist JEDOCH die Module können auf verschiedenen Zeitrahmen laufen, daher diese Lösung ist sooo perfekt danke.

 
Sehr informativer Artikel, vielen Dank
 
Danke, die beste Art, eine neue Bar zu entdecken :)
 
Meiner Meinung nach machen wir die Dinge manchmal unnötig kompliziert. Aus praktischen Gründen wird nichts, auch nicht von der Leistung her, die Systemzeit (Windows-Zeit) schlagen. Zu Beginn der nächsten Minute, oder sicherheitshalber nach ein paar Sekunden, können wir davon ausgehen, dass es einen neuen Balken für jedes Symbol geben wird. Sagen wir eine Minute... fünf Minuten... fünfzehn Minuten, oder was auch immer Ihr Zeitrahmen ist. Um sicherzugehen, können Sie überprüfen, ob die Zeit des Balkens und die Systemzeit übereinstimmen.

Aber es gibt keinen Grund, mehrere Instanzen dieser Klasse zu erstellen, nur um zu prüfen, ob es einen neuen Balken gibt, wenn wir doch alle wissen, wann ein neuer Balken gezeichnet wird.


 
double Old_open, New_open;
bool  NewBar = false;

int OnInit()
  {
        //---------- 

        Old_open = iOpen(Symbol(),PERIOD_CURRENT,0);
        
        //---------- 

        return(INIT_SUCCEEDED);
  }
void OnTick()
  {
        //---
        New_open = iOpen(Symbol(),PERIOD_CURRENT,0);
        if (New_open != Old_open)
           {
               Print("Es kommt eine neue Bar rein.", TimeCurrent());
               NewBar = true;
               Old_open = New_open;
           }
        else NewBar = false;
         
  }

Hallo, ich gehe davon aus, dass, sobald die Open()-Quote eingetroffen ist, dies bedeutet, dass ein neuer Takt eingetroffen ist. IMHO ist es einfacher oder übersehe ich etwas?

 
Max Go neuer Takt eingetroffen ist. IMHO ist es einfacher oder übersehe ich etwas?

Stellen Sie sich eine Situation vor, in der der Eröffnungskurs eines neuen Balkens gleich dem Eröffnungskurs des vorherigen Balkens ist.... Bei kleinen TFs ist die Wahrscheinlichkeit hoch, dass eine solche Situation eintritt.

 

Ich habe keine einfachere Methode als diese.
Verfolgt die Eröffnungszeit des aktuellen Balkens und vergleicht sie bei jedem Tick.

// Eine einfachere Methode als diese kenne ich nicht.
// Verfolgt die Eröffnungszeit des aktuellen Balkens und vergleicht sie bei jedem Tick.

double lastTime = 0;

void OnTick() {

   if(isNewBar()){

      Print("New Bar");

     }

}



bool isNewBar() {

   double thisTime= NormalizeDouble(iTime(_Symbol, PERIOD_CURRENT, 0), _Digits);

   if(lastTime != thisTime) {

      lastTime = thisTime;

      return true;

     }

   return false;

  }

Документация по MQL5: Преобразование данных / NormalizeDouble
Документация по MQL5: Преобразование данных / NormalizeDouble
  • www.mql5.com
NormalizeDouble - Преобразование данных - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5