Wie man im MT5 mit OrderSend korrekt arbeitet - Seite 3

 
prostotrader:

Profitieren Sie davon.

Warum senden Sie eine leere Anfrage an den Server? Das scheint keinen Sinn zu ergeben.
Und was werden Sie in "//see cause result.retcode" tun, wenn Sie z.B. TRADE_RETCODE_TIMEOUT oder TRADE_RETCODE_FROZEN erhalten?
 
RickD:
Warum senden Sie eine leere Anfrage an den Server? Das scheint keinen Sinn zu ergeben.
Und was tun Sie in "//see result.retcode", wenn Sie z. B. TRADE_RETCODE_TIMEOUT oder TRADE_RETCODE_FROZEN erhalten?
Ich werde mich aufhängen :)
 
Andrey Khatimlianskii:

Ich stütze sie mit beiden Händen. Es scheint, als ob MQ die Verantwortung für die fertige Funktion des Sendens eines Auftrags und des Empfangs einer Antwort nicht übernehmen will.

Meine Option ist auch mit Krücken:

Warum machen Sie nicht etwas Ähnliches (nicht für alle Gelegenheiten, aber zumindest für die einfachsten!) und geben es an SB weiter?

Was nützt die "schnelle Ausführung" von OrderSend(...), wenn wir in EA warten müssen, bis

für Umgebungsaktualisierungen, in diesem Fall Verlaufsaktualisierungen... und verschiedene Algorithmen für das Warten zu entwickeln...

Solange die Geschichte nicht aktualisiert ist, kommen wir nicht weiter... d.h. diese Geschwindigkeit hat keinen Sinn...

 
Denis Sartakov:

Was nützt eine "schnelle" Ausführung von OrderSend(...), wenn wir in EA warten müssen, bis

für eine Umgebungsaktualisierung, in diesem Fall eine Aktualisierung der Historie... und verschiedene Algorithmen für das Warten zu entwickeln...

Solange die Geschichte nicht aktualisiert ist, kommen wir nicht weiter... d.h. diese Geschwindigkeit hat keinen Sinn...

Wahrscheinlich ist es so implementiert, weil das Terminal OrderSend und OrderSendAsync parallel ausführen kann und eine erzwungene Synchronisierung der Historie nach OrderSend irgendwie OrderSendAsync, OnTrade, OnTradeTransaction beeinflussen würde, was diese verlangsamen würde.
 
Andrey Khatimlianskii:
Ich spreche nicht von den eingebauten Sprachfunktionen, sondern von der Standardbibliothek.
Ich spreche speziell von den eingebauten Sprachfunktionen, dass OrderSend intern auf eine Aktualisierung der Handelshistorie warten könnte, was es aber nicht tut. :)
Sie sagen, dass Sie eine Krücke haben, aber die ist nicht so zuverlässig. Nennen Sie mir ein Beispiel für eine gute, zuverlässige Krücke.
Ich will damit sagen, dass Sie vielleicht ganz ohne Krücken auskommen können. Wenn die Entwickler das OrderSend-Verhalten ändern würden. Machen Sie es wie in MT4.
Oder - oder - eine alternative Option. Fügen Sie die Funktion OrderSendMT4Style hinzu. :)
 

Eine sehr einfache OrderSend-Überladung wird unabhängig geschrieben: bis OnTrade eine Antwort liefert, geben alle nachfolgenden OrderSends false zurück. Sobald die Antwort eintrifft, wird "forced false" aufgehoben.

Dies ist genau die Lösung, die wir in den SB aufnehmen müssen. Und wir müssen sie selbst nutzen.

In SB fügen Siebool CTrade::IsHistoryLoad( const string Symb = NULL ) nach demselben Prinzip hinzu.

Und keine Krücken! Beide Funktionen können leicht selbst geschrieben werden.

Wenn Sie die volle Funktionalität erreichen wollen (nicht für SB), rufen Sie OnTick und OnTimer unabhängig voneinander in OnTrade bei Ankunft der entsprechenden Synchronisation auf.

 

Was für ein Haufen von Krücken, die sie geschrieben haben... Untersuchung des Verhaltens der Funktion void OnTradeTransaction()

/*********************TradeTransaction function*********************/
void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
{
      if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
       {
        if(!PositionSelectByTicket(trans.position))
         {
          //Print("********* закрылась позиция ", trans.position);
           closedPosition(trans);
         }
        if(PositionSelectByTicket(trans.position))
         {
          //Print("********* отккрылась позиция ", ", ", EnumToString(trans.deal_type), ", ", trans.position);
           openedPosition(trans);
         }
       }
       
}/*******************************************************************/

Sie bearbeiten auch Fehler bei der Eröffnung von Positionen und Aufträgen.

 
Alexey Viktorov:

Was für ein Haufen von Krücken, die sie geschrieben haben... Untersuchung des Verhaltens der Funktion void OnTradeTransaction()

Sie bearbeiten auch Fehler bei der Eröffnung von Positionen und Aufträgen.

Sie haben das Thema diagonal gelesen.
 
fxsaber:
Sie haben das Thema diagonal gelesen.

Nein, nur vertikal. Nur der erste Buchstabe jeder Zeile.

 
Andrey Khatimlianskii:

Wie funktioniert diese einfache Überladung mit 2 EAs auf demselben Instrument?

Leider nur durch eine Krücke - eine globale Variable des Terminals.