Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1754

 
Die Situation ist wie folgt: die Variable X speichert den Index des Balkens in der Historie, wir wissen, dass wenn ein neuer Balken erscheint, es eine Verschiebung gibt, und deshalb zeigt X bereits auf einen anderen Balken. Wie kann man das beheben? Die Idee: Mit jedem neuen Balken erhöhen wir den Zähler (count++) und addieren ihn zu X. Somit zeigt X unabhängig vom Versatz immer auf denselben Takt. Aber es gibt ein Problem - wenn der EA initialisiert wird, sollte der erste aktuelle Balken nicht berücksichtigt werden. Ich denke, es kann leicht gelöst werden, wenn count anfänglich nur gleich -1 ist. Das heißt, beim aktuellen Takt nach der Inkrementierung steht der Zähler auf "0", und beim nächsten neuen Takt (wenn die erste Verschiebung um 1 Takt nach der Initialisierung stattgefunden hat) wird er auf "1" gesetzt. Was meinen Sie dazu? Vielleicht denke ich überhaupt an der falschen Stelle?
 
Nerd Trader #:
Die Situation ist wie folgt: die Variable X speichert den Index des Balkens in der Historie, wir wissen, dass wenn ein neuer Balken erscheint, es eine Verschiebung gibt, und deshalb zeigt X bereits auf einen anderen Balken. Wie kann man das beheben? Die Idee: Mit jedem neuen Balken erhöhen wir den Zähler (count++) und addieren ihn zu X. Somit zeigt X unabhängig vom Versatz immer auf denselben Takt. Aber es gibt ein Problem - wenn der EA initialisiert wird, sollte der erste aktuelle Balken nicht berücksichtigt werden. Ich denke, es kann leicht gelöst werden, wenn count anfänglich nur gleich -1 ist. Das heißt, beim aktuellen Takt nach der Inkrementierung steht der Zähler auf "0", und beim nächsten neuen Takt (wenn die erste Verschiebung um 1 Takt nach der Initialisierung stattgefunden hat) wird er auf "1" gesetzt. Was meinen Sie dazu? Vielleicht denke ich überhaupt an der falschen Stelle?

Wenn es sich um einen Indikator handelt, ist er ausreichend

bool  ArraySetAsSeries(
   const void&  array[],    // массив по ссылке
   bool         flag        // true означает обратный порядок индексации
   );

zu allen Arrays und Puffern des verwendeten Indikators.

Dann wird der Null-Balken zu rates_total-1

ArraySetAsSeries - Операции с массивами - Справочник MQL4
ArraySetAsSeries - Операции с массивами - Справочник MQL4
  • docs.mql4.com
ArraySetAsSeries - Операции с массивами - Справочник MQL4
 
Nerd Trader #:
Die Situation ist wie folgt: die Variable X speichert den Index des Balkens in der Historie, wir wissen, dass wenn ein neuer Balken erscheint, es eine Verschiebung gibt, und deshalb zeigt X bereits auf einen anderen Balken. Wie kann man das beheben? Die Idee: Mit jedem neuen Balken erhöhen wir den Zähler (count++) und addieren ihn zu X. Somit zeigt X unabhängig vom Versatz immer auf denselben Takt. Aber es gibt ein Problem - wenn der EA initialisiert wird, sollte der erste aktuelle Balken nicht berücksichtigt werden. Ich denke, es kann leicht gelöst werden, wenn count anfänglich nur gleich -1 ist. Das heißt, beim aktuellen Balken nach der Inkrementierung ist der Zähler "0" und beim nächsten neuen Balken (wenn die erste Verschiebung um 1 Balken nach der Initialisierung stattgefunden hat) ist er "1". Was meinen Sie dazu? Vielleicht denke ich überhaupt an der falschen Stelle?
      datetime x=время нужного бара;
      int index=iBarShift(_Symbol,0,x);
 
MakarFX #:
Warum sollte man sich diese Mühe machen?
 
Alexey Viktorov #:
Warum sollte man sich diese Mühe machen?
Es ist einfacher für mich)
 
MakarFX #:
Es ist einfacher für mich)

Aber der Prozessor ist schwerer...

 
Alexey Viktorov #:

Aber der Prozessor ist schwerer...

Ich weiß nicht, welche Funktionen welche Last tragen. Kann man das irgendwo nachlesen?
 
Nerd Trader #:
Die Situation ist wie folgt: Die Variable X speichert den Index des Balkens in der Historie, und wir wissen, dass, wenn ein neuer Balken erscheint, dieser verschoben wird und X daher bereits auf einen anderen Balken zeigt. Wie kann man das beheben? Die Idee: Mit jedem neuen Balken erhöhen wir den Zähler (count++) und addieren ihn zu X. Somit zeigt X unabhängig vom Versatz immer auf denselben Takt. Aber es gibt ein Problem - wenn der EA initialisiert wird, sollte der erste aktuelle Balken nicht berücksichtigt werden. Ich denke, es kann leicht gelöst werden, wenn count anfänglich nur gleich -1 ist. Das heißt, beim aktuellen Takt nach der Inkrementierung steht der Zähler auf "0", und beim nächsten neuen Takt (wenn die erste Verschiebung um 1 Takt nach der Initialisierung stattgefunden hat) wird er auf "1" gesetzt. Was meinen Sie dazu? Vielleicht denke ich überhaupt an der falschen Stelle?

Nicht da. Beim Laden von EA/Indicator steht nichts in X, wenn es sich innerhalb des Terminals befindet, es sei denn, es handelt sich um eine intu- oder externe oder globale Variable außerhalb des Terminals, so dass dort erst etwas geschrieben werden muss. Und dann lesen wir einfach die Änderungen der Gesamtzahl der Balken ab (unter Berücksichtigung des Auftretens eines neuen Balkens).

datetime BarTime;

FlagNewBar=false;
if(BarTime!=iTime(NULL,0,0))
{
 BarTime=iTime(NULL,0,0);
 FlagNewBar=true;
}
if(FlagNewBar==true)
{
// И когда тру, делаем что нужно делать когда появился новый бар, 
//на следующем тике флаг нового бара будет ложь, так как БарТайм время все время существования нулевого бара будет равным
}
 

Grüße. Können Sie mir einen Tipp geben? Wie in mt5 bei der Initialisierung oder bei Tick zu definieren Prüfung?

Bislang habe ich nur OnTester() gefunden, das kurz vor OnDeinit() aufgerufen wird.

 
@Alexey Viktorov @MakarFX interessante, recht gute Lösungen. Ich danke Ihnen.

@Valeriy Yastremskiy Der Index wird noch in OnInit() in X platziert. Mein Code sieht wie folgt aus:
last_time = iTime(NULL, 0, 0);

  if(last_time > bar.time_open){
    bar.time_open = last_time;
    coint++;//стартовое значение -1
  }
Die Bedingung mit FlagNewBar erscheint mir überflüssig.
Grund der Beschwerde: