FORTS. Fragen der Durchsetzung - Seite 7

 

Guten Tag!

Irgendetwas stimmt nicht mit dem Königreich.

1

Gibt es Fortschritte bei den Arbeiten?

 
Mikalas:

Guten Tag!

Irgendetwas stimmt nicht mit dem Königreich

Gibt es Fortschritte bei den Arbeiten?

Ja, es hat viele Fortschritte gegeben.

Wir werden diese Woche einen neuen Build veröffentlichen und wenn die Server aktualisiert werden, werden Sie eine Beschleunigung sehen. Die Arbeiten sind noch im Gange.

 
Renat:

Ja, der Fortschritt ist großartig.

Wir werden diese Woche einen neuen Build veröffentlichen, und wenn die Server aktualisiert sind, werden Sie die Beschleunigung sehen. Die Arbeiten sind noch im Gange.

Gut gemacht! Ich freue mich darauf!
 

Guten Tag, Renat!

Gibt es in den USA Makler, die MT5 für

Termingeschäfte?

 
Noch nicht.
 
Renat:
Noch nicht.
Sind die Pläne in weiter Ferne oder in absehbarer Zukunft?
 
Mikalas:
Sind die Pläne in weiter Ferne oder in absehbarer Zukunft?
Sobald uns Neuigkeiten erreichen, werden wir sie veröffentlichen.
 

Guten Tag, Renat!

Haben Sie vor, den OnTradeTransaction-Handler zu verbessern?

 
Was genau meinen Sie damit?
 
Renat:
Was genau meinen Sie damit?

Guten Tag!

Die Abbildung zeigt das Protokoll der Aktion mit einem schwebenden Auftrag:

void OnTradeTransaction( const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result )
{
  Print( "Type = ", EnumToString(trans.type), "; State = ", EnumToString( trans.order_state ), "; Retcode = ", result.retcode );
}

Installation --> Modifikation --> Demontage

Warum die Verdoppelung (rot eingekreist)?

Und es gibt keine Rückgabecodes.

Zum Beispiel kann ein Auftrag von mir gelöscht werden, aber auch vom Broker, oder es ist ein Auftragsablauf eingetreten.

Woher soll ich das wissen?

Betrachten wir nun die Einstellung eines schwebenden Auftrags:

Durch Senden des Befehls OrderSendAsync erhalten wir die Anforderungsnummer req_id = result.request_id

if ( OrderSendAsync( request, result ) )
  {
    if ( result.retcode == TRADE_RETCODE_PLACED ) 
    {
      req_id = result.request_id;
    }
  }

In OnTradeTransaction erhalten wir sofort eine Antwort (result.retcode), ob der Auftrag gesetzt ist (wir erhalten sein Ticket) oder nicht

void OnTradeTransaction( const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result )
{
 // Print( "Type = ", EnumToString(trans.type), "; State = ", EnumToString( trans.order_state ), "; Retcode = ", result.retcode );

  switch( trans.type )
  {
    case TRADE_TRANSACTION_REQUEST:      if ( trans.order_state == ORDER_STATE_STARTED )
                                         {
                                           if ( ( req_id != 0 ) && ( result.request_id == req_id ) )
                                           {
                                             if ( result.retcode == TRADE_RETCODE_PLACED )
                                             {
                                               ticket = result.order;
                                             }
                                             req_id = 0;   
                                           }
                                         }
                                         break; 
}    

Warum brauchen wir 3 weitere Nachrichten,

EI      0       20:45:15.932    Forts_trader (SBRF-3.15,H1)     Type = TRADE_TRANSACTION_ORDER_ADD; State = ORDER_STATE_STARTED; Retcode = 0
GD      0       20:45:15.932    Forts_trader (SBRF-3.15,H1)     Type = TRADE_TRANSACTION_ORDER_UPDATE; State = ORDER_STATE_REQUEST_ADD; Retcode = 0
KI      0       20:45:15.961    Forts_trader (SBRF-3.15,H1)     Type = TRADE_TRANSACTION_ORDER_UPDATE; State = ORDER_STATE_PLACED; Retcode = 0

wenn wir schon alles im Griff haben?

Als nächstes die Änderung.

warum brauchen wir die Nachricht,

KI      0       20:45:36.879    Forts_trader (SBRF-3.15,H1)     Type = TRADE_TRANSACTION_ORDER_UPDATE; State = ORDER_STATE_REQUEST_MODIFY; Retcode = 0

wenn wir das Ergebnis dieser Aktion ohnehin nicht kennen(Retcode = 0)?

Wenn wir einen Befehl zum Ändern der Bestellung senden, wissen wir bereits, dass sie geändert wird (wir haben das Ticket wiederholt erhalten undresult.retcode == TRADE_RETCODE_PLACED), wie beim Setzen der Bestellung.

Es wäre viel informativer, derMeldung Retcode = MODIFY_DONE hinzuzufügen

RN      0       20:45:36.895    Forts_trader (SBRF-3.15,H1)     Type = TRADE_TRANSACTION_ORDER_UPDATE; State = ORDER_STATE_PLACED; Retcode = MODIFY_DONE
Ну и с удалением ордера та же история, получив TRADE_TRANSACTION_REQUEST и result.retcode == TRADE_RETCODE_PLACED мы уже знаем, что ордер в состоянии удаления.
Да и вообще, зачем знать переходные состояния ордера, если с ним, в этот момент, ничего нельзя сделать? 
Т.е для отслеживания команд и состояния ордера
достаточно Type = TRADE_TRANSACTION_REQUEST и  result.retcode == TRADE_RETCODE_PLACED для понимания, что команда исполнена и происходит действие
А для результата действия достаточно   Type = TRADE_TRANSACTION_ORDER_UPDATE; State = ORDER_STATE_PLACED; Retcode = PLACE_DONE | MODIFY_DONE | CANCELED_DONE | OTHER_ERRORS
Grund der Beschwerde: