MT5 und Geschwindigkeit in Aktion - Seite 31

 
fxsaber:

Wenn Sie diesen EA auf einem Konto ohne aktuelle Positionen oder Aufträge ausführen.

und dann die vom EA eröffnete Position manuell schließen, dann gibt es drei offene Positionen in der Absicherung (auf der Netting-Dreifach-Volumen-Position).


Ist dies das richtige Verhalten? Wahrscheinlich habe ich das Terminal nicht richtig verstanden. Dann klären Sie bitte auf.

Als erstes sollten Sie die Hilfe lesen.

https://www.mql5.com/ru/docs/event_handlers/ontrade

Bitte beachten:

Обработчик OnTrade() вызывается после соответствующих вызовов OnTradeTransaction(). В общем случае нет точного соотношения по количеству вызовов OnTrade() и OnTradeTransaction(). Один вызов OnTrade() соответствует одному или нескольким вызовам OnTradeTransaction.

Einfach ausgedrückt, kann der OnTrade()-Handler für jeden einzelnen Handel aufgerufen werden. Die Schließung einer Position kann zur Folge haben, dass mehrere separate Transaktionen anfallen.

Dies lässt sich leicht überprüfen - fügen Sie einfach Print() zu OnTrade() Ihres Beispiels hinzu.

Außerdem möchte ich Ihre Aufmerksamkeit auf Ihren vorherigen Test lenken, in dem Sie vergeblich erwarten, das Auftragsticket durch OrderSendAsync() zu kennen.

Документация по MQL5: Обработка событий / OnTrade
Документация по MQL5: Обработка событий / OnTrade
  • www.mql5.com
//|                                               OnTrade_Sample.mq5 | //|                        Copyright 2018, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Expert initialization function                                   |...
 
Anton:

Außerdem möchte ich Sie darauf aufmerksam machen, dass Sie laut Ihrem vorherigen Test vergeblich erwarten, das Auftragsticket über OrderSendAsync() herauszufinden.

Es scheint, dass sie nirgendwo zu finden ist. Nur HistorySelect verzögert sich in OnTrade.

 
fxsaber:

Sie scheint nirgendwo aufzutauchen. Es werden nur die HistorySelect-Verzögerungen in OnTrade angezeigt.

if (PositionSelectByTicket(Result.order)) // Если позиция открыта - закрываем.
 
Anton:

Als Erstes sollten Sie das Merkblatt lesen.

https://www.mql5.com/ru/docs/event_handlers/ontrade

Bitte beachten Sie:

Обработчик OnTrade() вызывается после соответствующих вызовов OnTradeTransaction(). В общем случае нет точного соотношения по количеству вызовов OnTrade() и OnTradeTransaction(). Один вызов OnTrade() соответствует одному или нескольким вызовам OnTradeTransaction.

Einfach ausgedrückt, kann der OnTrade()-Handler für jede einzelne Handelstransaktion aufgerufen werden. Die Schließung einer Position kann zur Folge haben, dass mehrere separate Transaktionen anfallen.

Es ist leicht zu überprüfen - fügen Sie einfach Print() zu OnTrade() Ihres Beispiels hinzu.

Natürlich habe ich den Abdruck gemacht. Die Frage bezog sich nicht auf die Anzahl der OnTrade-Aufrufe, sondern auf die Anzahl der offenen Positionen.

Nach dem ersten OnTrade wird ein Marktauftrag erteilt. Beim nächsten OnTrade darf diese Marktorder keine weiteren Orders durch die Bedingung öffnen lassen. Aber im nächsten OnTrade ist die Summe von OrdersTotal() + PositionsTotal() ebenfalls Null. Ist das richtig?

 
Anton:

Danke, ich habe den Teil mit dem Kopieren und Einfügen nicht gesehen.

 
fxsaber:

Sie scheint nirgendwo aufzutauchen. Es werden nur HistorySelect-Verzögerungen in OnTrade angezeigt.

Die Zwischenspeicherung von Bestellungsauswahlen wurde heute noch verbessert, in ein paar Stunden wird es eine Beta-Version geben.

 
Renat Fatkhullin:

Die Zwischenspeicherung von Bestellungsauswahlen wurde heute noch verbessert, in ein paar Stunden wird es eine Beta-Version geben.

Meinen Sie HistorySelect? Nur der Autolink führt nicht zu OrderSelect.

 
Nelson Wanyama:

Irgendeine Idee, warum mt5 nicht über die Registerkarte "Provisionen"? Sie erscheinen nur, wenn ein Geschäft abgeschlossen ist.

Irgendeine Idee, warum mt5 nicht über "Kommissionen" Registerkarte? Sie erscheinen nur, wenn ein Geschäft abgeschlossen ist.



 
fxsaber:

Ich habe natürlich den Ausdruck gemacht. Die Frage bezog sich nicht auf die Anzahl der OnTrade-Aufrufe, sondern auf die Anzahl der offenen Positionen.

Nach dem ersten OnTrade wird ein Marktauftrag erteilt. Beim nächsten OnTrade darf diese Marktorder keine weiteren Orders durch die Bedingung öffnen lassen. Aber im nächsten OnTrade ist die Summe von OrdersTotal() + PositionsTotal() ebenfalls Null. Ist das richtig?

Es ist alles in der Hilfe: https://www.mql5.com/ru/docs/trading/ordersendasync

Успешное выполнение означает только факт отсылки, но не даёт никакой гарантии, что запрос дошел до торгового сервера и был принят для обработки.  Торговый сервер при обработке полученного запроса отправляет клиентскому терминалу ответное сообщение об изменении текущего состояния позиций, ордеров и сделок, которое приводит к генерации события Trade.
OrdersTotal() kann also zweifellos null sein. Dies gilt auch für PositionsTotal(). Das hängt von den Transaktionen, ihrer Art und ihrem Inhalt ab.
Документация по MQL5: Торговые функции / OrderSendAsync
Документация по MQL5: Торговые функции / OrderSendAsync
  • www.mql5.com
"и режим вывода сообщений в журнал "Эксперты". По умолчанию выводятся все детали.\r\n" //| Expert initialization function                                   | //| Expert deinitialization function                                 | //| TradeTransaction function                                        |...
 
Anton:

Alles steht in der Hilfe: https://www.mql5.com/ru/docs/trading/ordersendasync

Успешное выполнение означает только факт отсылки, но не даёт никакой гарантии, что запрос дошел до торгового сервера и был принят для обработки.
OrdersTotal() kann also durchaus null sein. Dies gilt auch für PositionsTotal().

https://www.mql5.com/ru/docs/constants/tradingconstants/orderproperties#enum_order_state

Jeder Auftrag hat einen Status, der seinen Zustand beschreibt. Um Informationen zu erhalten, verwenden Sie die FunktionenOrderGetInteger() oderHistoryOrderGetInteger() mit dem Modifikator ORDER_STATE. Gültige Werte werden in der Aufzählung ENUM_ORDER_STATE gespeichert.

ENUM_ORDER_STATE

Kennung

Beschreibung

AUFTRAG_ZUSTAND_GESTARTET

Auftrag auf Korrektheit geprüft, aber noch nicht vom Makler angenommen



Tritt der Started-Status nicht nach einem erfolgreichen OrderSendAsync auf?