Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 985
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
do { ... Pufferfüllcode
}
while(diese beiden Werte stimmen nicht überein)
kurz gesagt, die Werte in der Schleife abrufen, bis sie übereinstimmen, und erst dann den folgenden Code ausführendo { ... Pufferfüllcode
}
while(diese beiden Werte sind nicht ident isch)
Kurz gesagt, holen Sie sich die Werte in der Schleife, bis sie gleich sind, und führen Sie erst dann den folgenden Code ausSolange ein Indikator nicht funktioniert, werden die Daten (Fluss) nicht an den anderen Indikator weitergegeben, d.h. die Schleife im Indikator ohneOnCalculate dieses Indikators hilft nicht. Und sobald OnCalculate beendet ist, werden die Daten an den Expert Advisor weitergegeben, und das ist falsch.
Oder vielleicht verstehe ich Ihre Idee nicht.Der Punkt ist also, dass solange ein Indikator nicht funktioniert, die Daten (Fluss) nicht an einen anderen übertragen werden, d.h. die Schleife im Indikator ohne Beendigung von OnCalculate dieses Indikators wird nicht helfen.
man empfängt die Werte aus den Puffern der anderen Indikatoren einen nach dem anderen, wenn ihre Zahl nicht gleich ist, holt man sie wieder, bis sie gleich ist, und vergisst die Streams. Aber im Allgemeinen macht das niemand so - es ist sehr langsam
Der Punkt ist also, dass solange ein Indikator nicht funktioniert, die Daten (Fluss) nicht an einen anderen Indikator weitergegeben werden, d.h. die Schleife im Indikator ohne OnCalculate dieses Indikators wird nicht helfen. Aber sobald OnCalculate beendet ist, werden die Daten an den Expert Advisor weitergegeben, und sie sind fehlerhaft.
Oder ich verstehe Ihre Idee nicht.die Bedingung muss erfüllt sein, dann werden nur die Puffer gefüllt, so wie ich es verstehe (die Anzahl der Balken in den Puffern der anderen Indikatoren bleibt die gleiche)
alle Bedingungen zwangsweise erfüllen, bevor die Puffer des aktuellen Indikators gefüllt werden
oder an den falschen Programmierer zurückgeben - warum sollten wir seine Probleme auf dem falschen Gebiet lösen?
man holt sich die Werte aus den Puffern der anderen Indikatoren, einen nach dem anderen, wenn ihre Zahl nicht gleich ist, holt man sie wieder, bis sie gleich ist, vergiss die Streams. aber im Allgemeinen macht das niemand, es ist eine Perversion der Indikatoren von Indikatoren, sehr langsam
die Bedingung muss erfüllt sein, dann werden nur die Puffer gefüllt, so wie ich es verstehe (die Anzahl der Balken in den Puffern der anderen Indikatoren bleibt gleich)
Erzwungene Ausführung aller Bedingungen, bevor die Puffer des aktuellen Indikators gefüllt sind
oder dem Programmierer, der ein schlechtes Händchen hat, zurückgeben, warum sollten wir seine Probleme an der falschen Stelle lösen?
Wenn die Berechnung nicht von anderen Indikatoren bereit ist, werden die Werte Null sein, so gibt es keinen Sinn, Force-Fill hier, können Sie die Vergangenheit Daten zu füllen, aber mit dem gleichen Effekt, können Sie Daten nicht für den aktuellen Bar aus dem Indikator, sondern für die Vergangenheit ein, und dann sollte der Code überhaupt nicht geändert werden.
Warum diskutieren wir hier? Weil die Situation im Tester und im realen Konto unterschiedlich ist, die Simulation von Sleep funktioniert sehr seltsam, und die Neuberechnung des Indikators für 15 Sekunden Schlupf erfolgt nur einmal, während sie bei jedem Tick oder auf Anfrage erfolgen muss, und sie erfolgt nicht in 15 Sekunden, sondern in 13, laut dem Protokoll.
Darüber hinaus ist das Problem der Synchronisierung relevant, und es wäre gut, für solche Situationen die Möglichkeit hinzuzufügen, den Indikator über die Notwendigkeit zu informieren, den Datenfluss an andere Indikatoren weiterzuleiten, ohne die es unmöglich ist, weitere Berechnungen durchzuführen - dies wäre eine Lösung - der Befehl, den Fluss an einen anderen Indikator ohne Abschluss der Berechnung weiterzuleiten.
Dementsprechend sollte der Expert Advisor auf die Daten des Indikators warten und Ticks überspringen, bis die Berechnung vollständig abgeschlossen ist; wenn man nun versucht, die "while"-Anweisung zu verwenden, bleibt das Ergebnis der Berechnung hängen (d.h. es passiert nichts, der Tester steht einfach nur da), und das ist auch nicht korrekt.
Ich habe natürlich den Entwickler informiert, aber ich habe seit über einem Monat nichts mehr von ihm gehört - die Kosten der Freiberuflichkeit.
die Situation im Tester und im realen Konto ist anders, die Sleep-Simulation funktioniert sehr seltsam, und die Neuberechnung des Indikators für 15 Sekunden Schlupf tritt nur einmal auf, während es bei jedem Tick oder bei Bedarf auftreten sollte, aber es tritt nicht in 15 Sekunden auf, sondern in 13, laut dem Protokoll.
Darüber hinaus ist das Problem der Synchronisierung relevant, und es wäre gut, für solche Situationen die Möglichkeit hinzuzufügen, den Indikator über die Notwendigkeit zu informieren, den Datenfluss an andere Indikatoren weiterzuleiten, ohne die es unmöglich ist, weitere Berechnungen durchzuführen - dies wäre eine Lösung - der Befehl, den Fluss an einen anderen Indikator ohne Abschluss der Berechnung weiterzuleiten.
Dementsprechend sollte der Expert Advisor auf Daten vom Indikator warten und Ticks bis zum Ende der vollständigen Berechnung überspringen, aber jetzt, wenn man versucht, die"while"-Anweisung zu verwenden, um auf die korrekten Ergebnisse der Berechnung zu warten, friert er ein/bleibt stecken (d.h. es passiert nichts, der Tester steht einfach da), und das ist auch nicht korrekt.
LieberArtyom Trishkin!
Ich hoffe sehr, dass Sie, da Sie festgestellt haben, dass die obigen Fragen für Anfänger sind, die Antwort bereits kennen und mir helfen können!
Ich warte auf eine Antwort von einem Fachmann.
LieberArtyom Trishkin!
Ich hoffe wirklich, dass Sie, da Sie festgestellt haben, dass die obigen Fragen für Anfänger sind, bereits die Antwort kennen und mir helfen können!
Ich warte auf eine Antwort von einem Fachmann.
Der einzige Rat, den ich geben kann, ist folgender: Der Indikator sollte OnCalculate() beenden, wenn er nicht die erforderliche Anzahl von Balken für die Berechnung erhalten hat: if(rates_total<Anzahl der_Balken erforderlich) return 0;
Der Expert Advisor sollte die vom Indikator empfangenen Daten prüfen und nur dann Berechnungen mit den empfangenen Daten durchführen, wenn diese nicht mit dem leeren Indikatorwert übereinstimmen.
... ... ...
Ich kann nur raten: der Indikator sollte OnCalculate() verlassen, wenn er nicht die richtige Anzahl von Balken für die Berechnung erhalten hat: if(rates_total<number_of_bars required) return 0;
Vielen Dank für den Tipp, kein Problem mit dem Ausgang, aber es löst die Situation nicht, ich habe als eine gescheiterte Berechnung für jetzt getan
Und irgendwie füllt es die Puffer und erhält Daten von anderen Indikatoren und Daten werden nicht an den EA übergeben, bis eine Bedingung erfüllt ist. Ich habe die Korrektheit der Daten noch nicht überprüft, aber sie scheinen korrekt zu sein. Oder täusche ich mich vielleicht, und es stimmt tatsächlich etwas nicht?
Der Expert Advisor sollte die vom Indikator empfangenen Daten prüfen und nur dann Berechnungen mit den empfangenen Daten durchführen, wenn diese nicht mit dem leeren Indikatorwert übereinstimmen.
Der Expert Advisor führt die Berechnungen jeweils beim Eintreffen eines neuen Balkens durch, bzw. der Versuch, auf den richtigen Wert des Indikators zu warten, führt zum Anhalten des Testers.
... ... ...
1. Es ist wahr.
2. und so geschieht es. Diese Berechnung wird beim nächsten Tick korrekt sein, aber ich möchte die korrekte Berechnung beim ersten Tick erhalten, da Expert Advisor in der Schleife nicht auf weitere Ticks wartet oder die Erwartung nicht mit meiner Geduld vereinbar ist, d.h. sie ist nicht realistisch - es gibt einen Fehler.
3.
4. Ja, natürlich.
5. Ja, das tun wir, aber der Indikator muss Daten von anderen Indikatoren erhalten, und das ist das Problem!
6. 1-2. Es ist nicht korrekt, absichtlich falsche Daten in den Indikatorpuffer einzugeben, da dies die Erkennung von Algorithmusfehlern im Code des Expert Advisors nur erschwert.
7. Ich beschreibe alles logisch, aber ich habe den Indikator nicht geschrieben, daher ist es für mich schwer zu verstehen, woran das liegt. Ich habe die vernünftige Erscheinungsform des Indikators beschrieben, nämlich die Unfähigkeit, eine Berechnung durchzuführen, ohne gepufferte Werte von anderen Indikatoren zu erhalten, aufgrund des Monopols des Datenstroms (Indikatoren werden sequentiell berechnet).
8. Ich habe bereits hier und zuvor darauf hingewiesen, dass ich nicht der Autor bin, ich habe viel Zeit - fast einen Tag - damit verbracht, die Gründe dafür zu ermitteln.
9. Und ich bin auf der Suche nach einer Lösung für das Problem, aber auch, wenn jemand hat mit diesem konfrontiert, kann mir schnell helfen. Ich wiederhole, in diesem Thread begann ich zu schreiben, weil der Schlaf, und dann kam heraus, die anderen Funktionen des Testers, die ich auch glauben, den Fehler.
Vielen Dank für die Antwort.
Vielen Dank für den Tipp, kein Problem mit der Ausgabe, aber es löst nicht die Situation, ich habe als eine gescheiterte Berechnung so weit gemacht
Und irgendwie füllt es die Puffer und erhält Daten von anderen Indikatoren, die Daten werden nicht an den EA übergeben, bis die Bedingung erfüllt ist. Ich habe die Korrektheit der Daten noch nicht überprüft, aber es sieht korrekt aus. Oder täusche ich mich vielleicht, und es stimmt tatsächlich etwas nicht?
Der Expert Advisor führt die Berechnung allein durch, wenn ein neuer Balken eintrifft, und daher führt der Versuch, auf den richtigen Wert des Indikators zu warten, zum Stillstand des Testers.
1. Das tut es.
Und so ist es auch. 2. Diese Berechnung wird beim nächsten Tick korrekt sein, aber ich brauche eine korrekte Berechnung beim ersten Tick, weil mein Expert Advisor in der Schleife nicht auf weitere Ticks wartet oder die Erwartung nicht mit meiner Geduld vereinbar ist, d.h. sie ist nicht realistisch - es gibt einen Fehler.
3.
4. Ja, natürlich.
5. Ja, das tun wir, aber der Indikator muss Daten von anderen Indikatoren erhalten, und das ist das Problem!
6. 1-2. Es ist nicht korrekt, absichtlich falsche Daten in den Indikatorpuffer einzugeben, da dies die Erkennung von Algorithmusfehlern im Code des Expert Advisors nur erschwert.
7. Ich beschreibe alles logisch, aber ich habe den Indikator nicht geschrieben, daher ist es für mich schwer zu verstehen, woran das liegt. Ich habe die vernünftige Erscheinungsform des Indikators beschrieben, nämlich die Unfähigkeit, eine Berechnung durchzuführen, ohne gepufferte Werte von anderen Indikatoren zu erhalten, aufgrund des Monopols des Datenstroms (Indikatoren werden sequentiell berechnet).
8. Ich habe bereits hier und früher darauf hingewiesen, dass ich nicht der Autor bin, ich habe viel Zeit - fast einen Tag - damit verbracht, die Ursachen zu ermitteln.
9. Und ich bin auf der Suche nach einer Lösung für das Problem, aber auch, wenn jemand hat mit diesem konfrontiert, kann mir schnell helfen. Ich wiederhole, in diesem Thread begann ich zu schreiben, weil der Schlaf, und dann kam heraus, die anderen Funktionen des Testers, die ich auch glauben, den Fehler.
Vielen Dank für die Antwort.
In OnInit() rufen Sie die Zeitreihe des Symbols auf: iTime(Symbol,Timeframe,1);
Fordern Sie gleich zu Beginn in OnTick() den gewünschten Takt der gewünschten Zeitreihe mit der entsprechenden iFunc() an, oder if( iTime(Symbol,Timeframe,10)==0) return;
In diesem Fall wird der Expert Advisor keinen neuen Balken erkennen und auf den nächsten Tick warten.
In OnInit() haben wir die Zeitreihendaten angefordert und damit das Paging der Daten aktiviert.
In OnTick() prüfen wir, ob die minimal erforderliche Historie für den EA verfügbar ist, und wenn sie noch nicht verfügbar ist, warten wir auf den nächsten Tick.
Und bis alle Daten, die der Expert Advisor benötigt, eingegangen sind, wartet er auf den nächsten Tick.
Sobald alle erforderlichen Daten gepumpt und erhalten wurden, beginnt der Expert Advisor mit dem neuen Balken und der erforderlichen Historie zu arbeiten.
Um die seriellen Daten auf dem neuesten Stand zu halten, ist es zwingend erforderlich, dass mindestens alle zwei Minuten ein Zugriff erfolgt. Erstellen Sie einen zweiten Timer für etwa anderthalb Minuten (90 Sekunden) und beziehen Sie sich darin einfach auf eine beliebige Zeitreihe des gewünschten Symbols, z.B. iTime(Symbol,Timeframe,1); Ohne die empfangenen Daten zu überprüfen - "wackeln" Sie einfach mit der Historie. Dann sind alle Daten des Symbols immer auf dem neuesten Stand.