Fehler, Irrtümer, Fragen - Seite 3029

 
Igor Makanu:

sollte dies in Indikatoren nicht korrekt funktionieren:

Wenn ich mich nicht irre, gibt es in der Hilfe eine Aufschlüsselung des Skripts für das Paging von Daten für alle TFs, und es sollte eine Warnung geben, dass historische Daten nicht auf diese Weise vom Indikator angefordert werden können, da der Indikator asynchron arbeitet

und es wird empfohlen, BarsCalculated() einmal zu verwenden, nachdem Sie den Handle gebunden haben


UPD: Skript für History Paging und Erklärung, warum es in Indikatoren nicht funktioniert:https://www.mql5.com/ru/docs/series/timeseries_access

In diesem Artikel wird nur darauf hingewiesen, dass es unerwünscht ist, Daten von Zeitreihen (oder SeriesInfoInteger in einer Schleife) in einem indica


"Erinnern Sie sich daran, dass es höchst unerwünscht ist, eine Anfrage zur Aktualisierung einer Zeitreihe mit demselben Zeitraum wie derIndikator zu senden, der die Aktualisierung aufruft. Die Unerwünschtheit der Anfrage, die dieselbe Symbolperiode wie der Indikator verwendet, ist auf die Tatsache zurückzuführen, dass die Aktualisierung der historischen Daten in demselben Thread erfolgt, in dem auch der Indikator arbeitet. Daher besteht eine hohe Wahrscheinlichkeit eines Keils."


Wenn wir einfach SeriesInfoInteger abfragen und im Falle von false OnCalculate beenden, wie kann dann der Keil entstehen?

 

Frage an alle:

sagt die Hilfe auf https://www.mql5.com/ru/docs/series/timeseries_access:

"Beim Aufruf von Funktionen, die beliebige Daten aus Zeitreihen kopieren, sollten Sie darauf achten, dass der Startparameter (Nummer des Balkens, ab dem mit dem Kopieren der Preisdaten begonnen wird) immer innerhalb der verfügbaren Terminal-Historie liegen muss. Wenn wir nur 100 Balken haben, macht es keinen Sinn, 300 Balken zu kopieren, beginnend mit dem Balken mit dem Index 500. Diese Anfrage wird als ungültig betrachtet und nicht bearbeitet, d.h. es wird keine Historie vom Handelsserver geladen.

Dass CopyTime -1 ausgibt, ist klar, aber - wird es den Prozess selbst initiieren, um eine Zeitreihe / Paging von den Server-Balken bis zum 800sten (500 + 300) zu erstellen oder nicht?

Bitte beraten Sie mich.

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


1. Dieser Artikel sagt nur, dass es nicht wünschenswert ist, Daten aus Zeitreihen (oder SeriesInfoInteger in einer Schleife) in indica


"Erinnern Sie sich daran, dass das Senden einer Anfrage zur Aktualisierung einer Zeitreihe mit demselben Zeitraum wie derIndikator, der die Aktualisierung verursacht, höchst unerwünscht ist. Die Unerwünschtheit der Anforderung von Daten der gleichen Symbolperiode, wie sie der Indikator hat, da die Aktualisierung der historischen Daten im gleichen Thread durchgeführt wird, in dem der Indikator arbeitet. Daher besteht eine hohe Wahrscheinlichkeit eines Keils."


2. Wenn Sie einfach die SeriesInfoInteger anfordern und die OnCalculate im Fall von false lassen, wie wird der Keil auftreten?

1. Ja, denn Sie können den Thread des Indikators nicht verlangsamen, da die Abfrage des Synchronisationsstatus dazu führt, dass der Verlauf ausgetauscht wird, und Sie können nicht warten.

2. Richtig. Wenn die Daten nicht bereit sind, wird der oncalc einfach verlassen und das Synchronisationsterminal wird gestartet, aber der Fluss des Indikators wird nicht unterbrochen. Das nächste oncalc wird erst dann vollständig und ungebremst ausgeführt, wenn die Daten bereit sind und der angeforderte Indikator vollständig gezählt ist. Der oben hinzugefügte Ausdruck zeigt, dass der angeforderte Indikator nicht immer bereit ist, aber wir können zulassen, dass ein neuer Balken nur einmal verarbeitet wird, nicht bei jedem Tick für die schnellste Berechnung aller Indikatoren.

 
Andrey Dik:

Ich danke Ihnen.

Siehe auch meine Frage:https://www.mql5.com/ru/forum/1111/page3028#comment_22557528

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2021.05.28
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 

Andrey Dik:

siehe den obigen Code,

Reparieren Sie Ihren Code, fügen Sie einen Ausdruck hinzu

  if(SeriesInfoInteger(Symbol(), OldTF, SERIES_SYNCHRONIZED))
   {
    if(iBars(Symbol(), OldTF) != BarsCalculated(Handle))
     {
      Print("Баров ", iBars(Symbol(), OldTF));
      Print("посчитано", BarsCalculated(Handle));
      return 0;
     }
   }
  else
   {
    Print("Период ", OldTF, " не синхронизирован.");
    return 0;
   }

und wenn du deine Kakerlaken siehst, rollst du deinen Monitor zusammen und schiebst ihn... du weißt schon wohin.

 
mktr8591:

Ich danke Ihnen.

siehe auch meine Frage:https://www.mql5.com/ru/forum/1111/page3028#comment_22557528

Ich bin mir nicht 100%ig sicher (muss ich überprüfen), aber sobald Sie sicherstellen, dass das angeforderte Datum frischer ist als das allererste in der Historie auf dem Server, können Sie die Daten anfordern und die Historie wird ausgetauscht.

 
Andrey Dik:

Ich bin mir nicht 100%ig sicher (muss ich überprüfen), aber wenn Sie sicherstellen, dass das angeforderte Datum frischer ist als das allererste Datum in der Historie auf dem Server, können Sie die Daten anfordern und die Historie wird ausgetauscht.

Danke,

Ich habe nach meinem anderen Beitrag gefragt, hier noch einmal der Link: https: //www.mql5.com/ru/forum/1111/page3028#comment_22557528

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2021.05.28
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 
Alexey Viktorov:

Korrigieren Sie Ihren Code, fügen Sie einen Ausdruck hinzu

und wenn du deine Kakerlaken siehst, rollst du deinen Monitor zusammen und schiebst ihn... du weißt schon wohin.

Du beweist, dass ich Recht habe, Genosse.

 
mktr8591:

Ich danke Ihnen,

Ich habe nach meinem anderen Beitrag gefragt, hier noch einmal der Link: https: //www.mql5.com/ru/forum/1111/page3028#comment_22557528

Ich verstehe Ihren Code nicht ganz. Was soll nach "return 0;" beim nächsten Aufruf von OnCalculate geschehen?

Wir geben 0 zurück und sagen damit, dass wir noch nichts berechnet haben und der prev kalk beim nächsten Takt nicht um 1 erhöht wird.

d.h. wir bleiben an dem Balken, an dem wir mit der Abfrage der Daten aus dem olderf begonnen haben, bis wir zurückkehren (rates_total)

[Gelöscht]  
Andrey Dik:

Du beweist, dass ich Recht habe, Genosse.

1. Vielen Dank an alle - ich habe mein Wissen über Indikatoren ein wenig erweitert ))))

2) Andrew, wenn jemand deine Ideen nicht versteht (mich eingeschlossen), kann das nur eines bedeuten - du hast das Bild nicht richtig gezeichnet! Genauer gesagt - du zeichnest sie so, dass viele Leute sie nicht verstehen ...