Wie man im MT5 mit OrderSend korrekt arbeitet - Seite 6

 
Alexey Viktorov:

Der erste EA stellt fest, dass nach seinem OrderSend die Historie noch nicht synchronisiert ist. Er wartet nur auf das Ereignis der Synchronisation.

Aber wie erkennt der zweite Expert Advisor, ob der Verlauf synchronisiert ist oder nicht?

 
fxsaber:

Der erste EA stellt fest, dass nach seinem OrderSend die Historie noch nicht synchronisiert ist. Er wartet nur auf das Ereignis der Synchronisation.

Aber wie erkennt der zweite Expert Advisor, ob der Verlauf synchronisiert ist oder nicht?

Vergessen Sie die Geschichte. Versuchen Sie, das Verhalten der Funktion OnTradeTransaction() zu studieren.

Der erste Expert Advisor hat eine Position gesetzt und dieses Ereignis wird in OnTradeTransaction behandelt, wo die falsche Order aktiviert wird... Dieses Ereignis wird auch in OnTradeTransaction behandelt.

Der zweite Expert Advisor filtert auch Aufträge, Positionen und Geschäfte aus, die nicht seine eigenen sind.

Ich habe 2 EAs in realen Konten arbeiten. In einem davon ordnet der Positionsmagier eine Karte der Position zu, an der sie befestigt werden soll. Und du verstehst selbst, dass es nicht zwei verschiedene Magier sind...

Ich glaube, Ihr Name ist Victor? Beginnen Sie mit dem Setzen von zwei Positionen mit unterschiedlichen Magiern im Debug und verfolgen Sie deren Strukturen in OnTradeTransaction.

 
Alexey Viktorov:

Vergessen Sie die Geschichte. Versuchen Sie, das Verhalten der Funktion OnTradeTransaction() zu untersuchen.

Der erste Expert Advisor hat eine Position platziert, OnTradeTransaction behandelt dieses Ereignis, "nicht ihre" werden dort ausgesiebt, die Order wird aktiviert... OnTradeTransaction behandelt auch dieses Ereignis.

Der zweite Expert Advisor sondert auch Aufträge, Positionen und Geschäfte aus, die nicht seine eigenen sind.

Ich habe 2 EAs in realen Konten arbeiten. In einem davon ordnet der Positionsmagier eine Karte der Position zu, an der sie befestigt werden soll. Und du verstehst selbst, dass es nicht zwei verschiedene Magier sind...

Ich glaube, Ihr Name ist Victor? Beginnen Sie mit dem Setzen von zwei Positionen mit unterschiedlichen Magiern im Debug und verfolgen Sie deren Strukturen in OnTradeTransaction.

Wenn Sie sich meine Protokolle genau ansehen, können Sie feststellen

dass das Ticket schneller eingeht als OnTradeTransaction ausgelöst wird, so dass

der Bestellschein reicht aus.

Obwohl es natürlich (in diesem Fall) besser ist, Magier zu verwenden.

Und (noch besser) verwenden Sie OrderSendAsync - es gibt keine Fehler, weder bei FOREX, noch bei FORTS.

 
prostotrader:

Wenn Sie sich meine Protokolle genau ansehen, können Sie das erkennen,

dass das Ticket schneller empfangen wird als die OnTradeTransaction, so dass

der Bestellschein reicht aus.

Obwohl es natürlich (in diesem Fall) besser wäre, Magier zu verwenden.

Und (für jetzt) ist es besser, OrderSendAsync zu verwenden - es gibt keine Fehler, weder auf FOREX, noch auf FORTS.

Vielleicht ist das so. Was aber, wenn der schwebende Auftrag aktiviert wird? Sollten wir die Geschichte analysieren? Ein weiteres Problem mit der Geschwindigkeit der Umgebungssynchronisierung?

Alles in allem ist es ein Spiel für Amateure. Das Wichtigste ist, dass es klappt, dass man nicht zu sehr bremst und dass man...

 
Alexey Viktorov:

Vergessen Sie die Geschichte. Versuchen Sie, das Verhalten von OnTradeTransaction() zu untersuchen

Wie funktioniert die zweite bei einem nicht synchronisierten Verlauf?

Dieses Problem betrifft nicht nur MT5, sondern auch Quadruple.

 
fxsaber:

Wie funktioniert die zweite bei einem unsynchronisierten Verlauf?

Dieses Problem betrifft nicht nur MT5, sondern auch Quadruple.

Ich bin mir immer mehr sicher, dass Ihr Name Victor ist. Ich werde niemandem deinen früheren Spitznamen verraten.

Sie haben die Programmierung in kurzer Zeit überdurchschnittlich gut gemeistert, meiner Meinung nach sogar überdurchschnittlich gut. Aber es ist sehr schwer, Sie von Ihrem falschen Standpunkt abzubringen. Und da Ihre Programmierkenntnisse höher sind als meine, werde ich es nicht einmal versuchen.

Vergessen Sie die Geschichte, sehen Sie sich die Strukturen der Funktion OnTradeTransaction an.

Versuchen Sie, in Worten zu erklären, wie Sie in mql5 feststellen, dass ein schwebender Auftrag aktiviert ist?

 
Alexey Viktorov:

Ich bin mir immer mehr sicher, dass Ihr Name Victor ist. Ich werde niemandem deinen alten Spitznamen verraten.

Sie haben das Programmieren in kurzer Zeit gemeistert...

Eigentlich ist es eine weitere Reinkarnation von hrenfx. Ich habe beschlossen, einen neuen Weg einzuschlagen.
 
prostotrader:

Wenn Sie sich meine Protokolle genau ansehen, können Sie das erkennen,

dass das Ticket schneller empfangen wird als die OnTradeTransaction, so dass

der Bestellschein reicht aus.

Obwohl es natürlich (in diesem Fall) besser wäre, Magier zu verwenden.

Und (für jetzt) ist es besser, OrderSendAsync zu verwenden - es gibt keine Fehler, weder auf FOREX, noch auf FORTS.

Und was ist der Vorteil von OrderSendAsync()? Sie wartet nicht auf eine Antwort in den Ergebnissen. Das bedeutet, dass es später aufgefangen werden muss. Es ist nicht klar, worin der Vorteil besteht.
 
prostotrader:

OrderSend() ist eine absolut synchrone Funktion - wenn ein Ticket empfangen wird, wird alles ausgeführt.

Nachfolgend finden Sie ein Beispiel

Hinzugefügt, und hier sind die Protokolle

https://www.mql5.com/ru/forum/38456/page85#comment_2888263

Ich danke Ihnen!
 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wie erfahre ich meine Provision, ohne eine Position für ein Symbol zu eröffnen?

fxsaber, 2016.11.08 20:30

#include <MT4Orders.mqh>

void OnStart()
{
  const int Ticket = OrderSend(_Symbol, OP_BUY, 1, SymbolInfoDouble(_Symbol, SYMBOL_ASK), 0, 0, 0);
  
  OrderClose(Ticket, 0.3, SymbolInfoDouble(_Symbol, SYMBOL_BID), 0, clrNONE);

  Sleep(1000); // ждем обновления истории
  
  if (OrderSelect(Ticket, SELECT_BY_TICKET))
    Alert(OrderCommission());
}

Ich denke, dieses Beispiel ist illustrativ.

Wenn Sie Sleep nicht verwenden, kommt es häufig zu einer Situation, in der die Historie nach OrderClose keine Zeit hatte, sich zu aktualisieren, und OrderCommission einen Wert zurückgibt, als ob OrderClose nicht durchgeführt worden wäre.

Beachten Sie, dass es sich hierbei um ein Skript handelt und es keine Event-overs geben kann. Der einzige Ausweg ist ein dummer Schlaf.

Wenn Sie dieses Skript mit SB neu schreiben, wird sich nichts ändern.