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 habe das Bild gesehen. Für die Börse ist alles klar (mit einem Limitauftrag).
Bei Devisen- und Marktaufträgen verstehen Sie den Sinn nicht. Alles ist klar.
Das Gleiche gilt für einen Marktauftrag (an der Börse)
Hinzugefügt von
Wenn wir einen Marktauftrag senden, gehen wir nach Erhalt des Tickets in die Historie und
gehen wir in die Geschichte ein und sehen, was daraus geworden ist. Sie können sich auch OnTradeTransaction ansehen
TRADE_TRANSACTION_HISTORY_ADD
Wie wäre es mit "wenn OrderSend das Ticket zurückgegeben hat, wird es ausgeführt"?
Sollen wir nun doch in die Geschichte rennen oder auf die Ereignisse warten? Nun, darum geht es in diesem Thread!!!
Richtig. Was habe ich in der "Abendkasse" nicht gesagt?
Ich habe sogar einen EA (für die Börse) als Beispiel gepostet
Ja, alles in allem ist es nicht sehr themenbezogen ) Aber danke für den Beitrag.
Es geht darum, dass der "synchrone" OrderSend endet, bevor der EA seine Auswirkung auf das Konto sieht (kein Handel in der Historie und keine Veränderung der Position).
Und um richtig zu funktionieren, müssen wir uns mit Krücken in Form von Warten auf ein Ereignis (eine sehr praktische Funktion! Aber nicht in diesem Fall) oder Durchsuchen des Verlaufs (auch mit Warten) behelfen.
In der Tat gibt es ein Problem für FOREX (ich habe den gleichen Expert Advisor auf FOREX ausgeführt)
Im asynchronen Modus (FOREX) funktioniert es jedoch problemlos.
Natürlich wird jeder die Nachricht erhalten. Aber sie werden nicht wissen, dass jemand dieselbe Nachricht nicht schon einen Takt früher erhalten und keine neue Bestellung ausgelöst hat.
Neue Idee.
Schreiben Sie einen EA-Synchronisierer. Sobald OrderSend durchgeführt wird, werden die Daten an diesen EA gesendet und auf dessen Antwort gewartet.
Der Unterschied zur Schlupfvariante sind allerdings die gleichen Eier. Alles in allem ist Ihre Variante optimal, leider.
Dasselbe mit einem Marktauftrag (an der Börse)
Hinzugefügt
Wenn ein Marktauftrag gesendet wird, gehen wir, sobald wir das Ticket erhalten haben, mit diesem in die Historie und
um zu sehen, was damit passiert ist.
OrderSend() ist eine absolut synchrone Funktion - wenn ein Ticket empfangen wird, wird alles ausgeführt.
Nachstehend ein Beispiel
Hinzugefügt, und hier sind die Protokolle
https://www.mql5.com/ru/forum/38456/page85#comment_2888263
Vielen Dank für den Link. Aber meine Frage war ein wenig anders. Vielmehr war es keine Frage, sondern ein Argument dafür, den Auftragsstatus an Ort und Stelle zu prüfen, ohne auf die Verarbeitung des Ereignisses OnTrade() zu warten.
Sie haben sich den Code des Beispiels wohl nicht angesehen.
{
if(order_ticket>0)
{
if(OrderSelect(order_ticket))
{
RemoveOrderSyncMode(order_ticket);
}
else
{
Print(__FUNCTION__," Order not select! Ticket = ",order_ticket);
}
}
}
Die Löschung der Bestellung im Sync-Modus (OrderSend()) sollte nach der Antwort von
SendOrserSyncMode-Funktion, aber es geschah nicht.
2016.10.14 02:18:20.292 Trades'3941932': fehlgeschlagene Stornierung der Order #102956267 Kauflimit 1.00 GBPUSD bei 1.22374 [Ungültige Anfrage]
Genau hier liegt der Fehler. Wenn wir ein Ticket erhalten haben, ist der Auftrag laut Dokumentation im Handelssystem platziert worden,
Dies ist jedoch (in FOREX) nicht der Fall, und die Löschung erfolgte im Körper der FunktionRemoveOrderAsyncMode, d. h.
nach Erhalt einer Nachricht in OnTradeTransaction
Hinzugefügt
Um die Frage des Top-Starters zu beantworten: Nach dem Absenden einer Bestellung mit der Funktion OrderSend(),
der Auftrag kann nach Erhalt des Ereignisses in OntradeTransaction (OnTrade) bearbeitet werden.
Es scheint, dass die Entwickler das Problem beheben werden.
Hinzugefügt
Jetzt habe ich bei FORTS nachgesehen - auch dort gibt es dieses Problem
2016.10.17 18:45:19.081 Trades '1007932': accepted buy limit 1.00 GAZR-12.16 at 12847
2016.10.17 18:45:19.081 Trades '1007932': buy limit 1.00 GAZR-12.16 at 12847 placed for execution
2016.10.17 18:45:19.091 Trades '1007932': order #52178167 buy limit 1.00 / 1.00 GAZR-12.16 at 12847 done in 17.440 ms
2016.10.17 18:45:19.091 Trades '1007932': failed cancel order #52178167 buy limit 1.00 GAZR-12.16 at 12847.00000 [Invalid request]
2016.10.17 18:45:19.091 Trades '1007932': cancel order #52178167 buy limit 1.00 GAZR-12.16 at 12847
2016.10.17 18:45:19.098 Trades '1007932': accepted cancel order #52178167 buy limit 1.00 GAZR-12.16 at 12847
2016.10.17 18:45:19.099 Trades '1007932': cancel order #52178167 buy limit 1.00 GAZR-12.16 at 12847 placed for execution in 7.215 ms
2016.10.17 18:45:19.074 TestOrders (GAZR-12.16,M1) OnChartEvent Send Order Sync mode
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) SendOrderSyncMode Order sent in sync mode
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) RemoveOrderSyncMode Order not sent (remove) in sync mode.
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_ORDER_ADD
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_REQUEST
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_ORDER_UPDATE
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) OnTradeTransaction Order update state = ORDER_STATE_REQUEST_ADD
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_REQUEST
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_ORDER_UPDATE
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) OnTradeTransaction Order update state = ORDER_STATE_PLACED
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) OnTradeTransaction Order plased done. Ticket = 52178167
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) RemoveOrderAsyncMode Order sent (remove) in async mode
2016.10.17 18:45:19.098 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_ORDER_UPDATE
2016.10.17 18:45:19.098 TestOrders (GAZR-12.16,M1) OnTradeTransaction Order update state = ORDER_STATE_REQUEST_CANCEL
2016.10.17 18:45:19.099 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_REQUEST
2016.10.17 18:45:19.099 TestOrders (GAZR-12.16,M1) OnTradeTransaction Order get ticket done. Ticket = 52178167
2016.10.17 18:45:19.099 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_ORDER_UPDATE
2016.10.17 18:45:19.099 TestOrders (GAZR-12.16,M1) OnTradeTransaction Order update state = ORDER_STATE_REQUEST_CANCEL
2016.10.17 18:45:19.108 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_REQUEST
2016.10.17 18:45:19.108 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_ORDER_DELETE
2016.10.17 18:45:19.108 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_HISTORY_ADD
2016.10.17 18:45:19.108 TestOrders (GAZR-12.16,M1) OnTradeTransaction Order remove done. Ticket = 52178167
Um die Frage des Top-Traders zu beantworten: Nach dem Senden einer Order mit OrderSend(),
Sie können mit der Order arbeiten, nachdem Sie das Ereignis in OntradeTransaction (OnTrade) erhalten haben
Im Falle von zwei EAs auf demselben Symbol?
Ja, zwei EAs für dasselbe Symbol.
{
ENUM_TRADE_REQUEST_ACTIONS action; // Тип выполняемого действия
ulong magic; // Штамп эксперта (идентификатор magic number)
ulong order; // Тикет ордера
string symbol; // Имя торгового инструмента
double volume; // Запрашиваемый объем сделки в лотах
double price; // Цена
double stoplimit; // Уровень StopLimit ордера
double sl; // Уровень Stop Loss ордера
double tp; // Уровень Take Profit ордера
ulong deviation; // Максимально приемлемое отклонение от запрашиваемой цены
ENUM_ORDER_TYPE type; // Тип ордера
ENUM_ORDER_TYPE_FILLING type_filling; // Тип ордера по исполнению
ENUM_ORDER_TYPE_TIME type_time; // Тип ордера по времени действия
datetime expiration; // Срок истечения ордера (для ордеров типа ORDER_TIME_SPECIFIED)
string comment; // Комментарий к ордеру
ulong position; // Тикет позиции
ulong position_by; // Тикет встречной позиции
};
Aussortieren der "falschen" Positionen, Aufträge und Geschäfte.