Fehler, Irrtümer, Fragen - Seite 3035

 
Ivan Titov:

Auf den Seiten für freiberufliche Tätigkeiten ist heute ein Fehler aufgetreten:

Chrome-Browser. Was hat das mit der Sache zu tun?

Vielen Dank für Ihre Nachricht. Korrigiert

 
Slava:

Können Sie das nicht selbst überprüfen?

Man kann es überprüfen, aber was soll man überprüfen, wenn man es nicht versteht ))
Und es ist nicht möglich, den Moment zu simulieren, in dem die Daten noch nicht bereit sind.

Ich möchte die Theorie verstehen, wie man mit OnCalculate in diesem Beispiel richtig arbeitet.
Wenn die Daten bei der aktuellen Schleifeniteration nicht bereit sind, sollte der Limit+1-Zähler zurückgegeben werden oder was?

 
Roman:

Es ist möglich, dies zu überprüfen, aber was soll man überprüfen, wenn man nichts versteht?
Und es ist nicht möglich, den Moment zu simulieren, in dem die Daten noch nicht bereit sind.

Ich möchte die Theorie verstehen, wie man OnCalculate in diesem Beispiel richtig handhabt.
Wenn die Daten bei der aktuellen Schleifeniteration nicht bereit sind, sollte der Zähler limit+1 zurückgegeben werden oder was?

Es sollte Null zurückgegeben werden.

 
Slava:

4. Alle Zeitreihen werden in der Reihenfolge von der niedrigsten zur höchsten verarbeitet. Zuerst die Anwendung des Ticks, dann die Berechnung aller Indikatoren, die für diese Zeitreihe erstellt wurden. Wenn Sie Daten für dasselbe H1-Symbol von einem Indikator abfragen, der auf M1 arbeitet, werden Sie niemals Daten mit einem angewandten Tick erhalten. Die Daten werden immer einen Tick zurückliegen, egal welche Tricks Sie anwenden. Denn ein Thread pro Symbol mit fortlaufender Verarbeitung von Zeitfenstern.

Die Aussage ist etwas zweideutig. Ich möchte das nur für den Fall klären. Ja, bei der Verarbeitung eines Ticks werden alle Zeitreihen in der Reihenfolge von der jüngsten zur ältesten verarbeitet. Jeder Tick wird zu den Daten jeder Zeitreihe hinzugefügt, dann werden die Indikatoren für jede Zeitreihe der Reihe nach berechnet. Mit anderen Worten, für den Indikator in OnCalculate() werden zwar die Daten der Zeitreihen (alle) aktualisiert, aber die Daten der Indikatoren der älteren Zeitrahmen wurden noch nicht neu berechnet.

 
Slava :

Bei der ersten Anfrage kann der Indikator nur aus einem Grund keine Daten von seinem Symbol, sondern von einem anderen Zeitrahmen erhalten - die benötigte Zeitreihe ist noch nicht aufgebaut oder wurde bereits nach einiger Zeit zerstört, als es keine Anfragen gab.

Nach einer erfolglosen Anfrage senden Sie einfach einen Befehl an Ihr Diagramm, um es zu aktualisieren, und beenden OnCalculate sofort. Es ist garantiert, dass OnCalculate aufgerufen wird und dass die benötigten Zeitreihen zu diesem Zeitpunkt vorbereitet sind.

Das ist so, als würde man mit einem Hammer eine Fliege fangen.

Wie Sie wissen, aktualisiert dieser Befehl alle Indikatoren auf allen Charts des betreffenden Symbols. Wenn Sie mehrere Indikatoren auf mehreren Charts desselben Symbols haben, können Sie leicht eine Art Zyklus erhalten, da jeder Indikator seinen eigenen ChartSetSymbolPeriod ()-Befehl sendet.

Könnten Sie einen Befehl hinzufügen, der nur den REMOTE-Indikator aktualisiert?

 
Alain Verleyen:

Dies ist vergleichbar mit der Verwendung eines Hammers, um eine Fliege zu fangen.

Wie Sie wissen, aktualisiert dieser Befehl alle Indikatoren auf allen Charts des betreffenden Symbols. Wenn Sie mehrere Indikatoren auf mehreren Charts desselben Symbols haben, können Sie leicht eine Art Schleife erhalten, da jeder Indikator seinen eigenen ChartSetSymbolPeriod ()-Befehl senden wird.

Könnten Sie einen Befehl hinzufügen, der nur den REMOTE-Indikator aktualisiert?

Wenn der Code logische Fehler enthält, kann man alles bekommen.

 
mktr8591:

Eigentlich ist OnTick nicht mit OnCalculate durch dasselbe Symbol synchronisiert. Theoretisch kann OnTick zu spät kommen und bis zu seinem Start werden alle Anzeigen für alle TFs berechnet?

Bisher sehe ich die gegenteilige Situation - die Indikatoren werden nicht mit neuen Ticks berechnet, die zum Zeitpunkt der Balkenöffnung eintreffen.

 
Anton:

Die Aussage ist ein wenig zweideutig. Lassen Sie mich das vorsichtshalber klarstellen. Ja, bei der Verarbeitung eines Ticks werden alle Zeitreihen in der Reihenfolge von der jüngsten zur ältesten verarbeitet. Jeder Tick wird zu den Daten jeder Zeitreihe hinzugefügt, dann werden die Indikatoren für jede Zeitreihe der Reihe nach berechnet. Das bedeutet, dass für den Indikator in OnCalculate() zwar die Daten der Zeitreihe (alle Zeitreihen) aktualisiert werden, aber die Daten der Indikatoren der höheren Zeitrahmen noch nicht neu berechnet wurden.

Was bedeutet"Berechnung der Indikatoren für jeden Zeitrahmen in der Reihenfolge", d. h. in Abhängigkeit von der"ENUM_TIMEFRAMES-Periode"?

intiCustom(
stringsymbol,// Symbolname
ENUM_TIMEFRAMESZeitraum,// Punkt
string name// folder/user_name
...// Liste der Eingabeparameter des Indikators
);

Und wenn es zwei Indikatoren mit der gleichenENUM_TIMEFRAMES-Periode gibtund der eine aus den Daten des anderen berechnet wird, wie wird dann die Korrektheit der aufeinanderfolgenden Berechnung sichergestellt?

Habe ich richtig verstanden, dass der Indikator, wenn erauf M1 berechnet wird(ENUM_TIMEFRAMES-Periode), bei der Abfrage der OHLC-Informationen die aktuellen Informationen über den letzten Tick für jede obere TF erhält?

 
Was ist das Ergebnis von

iSpread ?


Ich sehe, dass er in etwa dem Spread-Wert entspricht, wenn Sie im Terminal unter Symbols/Bars nach Balken suchen.

Natürlich entsprechen diese Werte nicht den realen Werten, die durch SYMBOL_SPREAD gegeben sind.

Warum ein solcher Unterschied? Und was ist eine solche unwirkliche Streuung, die mitiSpread angezeigt wird?

 
Aleksey Vyazmikin:

Was meinen Sie mit"Berechnung der Indikatoren für jede Zeitreihe in der Reihenfolge", d. h. abhängig von der"ENUM_TIMEFRAMES-Periode"?

intiCustom(
stringsymbol,// Symbolname
ENUM_TIMEFRAMESZeitraum,// Punkt
string name// folder/user_name
...// Liste der Eingabeparameter des Indikators
);

Und wenn es zwei Indikatoren mit der gleichenENUM_TIMEFRAMES-Periode gibtund einer von ihnen auf den Daten eines anderen berechnet wird, wie kann man dann die Korrektheit einer aufeinanderfolgenden Berechnung sicherstellen?

Diese wird vom Terminal bereitgestellt.

Habe ich richtig verstanden, dass der Indikator, wenn erauf M1 berechnet wird(ENUM_TIMEFRAMES-Periode), bei der Abfrage der OHLC-Informationen in jedem Fall die aktuellen Informationen über den letzten Tick für jede obere TF erhält?

Ja, genau so ist es.

Grund der Beschwerde: