Frage zur Funktion OnTradeTransaction - Seite 6

 
Mikalas:

Nein, die Transaktionen gehen nicht verloren, sie können nur nicht in einer bestimmten Reihenfolge erfolgen.

Nur TRADE_TRANSACTION_REQUEST steht immer an erster Stelle, sonst bekommen Sie das Auftragsticket nicht.

Lesen Sie die Dokumentation VORSICHTIG durch.

Michael, entschuldige, aber ich hatte den Eindruck, dass du nur auf den letzten Beitrag geantwortet hast, und das ist eine Folge von allem, was im ersten Beitrag auf dieser Seite beschrieben wurde.

Und es ist seltsam zu hören, dass Sie empfehlen, die Dokumentation zu lesen. Ich habe ihn gelesen, wieder gelesen und noch einmal gelesen.

Was meinen Sie mit "Warrant Ticket"? Ich kann es in der Dokumentation nicht finden.

 
AlexeyVik:

Michael, es tut mir leid, aber ich hatte den Eindruck, dass Sie nur auf den letzten Beitrag geantwortet haben, und das war eine Folge von allem, was im ersten Beitrag auf dieser Seite beschrieben wurde.

Und Ihre Empfehlung, die Dokumentation zu lesen, mutet seltsam an. Ich habe ihn gelesen, wieder gelesen und noch einmal gelesen.

Was meinen Sie mit "Bestellschein"? Ich habe dies in der Dokumentation nicht gesehen.

Ein Ulong-Ticket ist eine eindeutige Nummer, die einer Bestellung zugewiesen wird.

Diese Zahl wird sich während der Laufzeit der Bestellung und in der Historie nicht ändern.

Wir erhalten Informationen über die Bestellung mit tikcet.

 
Mikalas:

Ein Ulong-Ticket ist eine eindeutige Nummer, die einer Bestellung zugewiesen wird.

Diese Zahl ändert sich während der gesamten Laufzeit des Auftrags nicht, auch nicht in der Historie.

Wir erhalten Informationen über die Bestellung mit tikcet.

Danke, Mikhail. Ich bin davon ausgegangen, dass Sie das Ticket für die Bestellung meinen. Aber sie hätte präziser sein müssen.


Dennoch ist das Verhalten der Tickets recht merkwürdig.

Beispiel: Tickets und Bände aus dem Lauf im Prüfgerät.

Wir eröffnen eine Position in Buy 0,1 lot, Ticket 2. SellStop 0.78 Ticket 3 wird gesetzt.

Wenn SellStop aktiviert wird, wird die Position mit 0,68 verlassen; Order 3 mit dem Volumen 0,78 und negativem Gewinn erscheint in der Historie.

Gleichzeitig gibt es eine Position mit Ticket 4

Und es ist völlig unklar, wohin der Verlust aus der Position mit dem Ticket 2 verschwunden ist.


Im Allgemeinen können wir nicht immer glauben, was geschrieben wird. Denn sie ist nicht vollständig geschrieben.

Wenn eine Position mit einem schwebenden Auftrag eröffnet wird, bleibt das Ticket bestehen, aber wenn der Auftrag einen anderen schließt, wird das neue Ticket erstellt.

 

Das Gleiche geschieht mit dem Ticket, wenn die Position und der schwebende Auftrag in dieselbe Richtung gehen. Das Ticket ändert sich.


 
AlexeyVik:

Anscheinend ist dies der Verlust von Transaktionen... und, vor allem, (Ausschnitt aus der Dokumentation)

Vasily, ist dies ein Tester oder eine Demo? Ich habe Proben des Testers. Ich frage mich, ob es einen Unterschied zwischen der Auslösung von OnTradeTransaction im Tester und im Konto gibt? Ich werde es bei Gelegenheit überprüfen.

Dies ist eine Demo. Vielleicht ist das Ereignismodell im Tester und in Echtzeit unterschiedlich.

 

Ich habe mehrere Bots im MT5 auf Forts. Auch mehrere auf demselben Instrument. Ich verwende, um festzustellen, wie viele Verträge, die "Roboter" hat, durch Joggen durch die Geschichte der Trades. Im Grunde funktioniert das alles. Ich habe beschlossen,OnTradeTransaction zu verwenden. Die Idee, wie es zu implementieren ist einfach - wenn ein Geschäft kommt, schauen wir, wie viele Verträge gekauft oder verkauft werden und welcher Bot das Geschäft gemacht hat (mit speziellen Kommentar zu dem Geschäft oder Magic Number) und speichern Sie diese Informationen in einer Datei. Die Frage ist folgende. Wenn wir OnTradeTransaction in jedem EA haben, wie wird es sequentiell oder parallel aufgerufen? Nehmen wir an, dass zum Beispiel ein Geschäft ausgeführt wurde - es sind viele Ereignisse aufgetreten und OnTradeTransaction wird in jedem Bot für jedes Ereignis konsistent aufgerufen? Ist es z.B. einfacher, einen OnTradeTransaction-Handler zu erstellen, der für alle Bots zuständig ist? Wenn überhaupt, dann bin ich kein Programmierer, obwohl ich schon eine Menge Dinge programmiert habe. Der Code ist vielleicht etwas kitschig, aber ich bekomme ihn immer so hin, wie er funktionieren soll.

 
votor:

Ich habe mehrere Bots im MT5 auf Forts. Auch mehrere auf demselben Instrument. Ich verwende, um festzustellen, wie viele Verträge, die "Roboter" hat, durch Joggen durch die Geschichte der Trades. Im Grunde funktioniert das alles. Ich habe beschlossen,OnTradeTransaction zu verwenden. Die Idee, wie es zu implementieren ist einfach - wenn ein Geschäft kommt, schauen wir, wie viele Verträge gekauft oder verkauft werden und welcher Bot das Geschäft gemacht hat (mit speziellen Kommentar zu dem Geschäft oder Magic Number) und speichern Sie diese Informationen in einer Datei. Die Frage ist folgende. Wenn wir OnTradeTransaction in jedem EA haben, wie wird es sequentiell oder parallel aufgerufen? Nehmen wir an, dass zum Beispiel ein Geschäft ausgeführt wurde - es sind viele Ereignisse aufgetreten und OnTradeTransaction wird in jedem Bot für jedes Ereignis konsistent aufgerufen? Ist es z.B. einfacher, einen OnTradeTransaction-Handler zu erstellen, der für alle Bots zuständig ist? Wenn überhaupt, dann bin ich kein Programmierer, obwohl ich schon eine Menge Dinge programmiert habe. Der Code mag kitschig sein, aber ich schaffe es immer, dass er richtig funktioniert.

Ja, OnTradeTransaction wird in jedem EA funktionieren. Sie sollten nach Symbolen gefiltert werden und wenn es mehr als einen Expert Advisor für ein Symbol gibt, dann nach Magie.

 

Ich danke Ihnen für Ihre Antwort. Ich habe es bereits überprüft und ich sehe, dass es in allen EAs funktioniert. Die Frage ist (vielleicht ist es eine dumme Frage), wenn alle dieseOnTradeTransactions in allen EAs in Serie verarbeitet werden, zuerst in einem EA, dann in der nächsten usw., anstatt parallel, richtig? Es bedeutet, dass da ihre Verarbeitung sequentielle(?), wir besser einen Handler für alle Bots machen und filtern, was wir in es brauchen.

 
votor:

Ich danke Ihnen für Ihre Antwort. Ich habe es bereits überprüft und ich sehe, dass es in allen EAs funktioniert. Die Frage ist (vielleicht ist es eine dumme Frage), wenn alle dieseOnTradeTransaction Beiträge in allen EAs arbeiten sequentiell, zuerst in einem EA, dann in der nächsten usw., anstatt parallel, nicht wahr? Ich meine, da ihre Verarbeitung sequentiell(?) ist, wäre es besser, einen Handler für alle Bots zu erstellen und filtern, was wir in es brauchen.

Ich habe es nicht überprüft, aber es scheint keine Regelmäßigkeit zu geben. Es ist, als ob derjenige, der zuerst aufgestanden ist, nichts unversucht lässt. Und es ist möglich, dass, wenn Sie aufstehen zur gleichen Zeit, dann jeder der Hausschuhe.

Bislang scheint es mir die beste Option zu sein, nach Symbolen und Magiern zu filtern. Wessen Position er schreibt, darüber informiert er.

 

Offensichtlich bin ich nicht gut darin, das zu erklären. Hier ein Beispiel aus der Praxis. Hier ist der Code:

void OnTradeTransaction(const MqlTradeTransaction& trans,

const MqlTradeRequest& Anfrage,

const MqlTradeResult& result)

{

Graf++;

Print("Ontrade_test = ",Count);

}

Der Handler ist in zwei Expert Advisors implementiert, so dass er mehrfach in zwei Expert Advisors ausgeführt wird, wenn ein Handel durchgeführt wird. Der Code gibt aus:

18:31:06.495 ontrade_trans_functions (MXI-12.17,H1) Ontrade_test = 1

18:31:06.495 ontrade_trans_functions2 (MXI-12.17,H1) Ontrade_test = 1

18:31:06.497 ontrade_trans_functions (MXI-12.17,H1) Ontrade_test = 2

18:31:06.497 ontrade_trans_functions2 (MXI-12.17,M5) Ontrade_test = 2

18:31:06.498 ontrade_trans_functions (MXI-12.17,M5) Ontrade_test = 3

18:31:06.498 ontrade_trans_functions2 (MXI-12.17,H1) Ontrade_test = 3

18:31:06.500 ontrade_trans_functions (MXI-12.17,M5) Ontrade_test = 4

18:31:06.500 ontrade_trans_functions2 (MXI-12.17,H1) Ontrade_test = 4 ...

und so weiter.

Sie können sehen, dass die OnTradeTransaction-Antwortzeit in den beiden Expert Advisors in Millisekunden gleich ist. Also, ich habe eine Frage: kommt das Handelsereignis zuerst zu einem OnTradeTransaction in einem EA und dann zum nächsten in einem anderen EA oder irgendwie zu allen Handlern von allen EAs auf einmal erhalten? Nun, es ist wie eine parallele Multithreading-Operation oder wie auch immer man das in der Programmierung nennt. Ich bin sicher, dass alles nacheinander passiert, es wird nur innerhalb einer Millisekunde verarbeitet, aber ich habe vorsichtshalber gefragt.

Grund der Beschwerde: