Funktion OrderSendAsync() - Seite 4

 

Kolleginnen und Kollegen, was halten Sie von dieser Idee? In eine solche Struktur(MqlPacketTradeResult) können Sie ein Feld schreiben, das die Anzahl der abgeschlossenen Aufträge usw. angibt.


bool  OrderSendAsync(
   MqlPacketTradeRequest&  packet_request,      // пакетная структура запроса
   MqlPacketTradeResult&   packet_result        // пакетная структура ответа
   );
 
denkir:

Kolleginnen und Kollegen, was halten Sie von dieser Idee? In eine solche Struktur(MqlPacketTradeResult) können Sie ein Feld schreiben, das die Anzahl der abgeschlossenen Aufträge usw. angibt.

Dazu müssten wir jedoch in der Funktion OrderSendAsync() auf eine Antwort des Servers warten. Und die Asynchronität der Funktion OrderSendAsync() läuft ins Leere. Renat hat bereits versprochen, dass es weitere Funktionen geben wird, mit denen man versuchen kann, nach dem Auslösen von OrderSendAsync() etwas zu verändern.
 
Yedelkin:
Но для этого придётся дожидаться ответа от сервера в рамках функции OrderSendAsync(). И асинхронность функции OrderSendAsync() сойдёт на нет. Ренат же уже пообещал, что будут иные функции, с помощью которых можно попытаться похимичить после срабатывания OrderSendAsync().

Ja, ich hatte nicht an die Asynchronität gedacht...

Das war's dann:

bool  OrderSendAsync(
   MqlPacketTradeRequest&  packet_request,      // пакетная структура запроса
   );

bool  OrderReceiveAsync(
   MqlPacketTradeResult&   packet_result        // пакетная структура ответа
   );
 
denkir:

Ja, ich hatte nicht an die Asynchronität gedacht...

Nun, es geht los:

Asynchron bedeutet, dass sie arbeiten, ohne auf eine Antwort zu warten. Abfeuern (OrderSenAsync) und ausführen, ohne zu prüfen, ob das Ziel getroffen wird. Denn es bleibt keine Zeit.

Eine indirekte Reaktion wäre ein späteres Geräusch (OnTrade) - vielleicht hat der Schuss das Ziel getroffen, oder es ist gerade etwas heruntergefallen. Hier können Sie, wenn Sie möchten, alle Aufträge, Geschäfte, Positionen usw. einsehen und überprüfen.

 
denkir:

Ja, ich hatte nicht an die Asynchronität gedacht...

Das war's dann:

Nun, dann schon OrderSendPacketAsync(), OrderReceivePacketAsync :) Damit ist es weiterhin möglich, eine einzelne Anfrage im bereits bestehenden asynchronen Modus zu senden und anschließend nach Informationen darüber zu suchen.
 
Rosh:

Eine indirekte Antwort ist ein Geräusch, das später kommt (OnTrade) - vielleicht hat der Schuss das Ziel erreicht, oder es ist gerade etwas gefallen. Hier können Sie, wenn Sie möchten, nachsehen (alle Aufträge, Geschäfte, Positionen usw. überprüfen).

Daher schlägt er vor, in OnTrade() eine Funktion OrderReceiveXXX() zu verwenden, um nicht auf alle eingehenden Handelsereignisse zu reagieren, sondern nur auf diejenigen, die zu asynchronen Warteschlangen gehören.
 
Rosh:

Asynchron bedeutet, dass sie arbeiten, ohne auf eine Antwort zu warten. Feuern (OrderSenAsync) und ausführen, ohne zu prüfen, ob das Ziel getroffen wird. Denn es bleibt keine Zeit.

Eine indirekte Antwort ist ein späteres Geräusch (OnTrade) - es kann sein, dass der Schuss das Ziel getroffen hat oder einfach etwas heruntergefallen ist. Hier können Sie, wenn Sie wollen, nachsehen (alle Aufträge, Geschäfte, Positionen usw. überprüfen).

Sie irren sich entweder wegen Ihrer geringen Erfahrung im asynchronen Handel oder wegen der schwachen Funktionalität von MT5 für diese Art von Betrieb.

Sie brauchen keine Asynchronität um der Asynchronität willen. Und sie wird nur dann eingesetzt, wenn es sich lohnt. Zum Beispiel beim Handel mit einem Portfolio, wenn das Portfolio hier und jetzt gekauft oder neu gewichtet werden muss. Mit anderen Worten: etwa ein Dutzend Handelsaufträge für verschiedene Symbole zu den aktuellen Kursen.

Und niemand wird es tun, wenn Sie die Asynchronität so behandeln, wie Sie es beschrieben haben - schießen und vergessen. Und die Reaktionen auf die Schüsse sollten auf der Grundlage der aktuellen Nettopositionen bewertet werden. Die Reaktionen sollten für jeden einzelnen Handelsauftrag spezifisch sein.

Wenn es eine Weiterleitung gab, sollten wir darüber informiert werden, oder wir sollten eine andere Antwort erhalten. Wir sollten uns nicht fragen, ob es ein neues Angebot gab oder nicht, denn die Nettoposition hat sich für ein oder zwei Sekunden nicht verändert.

Auf der ersten Seite dieser Diskussion finden Sie die Diagramme und die eingehenden Nachrichtenereignisse. Sie sind nicht einfach aus dem Nichts aufgetaucht, sondern verfügen über jahrelange Erfahrung im Bereich der Asynchronität. Es lohnt sich also, dieser Architektur ohne Zimperlichkeit Aufmerksamkeit zu schenken.

 
denkir:

Kolleginnen und Kollegen, was halten Sie von dieser Idee? In eine solche Struktur(MqlPacketTradeResult) können Sie ein Feld schreiben, das die Anzahl der abgeschlossenen Aufträge usw. angibt.

Sie gehen davon aus, dass der Stapel von Aufträgen immer dieselben Felder enthält?

IMHO eine Charge von den gleichen Anforderungen ist nur für Demonstrationszwecke benötigt, für die Arbeit wird verwendet werden, Anforderungen der verschiedenen Zeichen, mit unterschiedlichen Volumina und natürlich verschiedene Richtungen. Und folglich muss jeder Antrag einzeln geprüft werden, so dass es keinen Sinn macht, einen Stapel von Anträgen zu versenden.

Und was Sie vermuten, ist nur eine Bindung der for-Schleife.

 
Urain:

Wollen Sie damit sagen, dass in einem Stapel von Bewerbungen immer die gleichen Felder ausgefüllt sind?

IMHO wird ein Stapel identischer Bewerbungen nur zu Demonstrationszwecken benötigt, für die Arbeit werden Bewerbungen mit unterschiedlichem Charakter, unterschiedlichem Volumen und natürlich unterschiedlichen Richtungen verwendet. Und folglich muss jeder Antrag einzeln geprüft werden, so dass es keinen Sinn macht, einen Stapel von Anträgen zu versenden.

Und was Sie vermuten, ist nur eine Bindung der for-Schleife.

Und was hindert Sie daran, jede Anfrage zyklisch zu beantworten? Und dann ebenso zyklisch jedes Ergebnis verarbeiten?
 
denkir:
Was hindert sie daran, jeden Auftrag zyklisch zu erfüllen? Und dann ebenso zyklisch jedes Ergebnis verarbeiten?

Wenn Ihr Vorschlag nur die bestehende Funktion ergänzen wird, nichts, sonst ist es nicht klar, wie einfache Struktur MqlPacketTradeRequest ...

bool  OrderSendAsync(
   MqlPacketTradeRequest&  packet_request,      // пакетная структура запроса
   MqlPacketTradeResult&   packet_result        // пакетная структура ответа
   );

... Wenn die MqlPacketTradeRequest-Struktur die Struktur eines dynamischen Arrays von MqlTradeRequest-Strukturen ist, kann sie die gesamte Logik des Servers, die für einfache Abfragestrukturen ausgelegt ist, zerstören.

Andernfalls müssten wir auf der Terminalebene diesen Stapel in separate Anfragen aufteilen, was den Sinn der Einführung dieser Überlast zunichte macht.

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса - Документация по MQL5