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
Wenn Sie dief ändern.
Wenn die Indikatoren Müll aus dem alten Zeitrahmen in ihren Puffern haben, kann sich dies auch auf die Zeitgeber auswirken.
Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests
Neue Version von MetaTrader 4 build 1065
Sergey Klimov, 2017.04.14 16:34
Beim Wechsel zwischen Konten ändert sich die Variable _Digits im Indikator nicht.
Es ist hübscher.
Es ist hübscher.
Dies ist für diejenigen, die über die richtige Konsistenz in MT4 sprechen.
Sehen Sie zu und verstehen Sie, dass im MT4 nicht alles so schön ist.
Die Warteschlange ist unzweideutig.
Wo ist sie denn eindeutig?
Probieren Sie dieses primitive Beispiel aus. Sie werden die "Einzigartigkeit" verstehen, wenn Sie die TF wechseln.
In diesem Beispiel wird in OnInit ein Objekt mit den Koordinaten der aktuellen Zeit und des Preises erstellt. Bei OnCalculate bewegt sich dieses Objekt zusammen mit dem Preis.
Bei OnDeinit wird sie einfach (logisch) gelöscht.
Wenn wir die TF umschalten, erscheint das Objekt und verschwindet dann wieder.
Warum ist das so?
Denn manchmal löscht OnDeinit der alten TF etwas, das bereits in OnInit der neuen TF erstellt wurde. Es ist kein Fehler! Was sollte der Programmierer denken, der dieses Beispiel erstellt hat und diesen Zweig nicht gelesen hat?
Nun, wo ist sie zielstrebig.
Der Timer wurde dort erwähnt.
Was ist der Unterschied? Sie können EventSetTimer anstelle der Objekterstellung in Unite und EventKillTimer anstelle der Objektlöschung in DeUnite einfügen. Und dies wird die Unsicherheit nicht verringern, denn die eingestellte Zeit wird durch die Deunite der alten TF beendet, und manchmal auch nicht. Und es wird noch schlimmer sein, denn man kann zumindest das Objekt sehen, aber nicht den Timer - ob er funktioniert oder nicht.
Vielleicht haben sie es schon erfunden, ich habe es nicht ganz gelesen. Wenn der Indikator ein Panel erstellt, können Sie die globale Variable des Terminals verwenden, ihren Wert in init um 1 erhöhen und sie als Zusatz zu den Namen der grafischen Objekte verwenden.
Meine Aufgabe war eine andere - die Parameter des Panels zu speichern, dafür habe ich globale Variablen des Terminals in deinit erstellt. Die Lösung ist einfach - man erstellt globale Variablen des Terminals in der Inite und aktualisiert jede von ihnen, wenn sich die Parameter im Grafikpanel ändern. Löschen Sie Variablen in deinit nur, wenn die Deinitialisierung durch das Entfernen des Indikators verursacht wird.
Wenn der Indikator ein Panel erstellt, können Sie eine globale Variable des Terminals verwenden, ihren Wert um 1 erhöhen und sie als Zusatz zu den Namen der grafischen Objekte verwenden.
Was muss ein Programmierer denken, der dieses Beispiel erstellt und diesen Thread nicht gelesen hat?
Ich stimme völlig zu. Nichtleser werden von dieser Funktion nichts wissen und ihre Zeit damit verschwenden, sie herauszufinden. Und das wären dann Hunderte von Menschen... ...insbesondere für Anfänger.
Sie müssen nur einmal einen Fehler beheben und das war's.
Was ist der Unterschied? Sie können EventSetTimer anstelle der Objekterstellung in Unite und EventKillTimer anstelle der Objektlöschung in Deunite setzen. Und die Ungewissheit wird nicht abnehmen, weil der eingestellte Timer von der Deunite der alten TF getötet wird, und manchmal auch nicht. Und es wird sogar noch schlimmer, weil man zumindest das Objekt sehen kann, aber nicht, ob der Timer funktioniert oder nicht.
Das sind alles Krücken. Sie müssen nur die richtige Bestellung im Terminal aufgeben und das ist alles. Deinitieren Sie zunächst die vorherige Instanz und initialisieren Sie erst dann die neue Instanz.
Ich stimme völlig zu. Nichtleser werden von dieser Funktion nichts wissen und ihre Zeit damit verschwenden, sie herauszufinden. Und das wären dann Hunderte von Menschen... besonders für Anfänger.
Sie müssen den Fehler nur einmal beheben und das war's.
Das ist es, wovon ich spreche!
Ich persönlich habe eine Glückssträhne, da ich das Gefühl habe, einen Vorteil gegenüber der Mehrheit zu haben, da ich weiß, wie ich mit all dem umgehen kann, nicht nur mit Worten, sondern auch mit Taten. Ich habe bereits Patches erstellt und meine Programme um Krücken erweitert.
Ich verstehe nur nicht, warum die Entwickler sich hartnäckig weigern, diese "Funktion" als Fehler zu betrachten.
Zum Beispiel:
Indikatoren sollten für den ihnen zugedachten Zweck verwendet werden.
Mit anderen Worten, die Reihenfolge der Ausführung von OnInit und OnDeinit, wenn sich die Symbolperiode desDiagramms geändert hat, sollte für niemanden von Belang sein
Aber in meinem Beispiel mit dem animierten Gif oben, gibt es einen definitiven Fehler für einen Programmierer, der dieses Thema nicht gelesen hat! Was wird nicht entsprechend dem vorgesehenen Zweck getan?