Wie erhalte ich Open, Low, High, Close Parameter in MQL5? - Seite 4

 
Alexey Viktorov:

In diesem Fall, eindeutig CopyRates aus dem ersten Takt 10s. Und zwar nicht bei jedem Tick, sondern nur beim Erscheinen eines neuen Balkens.

Wie erkenne ich, ob ein neuer Balken ohne CopyRates erschienen ist? Ich meine, Sie müssen zuerst das neue Bar-Event sehen. Ist das ohne CopyRates möglich? Ich bin ein wenig verwirrt).

Das ist es, was es bedeutet, ich habe mich nie mit diesem Thema auf MT5 beschäftigt. Bitte verstehen Sie das)).

 
Alexey Viktorov:

Oh, Vladimir. Ich bin zwar damit herausgeplatzt, aber leider habe ich keine Reservierung gemacht. Wenn wir z.B. nur den Eröffnungskurs oder die Uhrzeit benötigen, brauchen wir CopyRates() nicht zu verwenden, in diesem Fall reicht CopyOpen oder iOpen völlig aus... bzw. CopyTime oder iTime. Sie wird nach Ihren religiösen Vorlieben ausgewählt.

Und ich füge meinen Vorbehalt hinzu: Was die Kosten für die Leistung angeht, gibt es keinen nennenswerten Unterschied. Daher bleiben nur religiöse Vorurteile übrig.

Die fxsaber war die Überprüfung CopyRates() Kosten - es ist teurer als immer die erforderliche Eigenschaft separat. Sie gilt nicht für den Fall, dass wir alle Preise auf einmal erhalten müssen.

 
Реter Konow:
Und woher weiß ich, dass ein neuer Balken ohne CopyRates erschienen ist? Ich meine, du musst zuerst das neue Bar-Event sehen. Ist es möglich, dies ohne CopyRates zu tun? Ich bin ein wenig verwirrt).

Beobachten Sie das Erscheinen eines neuen Balkens, ohne auf irgendetwas zu achten, und rufen Sie CopyRates

Es gibt viele verschiedene Funktionen und Möglichkeiten, eine neue Leiste auf der Website zu erkennen.

 
Реter Konow:

Wie erkenne ich, ob ein neuer Balken ohne CopyRates erschienen ist? Ich meine, Sie müssen zuerst das neue Bar-Event sehen. Ist das ohne CopyRates möglich? Ich bin ein wenig verwirrt).

Das ist es, was es bedeutet, nie mit diesem Thema auf MT5 behandelt. Bitte verstehen Sie das.))

Am einfachsten ist es, die Eröffnungszeit des aktuellen Balkens zu vergleichen. Wenn sie nicht mit der zuvor gespeicherten Zeit übereinstimmt, legen Sie einen neuen Balken an, tun Sie, was auf dem neuen Balken zu tun ist, und merken Sie sich diese Zeit für die nächste Prüfung.

 
Alexey Viktorov:

Ohne auf etwas zu achten, verfolgen wir das Erscheinen eines neuen Balkens und rufen CopyRates

Es gibt viele verschiedene Funktionen und Möglichkeiten, eine neue Leiste auf der Website zu definieren.

Das Erscheinen eines neuen Balkens im MT5 ist nicht an den Beginn der Minute gebunden. Sie ist überhaupt nicht zeitlich begrenzt. Es gibt einen Haken. Wie genau können wir das Erscheinen eines neuen Balkens nur anhand von Ticks verstehen? Sie müssen sich immer noch auf die Zeitreihen beziehen. Anders wäre es kaum möglich. Obwohl... Ich bin mir nicht 100%ig sicher.
 
Artyom Trishkin:

fxsaber hat eine CopyRates()-Kostenprüfung durchgeführt - es ist teurer, als die erforderliche Eigenschaft separat zu erhalten. Dies gilt nicht für den Fall, dass Sie alle Preise auf einmal erhalten müssen.

Bei allem Respekt, fxsaber, ich ziehe es vor, solchen Unterschieden keine Beachtung zu schenken. Deshalb habe ich gesagt, dass" es keinenmerklichen Unterschied gibt", und ich bin nicht an dem Unterschied bei 1e6 Iterationen interessiert. Es ist ja nicht so, dass wir einen Shooter schreiben, bei dem man 1e6 Kugeln auf einmal abfeuern kann.
 
Artyom Trishkin:

Am einfachsten ist es, die Eröffnungszeit des aktuellen Balkens zu vergleichen. Wenn sie nicht mit der zuvor gespeicherten Zeit übereinstimmt, legen Sie einen neuen Balken an, tun Sie, was auf dem neuen Balken zu tun ist, und merken Sie sich diese Zeit für die nächste Prüfung.

Es bedeutet also, CopyRates bei jedem Tick aufzurufen? Woher wissen wir sonst, dass sich die Öffnungszeit des aktuellen Taktes geändert hat?
 
Реter Konow:
Sie rufen also die CopyRates bei jedem Tick auf? Wie würden Sie sonst wissen, dass sich die Öffnungszeit der aktuellen Bar geändert hat?

Sie können entweder die Klasse CNewbar verwenden, oder im Forum nach NewBar suchen

SZZ: ganzer Artikel!https://www.mql5.com/ru/articles/159



Alexey Viktorov:

Igor, du musst in die erste Klasse gehen. Dort werden die Buchstaben gelehrt, und nachdem Sie sie gelernt haben, werden Sie den Unterschied zwischen CopyRates und CopyBuffer verstehen.

Hier ist ein besserer Vorschlag, um dieses Problem OHNE CopyRates zu lösen


OK, das Übliche...hoppla, hoppla...und keine einzige Codezeile ))))

Ich habe mein Beispiel angeführt, um zu zeigen, dass es nicht immer bequem (und selten notwendig) ist, ein Array von aufeinanderfolgenden OHLC-Werten zu erhalten. Bei praktischen Aufgaben müssen wir normalerweise eine Auswahl von OHLC-Werten von verschiedenen Balken erhalten (Indikatoren sind nicht enthalten)

Alles klar, mach's gut!

Обработчик события "новый бар"
Обработчик события "новый бар"
  • www.mql5.com
Для создателей индикаторов и экспертов всегда был актуален вопрос написания экономичного кода с точки зрения времени выполнения. Можно подойти к решению этой задачи с разных сторон. Из этой обширной темы в данной статье будет затронут, казалось бы уже решенный вопрос: проверка появления нового бара. Это достаточно популярный способ ограничения...
 
Реter Konow:
Also bei jedem Tick CopyRates aufrufen? Woher wissen wir sonst, dass sich die Öffnungszeit des aktuellen Taktes geändert hat?

Ja, bei jedem Ticken überprüfen wir die Uhrzeit:

//+------------------------------------------------------------------+
//| Возвращает время указанного бара                                 |
//+------------------------------------------------------------------+
datetime Time(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int index)
  {
   datetime array[];
   return(CopyTime(symbol_name,timeframe,index,1,array)==1 ? array[0] : 0);
  }
//+------------------------------------------------------------------+

Kurz gesagt, es ist so:

static datetime last_time=0;
datetime time_current=Time(Symbol(),PERIOD_CURRENT,0);
if(time_current==0)
  return;
if(time_current!=last_time)
  {
   // Новый бар или первый запуск (для контроля первого запуска можно сделать флаг - чтобы не обрабатывать его как новый бар)
   // делаем что нужно на новом баре
   last_time=time_current;
  }

Ich habe es einfach auf meine Hand geschrieben - um die Idee zu zeigen, nicht die Genauigkeit des Schreibens

 
Реter Konow:
Wir sollten also bei jedem Tick CopyRates aufrufen? Wie kann man sonst wissen, dass sich die Öffnungszeit des aktuellen Taktes geändert hat?

if(prevTime!=iTime(...))

{

// Aktuelle Öffnungszeit des Balkens geändert

}

prevTime=iTime(...);