MQL5-Fehler bei der Arbeit mit iClose/iOpen-Zeitreihenzugriff usw. - Seite 2

 
Stanislav Dray:

Dann sagen Sie mir, warum das Einfrieren in meinem Fall passiert? Ich habe das Einfrieren von Daten in OnTick vor der Indikator-Polling-Funktion, d.h. die CopyTime-Aktualisierung durch M1 wirkt als Auslöser, um andere Verarbeitungen in OnTick zu starten, und vor CopyTime keine Funktionen oder Indikator-Polling.

Und warum gab es vor dem 30. Build keine solchen Probleme und seit Oktober 2017 funktionierte alles einwandfrei?

Tun Sie bitte, was ich Ihnen geraten habe.

Andernfalls benötigen Sie alle Materialien für eine 100%ige Wiedergabe.
 

Warum schreiben die Entwickler nicht eine Funktion, die ein synchronisiertes Array von Daten (über mehrere Tools hinweg) garantiert, so dass die Leute sich nicht die Mühe machen und ihre Zeit umsonst verschwenden?

Schließlich ist MT5 als cooles und praktisches Tool positioniert, oder?

Ich freue mich sehr darauf...

 
Vladimir Karputov:

Es wurde auch immer empfohlen, dass Sie, wenn Sie mit einem anderen Zeitrahmen arbeiten, den OHLC dieses Zeitrahmens einmal pro Minute abrufen sollten (jede CopyXXXX-Funktion). Dies war schon immer der Fall.

sagte Slawa alle zwei Minuten. Ich bin zu faul, danach zu suchen, aber ich erinnere mich genau.

 
transcendreamer:

Warum schreiben die Entwickler nicht eine Funktion, die ein synchronisiertes Array von Daten (über mehrere Tools hinweg) garantiert, damit die Leute sich nicht die Mühe machen und ihre Zeit verschwenden?

Schließlich ist MT5 als cooles und praktisches Tool positioniert, oder?

wir warten...

Ja. OnCalculate-Konstruktor für die erforderliche Anzahl von Symbolen und Zeitrahmen. Oder, zusätzlich zu OnCalculate, ein neues Objekt einführen, z.B. "MainCalculate" für maximal 255 OnCalculate, in dem OnCalculate-Objekte wohnen - wer es nicht braucht, benutzt das alte OnCalculate, wer mtf und andere Symbole braucht, benutzt "MainCalculate". Der erste und letzte Tick des Balkens ist für alle Symbole und passenden Zeitrahmen gleich. Da OnCalculate bereits entwickelt und etabliert wurde, ist es logisch, alle Aufrufe von Symbolen und Zeitrahmen von Drittanbietern über die OnCalculate-Aggregation auszugeben, ohne dass andere Funktionen zu Zeitrahmen und Symbolen vermitteln.

 

Überlegen Sie, wo die Daten (insbesondere die garantierten Daten) verfügbar sein werden, wenn Ihre Indikatoren unerträglich langsam sind und Hunderte von Millisekunden oder sogar Sekunden für den Empfang/die Ausgabe von Ticks pro Tick benötigen. Infolgedessen reicht die Zeit der CPU nicht aus, um die Ticks zu verarbeiten, was sich in einem zunehmenden Defizit und einem entsprechenden Stillstand in der Chart-Historie niederschlägt.

Wenn Sie um "garantiertes Geben" bitten, ist das höchstwahrscheinlich eine Bitte von "ich will nichts wissen, ich will weiter schreiben wie ich will, ich will nicht über Leistung und Sperren nachdenken, einfach geben"?


Wenn Ihnen Millionen von Barren zur Verfügung stehen, sollten Sie sich Gedanken über die Leistung Ihrer und anderer Indikatoren machen. Ein schlecht geschriebener und teurer Indikator kann die Aktualisierung seiner Symbolcharts leicht verlangsamen.

Beginnen Sie damit, die Reaktionszeit von OnCalculate in Mikrosekunden zu messen. Teilen Sie dann 1 Sekunde durch die durchschnittliche Tick-Reaktionszeit, um die maximale Aufschlüsselung des Indikators in Ticks pro Sekunde zu erhalten.

Dies ist sofort ernüchternd.

 
Artyom Trishkin:

Alle zwei Minuten, sagte Slava. Ich bin zu faul, um sie zu suchen, aber ich erinnere mich genau.

Ich erinnere mich, aber ich verwende immer ein 1-Minuten-Intervall. Auf diese Weise ist es zuverlässiger.

 
Farkhat Guzairov:

Entschuldigen Sie mich, aber in diesem Fall die Tiefe der Geschichte auf M15 Zeitrahmen war 120 Bars und was, ist es bereits kritisch für MQL5?

Sie haben kein reproduzierbares Material vorgelegt.

Ich habe erklärt,warum die Funktionen für den Zugriff auf die Daten anderer Personen verzögert werden, wenn auf ihren Symbolen Verzögerungsindikatoren vorhanden sind. Sie sprechen über Ihren speziellen Fall von Call und ignorieren dabei völlig das Vorhandensein anderer Indikatoren auf den Charts. Und mit ihnen hätten Sie beginnen sollen, zumal ich eindeutig darüber schreibe.

Lassen Sie sich nicht auf Demagogie und vergleichende Aussagen ein, bei denen technische Fakten und Listen von Indikatoren mit Experten völlig fehlen.

Geben Sie mir bitte den Code zur Reproduktion.

 
Farkhat Guzairov:

***

Wie spielt man sie also ab? Bitte geben Sie mir die Daten für das Playback.

 
Farkhat Guzairov:

Natürlich kann ich nicht den gesamten Code hier einfügen, aber ich habe bereits auf den Teil hingewiesen, in dem das Problem auftritt, also werde ich es noch einmal tun:

Entweder den ganzen Kodex oder gar nichts sagen. Ohne den vollständigen Code ist es nur ein Haufen Luft.

 
Renat Fatkhullin:

Denken Sie darüber nach, wo die Daten (umso mehr ist es garantiert) zur Verfügung stehen werden, wenn Ihre Indikatoren unerträglich langsam Ticks empfangen/anwenden und Hunderte von Millisekunden oder sogar Sekunden für einen Tick benötigen. Infolgedessen reicht die Zeit der CPU nicht aus, um die Ticks zu verarbeiten, was sich in einem zunehmenden Defizit und einem entsprechenden Stillstand in der Chart-Historie niederschlägt.

Wenn Sie um "garantiertes Geben" bitten, ist das höchstwahrscheinlich eine Bitte von "ich will nichts wissen, ich will weiter schreiben wie ich will, ich will nicht über Leistung und Sperren nachdenken, einfach geben"?


Wenn Ihnen Millionen von Barren zur Verfügung stehen, sollten Sie sich Gedanken über die Leistung Ihrer und anderer Indikatoren machen. Ein schlecht geschriebener und teurer Indikator kann leicht die Aktualisierung des Charts für sein Symbol blockieren.

Beginnen Sie mit der Messung der OnCalculate-Reaktionszeit in Mikrosekunden. Teilen Sie dann 1 Sekunde durch die durchschnittliche Tick-Reaktionszeit, um den maximalen Tick-Durchsatz des Indikators in Ticks pro Sekunde zu erhalten.

Das ist sofort ernüchternd.


Man braucht nicht immer die Supergeschwindigkeit, die Benutzerfreundlichkeit ist sehr wichtig, heutzutage ist der Prozess des Schreibens von Multicurrency-Indikatoren wie "Sonnenuntergang von Hand", sogar in MT4 war es einfacher, weil man es immer durch i-Funktionen bekommen kann, wenn auch langsam, aber man kann es bekommen, aber in MT5 sind die Daten entweder da oder nicht, und Sie müssen einen speziellen Code selbst erstellen.


Auch sollten Sie bedenken, dass nicht alle Benutzer sind High-Class-Programmierer, einige Leute brauchen nur eine bequeme und zuverlässige Werkzeuge, auch wenn es nicht Überschall, und eine solche Geschwindigkeit ist in der Regel nicht für Portfolio-Systeme benötigt, und die maximale Durchsatz ist nicht kritisch in diesem Fall, das Wichtigste ist, dass es funktioniert garantiert und einfach, in der Tat, das ist der Faktor, um das Produkt mehr populär und zugänglich zu machen.


Das Erscheinen der i-Funktionen in mt5 hat die Situation etwas verbessert, aber es hat das Problem nicht gelöst, es gibt keine Möglichkeit, leicht und einfach ein synchronisiertes Array für mehrere Instrumente zu erhalten, vielleicht ist es nicht für jeden notwendig, vielleicht ist es nicht einmal eine Priorität, ich kann es verstehen, aber dennoch gibt es eine solche Aufgabe.


Funktion: GetSyncData

Eingabe: Liste der Symbole, Zeitrahmen, Balkenbereich und/oder Datumsbereich

Ausgabe: Array mit MqlRates-Elementen, so dass die Indizes aller Symbole der gleichen Zeit entsprechen