Wie man einen neuen Balken erkennt

 

Hallo zusammen,

Ich bin ein kompletter Neuling in MQL5, aber ich habe ein gutes Stück der Codierung für andere Plattformen getan.

Ich frage mich, warum es so schwierig ist, dass ein EA nur bei einem neuen Balken ausgeführt wird. Ich habe einen Blick auf einige der Artikel, einschließlich der "neuen bar" Event-Handler, und es scheint sehr schwierig.

Wenn das nicht funktioniert und ich den "new bar"-Eventhandler verwenden muss, ist es dann möglich, die entsprechenden Dateien einfach zu laden und in den Ordner Files(?) zu kopieren und sie dann #include? Gibt es irgendwo eine Dokumentation für Leute wie mich, die im Grunde keine Ahnung haben, was sie da tun?

Ich arbeite mich durch das Tutorial in https://www.mql5.com/en/articles/100, und das erste, was mir auffiel, war, dass die "Bars"-Funktion verwendet wird, um sicherzustellen, dass genügend Balken für die Berechnungen vorhanden sind, aber das nächste Codestück ist offenbar dazu gedacht, einen neuen Balken zu erkennen, und ist (jedenfalls nach meinem Verständnis) ein sehr komplexes Codestück. Könnte nicht die Funktion Bars verwendet werden, um einen neuen Balken zu erkennen? Etwas wie if(Bars > int LastBarCount) {bool IsNewBar = true; LastBarCount = Bars;} else {IsNewBar = false;}. Würde so etwas funktionieren?

Einer für die Wunschliste. Wäre es nicht gut, wenn es ein OnNewBar-Ereignis gäbe, das wir anstelle von OnTick überschreiben könnten? Da jeder Indikator, den ich je gesehen habe, mit Balken und nicht mit Ticks arbeitet, würde dies das Leben aller Beteiligten viel einfacher machen, denke ich.

Ich habe gerade eine weitere Möglichkeit gefunden: "BarsCalculated". Auch hier bin ich mir nicht ganz sicher, was das aus der Beschreibung bedeutet, aber es sieht aus wie die Anzahl der Bars, die der EA bereits verarbeitet hat. Wenn das wahr wäre, dann alles, was ich bräuchte, um zu überprüfen, ist if(Bars > BarsCalculated), wenn wahr dann gehen und tun meine Verarbeitung, sonst zurück? Übersehe ich etwas?

Danke!

Ian

Step-By-Step Guide to writing an Expert Advisor in MQL5 for Beginners
  • 2010.06.09
  • Samuel
  • www.mql5.com
The Expert Advisors programming in MQL5 is simple, and you can learn it easy. In this step by step guide, you will see the basic steps required in writing a simple Expert Advisor based on a developed trading strategy. The structure of an Expert Advisor, the use of built-in technical indicators and trading functions, the details of the Debug mode and use of the Strategy Tester are presented.
 


Versuchen Sie dies in Ihrem EA, am Anfang der OnTick-Funktion.

// Wir werden die statische Variable Old_Time verwenden, um die Barzeit zu speichern.

// Bei jeder OnTick-Ausführung werden wir die aktuelle Barzeit mit der gespeicherten Zeit vergleichen.

// Wenn die Balkenzeit nicht mit der gespeicherten Zeit übereinstimmt, bedeutet dies, dass wir einen neuen Tick haben.


statische datetime Old_Time;

datetime New_Time[1];

bool IsNewBar=false;


// Kopieren der letzten Balkenzeit in das Element New_Time[0]

int copied=CopyTime(_Symbol,_Period,0,1,New_Time);

if(copied>0) // ok, die Daten wurden erfolgreich kopiert

{

if(Alte_Zeit!=Neue_Zeit[0]) // wenn die alte Zeit nicht gleich der neuen Taktzeit ist

{

IsNewBar=true; // wenn es sich nicht um einen ersten Aufruf handelt, ist der neue Balken erschienen

if(MQL5InfoInteger(MQL5_DEBUGGING)) Print("Wir haben hier einen neuen Balken ",New_Time[0]," alte Zeit war ",Old_Time);

Alte_Zeit=Neue_Zeit[0]; // Speichern der Taktzeit

}

}

sonst

{

Alert("Fehler beim Kopieren historischer Zeitdaten, Fehler =",GetLastError());

ResetLastError();

zurück;

}


//--- EA sollte nur auf einen neuen Handel prüfen, wenn wir einen neuen Balken haben

if(IsNewBar==false)

{

zurückkehren;

}

//--- Haben wir genug Balken, mit denen wir arbeiten können

int Mybars=Bars(_Symbol,_Periode);

if(Mybars<60) // wenn die Gesamtzahl der Balken weniger als 60 Balken beträgt

{

Alert("Wir haben weniger als 60 Balken, EA wird jetzt beendet!");

zurückkehren;

}


 

Hallo oneillj,

ich dachte, ich hätte schon geantwortet, aber es scheint im Internet-Äther verschwunden zu sein.

Das Codefragment, das du uns zur Verfügung gestellt hast, ist so ziemlich das, worüber ich mich ursprünglich beschwert habe. Warum so komplex? Ich dachte mir, dass es einen einfacheren Weg geben muss. Ich habe mir diesen ausgedacht, der zu funktionieren scheint. Bitte korrigieren Sie mich, wenn ich falsch liege. (Ich habe auch versucht, BarsCalculated zu verwenden, aber es war immer gleich Bars, so dass der Test immer als falsch ausgewertet wurde).

static int LetzteBarZahl = 0;
if (Balken(_Symbol, _Periode) > LastBarCount)
LastBarCount = Bars(_Symbol, _Period);
sonst
zurückgeben;

;-) Ian
Documentation on MQL5: Timeseries and Indicators Access / BarsCalculated
  • www.mql5.com
Timeseries and Indicators Access / BarsCalculated - Documentation on MQL5
 
Ich benutze das...
static int BARS;
//+------------------------------------------------------------------+
//| NewBar function                                                  |
//+------------------------------------------------------------------+
bool IsNewBar()
   {
      if(BARS!=Bars(_Symbol,_Period))
        {
            BARS=Bars(_Symbol,_Period);
            return(true);
        }
      return(false);
   }
 
"New Bar" Event Handler
  • 2010.10.11
  • Konstantin Gruzdev
  • www.mql5.com
MQL5 programming language is capable of solving problems on a brand new level. Even those tasks, that already have such solutions, thanks to object oriented programming can rise to a higher level. In this article we take a specially simple example of checking new bar on a chart, that was transformed into rather powerful and versatile tool. What tool? Find out in this article.
 
ssn:
Ich verwende dies...
Das Risiko bei dieser Methode ist, wenn die Kursdaten für Ihr Symbol nicht am 4. Januar 1971 beginnen, dann werden alle geladenen historischen Daten, während der Experte an das Diagramm angehängt ist, als neuer Balken gelesen...
 
Kommentare, die sich nicht auf dieses Thema beziehen, wurden nach "Kann mql5 in MT4 verwendet werden?" verschoben.
 

Die Funktion iTime gibt die Zeit des Balkens an.

Wenn sie sich ändert, ist es ein neuer Balken.

 
Nathan5:

Die Funktion iTime gibt die Zeit des Balkens an.

Wenn sie sich ändert, ist es ein neuer Balken.

Dieses Thema bezieht sich auf mql5. Es gibt keine iTime() -Funktion.
 

Sie können auch dies versuchen:


// Rates structure array for last two bars 
   MqlRates mrate[2];                 
   CopyRates(Symbol(), Period(), 0, 2, mrate);

// NEW BAR CHECK.
//---------------
   static double   dBar_Open;     
   static double   dBar_High;
   static double   dBar_Low;
   static double   dBar_Close;
   static long     lBar_Volume;
   static datetime nBar_Time;

// Boolean for new BAR confirmation. 
   bool bStart_NewBar = false;

// Check if the price data has changed tov the previous bar.   
   if(mrate[0].open != dBar_Open || mrate[0].high != dBar_High || mrate[0].low != dBar_Low || mrate[0].close != dBar_Close || mrate[0].tick_volume != lBar_Volume || mrate[0].time != nBar_Time)
         {
         bStart_NewBar = true; // A new BAR has appeared!        

// Update the new BAR data.     
         dBar_Open   = mrate[0].open;      
         dBar_High   = mrate[0].high;
         dBar_Low    = mrate[0].low;
         dBar_Close  = mrate[0].close;                 
         lBar_Volume = mrate[0].tick_volume;
         nBar_Time   = mrate[0].time;
         }

// Check if a new bar has formed.   
   if(bStart_NewBar == true)
         {
         
// Your code.          
         
         }
 
Stephen Njuki:
Ich benutze dies...
Leider scheint dies nicht in MQL5 zu funktionieren.
Grund der Beschwerde: