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
Jetzt aktualisiert und versucht, es wieder herauszufinden. Ich habe auf fast jeder Zeile Abdrücke angebracht. Ich werde über die Ergebnisse berichten.
Hier ist der Lauf mit Ihrem Einsatz, in dem Moment, in dem der Stop-Loss festgelegt wurde:
2011.08.09 00:41:08 Kern 1 2011.01.14 01:41:27 Zu schließende Long-Position von EURUSD von stop-loss2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 -----------------Deal #63 sl 1.33328
2011.08.09 00:41:08 Core 1 2011.01.01.14 01:41:27 oldDealsTotal=62 newDealsTotal=63
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 CSampleExpert::Trade
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 Auftrag ausgeführt sell 0.15 at 1.33328 [#63 sell 0.15 EURUSD bei 1.33328]
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 deal performed [#63 sell 0.15 EURUSD at 1.33328]
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 deal #63 sell 0.15 EURUSD at 1.33328 done (based on order #63)
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 stop loss triggered buy 0.15 EURUSD 1.32127 sl: 1.33328 tp: 1.35139 [#63 sell 0.15 EURUSD bei 1.33328]
2011.08.09 00:41:08 Core 1 2011.01.13 18:32:00 Long-Position von EURUSD zu ändern trailing
Ich erteile schwebende Aufträge mit einer Laufzeit von 1 Stunde. Nach einer Stunde werden die nicht aktivierten Aufträge bis zum Ablauf der Auftragszeit geschlossen. Wenn mehrere Aufträge gleichzeitig geschlossen werden und die Funktion HistoryOrdersTotal() vor dem Schließen einen Wert ungleich Null hatte, dann gehen einige Aufträge verloren. Zum Beispiel hatte die Funktion vor der Schließung von 8 Aufträgen einen Wert von 4, aber nach der Schließung hat sie einen Wert von 10. Zwei Aufträge sind verloren gegangen.
Was meinen Sie mit "Die Aufträge gingen verloren"? Es ist zu bedenken, dass Nachrichten, die an OnTrade() gehen, Informationen über mehr als ein Handelsereignis enthalten können. Wenn mehrere Nachrichten gleichzeitig gesendet werden, kann es außerdem vorkommen, dass sich bei der Verarbeitung der ersten Nachricht der historische Cache bereits geändert hat und Sie das Gefühl haben, dass "Ereignisse verloren gehen".
Bitte lesen Sie den Artikel Handelsereignisse in MetaTrader 5:
Schlussfolgerung
Alle Vorgänge auf der MetaTrader 5-Handelsplattform sind asynchron, und das Versenden von Nachrichten über alle Änderungen auf dem Handelskonto erfolgt unabhängig voneinander, so dass Sie nicht versuchen sollten, ein einzelnes Ereignis nach der Regel "Eine Anfrage - ein Handelsereignis" zu verfolgen. Wenn Sie genau feststellen wollen, was sich nach dem Trade-Ereignis geändert hat, müssen Sie alle Geschäfte, Positionen und Orders bei jedem Aufruf des Handlers OnTrade analysieren und mit dem Zustand vor dem Auftreten des Ereignisses vergleichen.Ich habe speziell den Wert HistoryOrdersTotal() angefordert, der gleich 4 war, bevor ich die Aufträge geschlossen habe. Nach dem Abschluss von 8 Aufträgen hätte der Wert von HistoryOrdersTotal() gleich 12 (4 + 8) sein müssen, aber er war gleich 10. Ich habe eine Protokolldatei beigefügt, in der ähnliche Situationen mehr als einmal zu sehen sind. Ich habe auch den Expert Advisor beigefügt, mit dem dies erreicht wird. Machen Sie es selbst und Sie werden alles sehen.
Versuchen Sie, die Funktion zu ändern, was wird passieren?
Der HTML-Bericht des Testlaufs wird nicht immer in einer Datei gespeichert!
Beschreiben Sie genauer. Unter welchen Umständen?
Beschreiben Sie genauer. Unter welchen Umständen?
Selten, etwa bei einem von 20-30 Testläufen - Registerkarte "Ergebnisse" öffnen
Klicken Sie auf XML-Bericht speichern - ich erhalte die Berichtsdatei, alles ist in Ordnung!
Klicken Sie auf "HTML-Bericht speichern" - das Fenster zum Speichern der Datei öffnet sich, bleibt eine Weile (kurz) mit leerem Fortschrittsbalken hängen, dann füllt sich der Fortschrittsbalken schnell und das Fenster schließt sich... Es wird jedoch keine Berichtsdatei erstellt!
Ich kann kein Muster angeben, wann genau dies geschieht.
Versuchen Sie, die Funktion zu ändern, was wird passieren?
Der Schlüssel ist: "Sie müssen alle Trades, Positionen und Aufträge bei jedem Aufruf des OnTrade-Handlers analysieren und mit dem Zustand vor dem Aufruf vergleichen" . In dem von uns betrachteten Beispiel , mit ausstehenden Aufträgen, gilt dies nur für Aufträge in der Historie. Um den Verlust von Aufträgen zu vermeiden, würde ich den Code folgendermaßen ändern:
Führen Sie eine globale Variable int oldHistoryOrders ein ; und in Ontrade etwas wie dieses:
Das ist nicht die Art und Weise, wie ich mit OnTrade() arbeite, wie Sie es beschrieben haben. In meinem beigefügten Code habe ich alles entfernt und nur den Teil übrig gelassen, der den Fehler der Funktion hervorhebt. Ich habe praktisch keine Schleifen in meinem EA. Der EA behandelt ein einzelnes Symbol auf einem einzigen Tick. Deshalb brauche ich keine Fahrräder. Ich verarbeite alle Symbole innerhalb von 12 Ticks.
PS: OnTrade() informiert mich über ein Handelsereignis, und welches Ereignis eingetreten ist, wird durch meine Funktionen ohne Schleifen definiert.