Fehler, Irrtümer, Fragen - Seite 2723
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Können Sie mir sagen, was los ist und wie ich die Aktualisierung der Karte beschleunigen kann? Die Funktion ChartRedraw wird vom Expert Advisor aufgerufen, aber es gibt immer noch eine Verzögerung von ein paar Minuten.
ChartRedraw wird nur für das Zeichnen (Aktualisieren) von grafischen Objekten benötigt, wir brauchen ChartRedraw nicht für einen normalen Indikator, der über Indikatorpuffer zeichnet
ich denke, Sie sollten das Problem im Indikator suchen, vielleicht ist die Berechnung der Puffer bei jedem Tick nicht korrekt, es gibt "Autoren", die die gesamte Geschichte bei jedem Tick berechnen
ZZY: Ich kann es nicht bestätigen, aber vielleicht aktualisiert ChartRedraw den gesamten Chart mit der synchronisierten Historie, wenn ja, starten Sie den Indikator jedes Mal mit einer vollständigen Berechnung der gesamten Historie neu
UPD: Versuchen Sie, die Geschichte auf dem Diagramm zu einer kleineren Anzahl von Bars 10 000 ist genug, in MT4 gab es einen Fall, in dem eine schwere Indikator "verschlungen" alle Speicher und dann gesucht, warum EA nicht richtig funktionieren (es funktionierte dann nicht). Obwohl es in MT5 unwahrscheinlich ist, dass der gesamte Speicher verwendet wurde...., aber es kommt vor
ChartRedraw wird nur für das Zeichnen (Aktualisieren) von grafischen Objekten benötigt, Sie brauchen ChartRedraw nicht für einen normalen Indikator, der über Indikatorpuffer zeichnet
ich denke, Sie sollten das Problem im Indikator suchen, vielleicht ist die Berechnung der Puffer bei jedem Tick nicht korrekt, es gibt "Autoren", die die gesamte Geschichte bei jedem Tick berechnen
ZZY: Ich kann nicht bestätigen, aber vielleicht ChartRedraw aktualisiert das gesamte Diagramm mit synchronisierten Geschichte, wenn ja, dann jedes Mal, wenn Sie den Indikator mit einer vollständigen Berechnung der gesamten Geschichte neu starten
UPD: Versuchen Sie, die Geschichte auf dem Chart zu einer kleineren Anzahl von Bars 10 000 ist genug, in MT4 gab es einen Fall, in dem eine schwere Indikator "verschlungen" den ganzen Speicher und dann gesucht, warum EA nicht richtig funktionieren (es funktionierte dann nicht). In MT5 ist es zwar unwahrscheinlich, dass der gesamte Speicher verwendet wird...., aber es kann passieren.
Ich habe versucht, die Berechnung zu optimieren und habe die vorherige Version des Indikators getestet. Ich habe bisher alle 1000 Balken berechnet und warte jetzt darauf, dass ein neuer Balken geöffnet wird.
Sollte dies der Grund sein, wäre ich dennoch sehr überrascht. 1k Balken mit nicht sehr starken Berechnungen verlangsamen das Zeichnen des Diagramms für 2 Minuten?
Wenn das der Grund ist, ist es immer noch eine große Überraschung wert. 1 Bar von nicht sehr starken Berechnungen verlangsamt das Zeichnen des Diagramms für 2 Minuten?
kann es meiner Meinung nach nicht sein, das Terminal wird einen solchen Indikator mit der Meldung "zu lange Berechnung in xxx Indikator " entladen.
die MT-Laufzeit (4/5) ist sehr schnell, natürlich kann man die gleichen Daten auch mehrmals berechnen, aber imho muss man sich schon anstrengen
Ich denke, der Autor des Indikators ist nicht mit der wirtschaftlichen Berechnung von Indikatorpuffern vertraut, und er vergisst, die letzten Balken korrekt zu berechnen... gehen Sie zu QB, um zu lernen, wie Indikatoren geschrieben werden ;)
Befinden sich diese beiden Programme in demselben Terminal oder in zwei verschiedenen Terminals?
Der Code zur Reproduktion des Problems ist hier zu finden. https://www.mql5.com/en/forum/332849
Sie müssen den Code mindestens 2 Mal ausführen, um ihn zu reproduzieren.
Überhaupt nicht notwendig. Warum C? Wie wäre es mit C#? - Von der Bedeutung her ist es näher an C#.
Wahrscheinlich, weil µl c++ ähnlich ist und die Strukturen von c dorthin kamen.
Das ganze Gerede über passive Strukturen ist meiner Meinung nach eine archaische Vorstellung.
Wenn Sie Konstruktoren benötigen, verwenden Sie Klassen oder gehen Sie zu Sharp. Warum sollten wir den Strukturen diese Bedeutung vorenthalten? Dadurch werden die Programme nur noch ausdrucksstärker. Ich kann den Code von jemandem nehmen und sehen, dass er/sie eine Struktur statt einer Klasse hat und eine Menge Informationen aus nur einem Wort erhalten. Sie werden nichts erhalten, Sie werden fleißig den Quellcode studieren, um das gleiche Ergebnis zu erhalten, das ich in einem Wimpernschlag erhalten habe. Meiner Erfahrung nach wird diese Konvention der Strukturen respektiert, vielleicht sogar als eine Art nihilistischer Marginalismus.
Ich glaube, dass jeder Typ zumindest einen Konstruktor haben sollte. Uninitialisierte Felder sind ein Übel und sollten vermieden werden.
Das ist nichts Böses, wie es dir scheint. Vaughn sogar in den Standard gezogen: Lesen von uninitialized unsigned char und std::byte ist nicht undefinded Verhalten. Sie können die Aggregatinitialisierung für POD verwenden. Und vergessen Sie nicht - all diese Initialisierung ist nicht kostenlos, es ist echte Ressourcenverbrauch (CPU, Speicher, Größe einer ausführbaren Datei). Wenn es Ihnen bei Ihrem Number Cruncher scheißegal ist, kann es bei einem Mikrocontroller wichtig sein. Schließlich ist C/C++ nicht nur eine Windows-Mischung wie Sharp.
Allein durch die Initialisierung einer einzigen Variablen erhöhte sich die Befehlsgröße um 30 %.In einem Terminal. Der Experte schreibt die Daten, der Indikator liest die Daten. Sie hängen an verschiedenen Karten, könnten aber natürlich auch an derselben hängen (falls das eine Rolle spielt). Build 2380.
Der Expert Advisor, der die Datei liest, muss diese Datei geschlossen halten.
Die Besonderheit der Implementierung von Dateien in MQL5 ist, dass sie die Daten von Dateien in ihren eigenen Puffern auf das Maximum zu halten. Wenn die Informationsmenge so groß ist, dass sie nicht in den Puffer passt, kann Ihr Trick funktionieren, den Zeiger an den Anfang und dann an das Ende der Datei zu setzen.
Öffnen Sie also die Datei, prüfen Sie den Inhalt und schließen Sie sie wieder.
Ein Expert Advisor, der eine Datei liest, muss diese Datei geschlossen halten.
Die Besonderheit der Implementierung von Dateien in MQL5 ist, dass sie Daten aus Dateien so weit wie möglich in ihren eigenen Puffern halten. Wenn die Informationsmenge so groß ist, dass sie nicht in den Puffer passt, kann Ihr Trick, den Zeiger an den Anfang und dann an das Ende der Datei zu setzen, funktionieren.
Öffnen Sie also die Datei, prüfen Sie den Inhalt und schließen Sie sie wieder.
FileFlush () ist also nutzlos?
Nein. FileFlush muss durchgeführt werden, wenn Sie möchten, dass jemand anderes die geänderte Datei lesen kann.
Das Problem ist, dass das MQL5-Programm die Datei in seinen eigenen Puffer liest, wenn es sie öffnet. Es weiß nichts von Änderungen in der Datei, bis es sie erneut liest. Die Datei kann nur durch Schließen und anschließendes Öffnen der Datei wieder gelesen werden
Nein. FileFlush muss durchgeführt werden, wenn Sie möchten, dass jemand anderes die geänderte Datei lesen kann.
Auch wenn Sie die Datei schließen?
Auch wenn Sie die Datei schließen?
Das ist genau das, wovon ich spreche. Schließen, dann wieder öffnen
Oder meinen Sie FileFlush vor dem Schließen der Datei?