FORTI. Problemi di applicazione - pagina 7

 

Buon pomeriggio!

C'è qualcosa che non va al The Kingdom.

1

Ci sono progressi nel lavoro?

 
Mikalas:

Buon pomeriggio!

C'è qualcosa che non va nel Regno

Ci sono progressi nel lavoro?

Sì, ci sono stati molti progressi.

Stiamo rilasciando una nuova build questa settimana e quando i server saranno aggiornati, vedrete un'accelerazione. Il lavoro è ancora in corso.

 
Renat:

Sì, il progresso è grande.

Rilasceremo una nuova build questa settimana e quando i server saranno aggiornati, vedrete l'accelerazione. Il lavoro è ancora in corso.

Ben fatto! Non vedo l'ora!
 

Buon pomeriggio, Renat!

Ci sono broker negli Stati Uniti che usano MT5 per

Negoziazione di futures?

 
Non ancora.
 
Renat:
Non ancora.
I piani sono lontani o in un futuro prevedibile?
 
Mikalas:
I piani sono lontani o in un futuro prevedibile?
Non appena arriveranno notizie, le pubblicheremo.
 

Buon pomeriggio, Renat!

Avete intenzione di migliorare il gestore OnTradeTransaction?

 
Cosa intende esattamente con questo?
 
Renat:
Cosa intende esattamente con questo?

Buon pomeriggio!

L'immagine mostra il log dell'azione con un ordine pendente:

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

Installazione --> Modifica --> Rimozione

Perché la duplicazione (cerchiata in rosso)?

E non ci sono codici di ritorno.

Per esempio, un ordine può essere cancellato da me, ma può anche essere cancellato dal broker, o forse si è verificata una scadenza dell'ordine.

Come faccio a saperlo?

Ora vediamo come impostare un ordine in sospeso:

Inviando il comando OrderSendAsync, otteniamo il numero di richiesta req_id = result.request_id

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

In OnTradeTransaction otteniamo immediatamente una risposta (result.retcode) se l'ordine è impostato (otteniamo il suo ticket) o no

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; 
}    

Perché abbiamo bisogno di altri 3 messaggi,

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

se abbiamo già capito tutto?

Poi, la modifica.

perché abbiamo bisogno del messaggio,

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

se non conosciamo comunque il risultato di questa azione(Retcode = 0)?

Inviando un comando di modifica dell'ordine, sappiamo già, come nel caso dell'impostazione, che viene modificato (abbiamo ottenuto ripetutamente il biglietto eresult.retcode == TRADE_RETCODE_PLACED).

Sarebbe molto più informativo aggiungereRetcode = MODIFY_DONE al messaggio

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