Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 815
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
Ich kann nur nicht herausfinden, ob es normal ist, dass .
Es gibt hier viele Dinge, die schwer zu verstehen sind. Insbesondere bei der Abfolge der Vorgänge habe ich festgestellt, dass es in einer Reihe von Fällen Unstimmigkeiten gibt.
Meiner Meinung nach ist es am besten, Ihre Handelskontrolle zu organisieren: Merken Sie sich Ihre Handelsaufträge und überwachen Sie die Zusammensetzung von Aufträgen und Positionen einfach durch ihr Vorhandensein in den entsprechenden Listen.Wenn zum Beispiel eine Position eröffnet wird, wird zunächst ein Marktauftrag eröffnet, der dann in eine Position umgewandelt wird. Während dieser maschinellen Transaktionsserie kommt es jedoch zu einer Situation, in der eine Position bereits eröffnet, der Auftrag aber noch nicht geschlossen wurde. Natürlich handelt es sich um dasselbe Ereignis, aber die Transaktionen werden stückweise organisiert und nacheinander ausgegeben, und bei diesem Ansatz ist es im Prinzip unmöglich, die Umwandlung eines Marktauftrags in eine Position korrekt wiederzugeben.
Apropos Vögel.
Wussten Sie, dass bei diesen Geschäften Marktaufträge mit einem Nullpreis erteilt werden?
Ein Beispiel: Eine Person möchte eine Kaufposition bei 1,2000, Sl=1,1000, Tr=1,3000 eröffnen.
Wenn diese Transaktion ausgeführt wird, erscheint als erstes die Transaktion, in der der Marktauftrag mit den folgenden Daten aufgeführt ist:
Sl= 1.1000, Tr= 1.3000, d.h. mit den angegebenen Zahlen und Price=0 (gleich Null). Es handelt sich um eine Art Marktauftrag mit Nullpreis :) Und denken Sie, was Sie wollen.
Der Einfachheit halber. Eine kleine Funktion wird von MqlTradeTransaction aufgerufen. Das gewünschte Element wird dort durch die Suche nach Elementen der Klasse gefunden. Und für dieses Element wird eine der Funktionen der Klasse aufgerufen, die etwas Nützliches tut.
Beschreiben Sie bitte genauer, was genau Sie wollen? Warum rufen Sie etwas aus OnTradeTransaction auf?
Zuerst nur in Worten, dann werden wir es in die richtige Richtung korrigieren.
Die Funktion Abc() des Benutzers wird ausgeführt und implementiert einen (zeitlich gesehen) langen Algorithmus.
Während der Ausführung dieser Funktion finden einige Ereignisse statt, z.B. - Handel, Timer, etc.
Ist es möglich zu wissen, dass diese Ereignisse eingetreten sind, ohne die Ausführung der Funktion Abc() zu beenden?
Nein. Während eine Funktion gezählt wird, wird alles andere übersprungen.
Sie ist ähnlich wiedie FunktionSleep()- d.h. während Ihre Funktion sehr lange zählt, verhält sie sich ähnlich wie Sleep - alle anderen Ereignisse werden übersprungen.
...
Bei OnTradeTransaction ist absolut alles transparent.
Erstens:Die Struktur MqlTradeTransaction wird je nach Art des Handelsgeschäfts (ENUM_TRADE_TRANSACTION_TYPE)unterschiedlich gefüllt.
Lesen Sie hier:Aufbau einer Trade-Transaktion (MqlTradeTransaction)
Zweitens: Um die Ergebnisse zu visualisieren, können wir diesen Codeblock aus demOrderSendAsync-Beispiel extrahieren
und fügen Sie sie in einen Expert Advisor ein, der an ein Diagramm angehängt werden kann. Dann können Sie Positionen manuell öffnen/schließen und den Ausdruck der Ergebnisse auf der Registerkarte Experten ansehen.
Nein. Während eine Funktion gezählt wird, wird alles andere übersprungen.
Sie ist analog zurFunktionSleep()- das heißt, während Ihre Funktion sehr lange zählt, ist ihr Verhalten anflogisch zu Sleep - alle anderen Ereignisse werden übersprungen.
Danke, das ist sehr bedauerlich.
Und wie kann man die PC-Ressourcen dann effektiv nutzen? Wiederum Code in Schleifen und periodische Abfrage von Parametern?
Bei OnTradeTransaction ist absolut alles transparent.
Danke für die Antwort, das ist so ziemlich das, was ich gemacht habe. Bislang mehr Fragen als Erkenntnisse...
Beschreiben Sie bitte genauer, was Sie genau wollen? Warum rufen Sie etwas aus OnTradeTransaction auf?
Zuerst nur in Worten, dann werden wir es in die richtige Richtung korrigieren.
Ich habe verstanden, dass das Problem nicht bei OnTradeTransaction liegt. Sehen Sie nur, was für ein Durcheinander ich hier habe:
Hier ist der Code.
Und hier ist das Ergebnis der Ausführung
2017.09.22 10:30:12 Fehler bei der Auswahl der Position durch das Symbol SBRF-12.17
2017.09.22 10:30:12 Volumen 0.0 Volumen 0. 0
Ich vertausche die Zeilen 2 und 3, d.h. der Code lautet jetzt
Ich erhalte ein solches Ergebnis.
2017.09.22 10:30:12 Fehler bei der Auswahl der Position durch das Symbol SBRF-12.17
2017.09.22 10:30:12 SBRF-3.18 Band 1.0 SBRF-3.18 Band 1. 0
In beiden Fällen werden vom Compiler keine Warnungen ausgegeben. Im Anhang finden Sie den 80-zeiligen Expert Advisor Code und die Testeinstellungen. Makler BCS. Die Version 1730.
Ich habe festgestellt, dass das Problem nicht bei OnTradeTransaction liegt. Sieh mal, was für ein Durcheinander ich hier habe:
Hier ist der Code.
Und hier ist das Ergebnis der Ausführung
2017.09.22 10:30:12 Fehler bei der Auswahl der Position durch das Symbol SBRF-12.17
2017.09.22 10:30:12 Volumen 0.0 Volumen 0. 0
Ich vertausche die Zeilen 2 und 3, d.h. der Code lautet jetzt
Ich erhalte ein solches Ergebnis.
2017.09.22 10:30:12 Fehler bei der Auswahl der Position durch das Symbol SBRF-12.17
2017.09.22 10:30:12 SBRF-3.18 Band 1.0 SBRF-3.18 Band 1. 0
In beiden Fällen werden vom Compiler keine Warnungen ausgegeben. Im Anhang finden Sie den 80-zeiligen Expert Advisor-Code und die Testeinstellungen. Makler BCS. Die Version 1730.
Der Fehler scheint darin zu liegen, dass versucht wird, Informationen über mehr als eine Position in einer Zeile zu erhalten(Print).
Essind immer nur Informationen zu 1 (ausgewählten ) Position verfügbar:
- Im zweiten Fall ist es korrekt, weil last Select true zurückgibt, was Sie nicht überprüft haben.
- Und im ersten Fall: last Select gibt false zurück, was Sie auch nicht überprüft haben, und das Ergebnis ist unvorhersehbar.
..... natürlich Select==false setzt die Informationen des vorherigen Select==true zurück