FORTES. Questões de aplicação da lei - página 7

 

Boa tarde!

Algo não está bem no Reino.

1

Há algum progresso no trabalho?

 
Mikalas:

Boa tarde!

Algo não está bem no Reino

Há algum progresso no trabalho?

Sim, um grande progresso.

Estamos lançando uma nova construção esta semana e quando os servidores forem atualizados, você verá uma aceleração. O trabalho ainda está em andamento.

 
Renat:

Sim, o progresso é grande.

Lançaremos um novo build esta semana e quando os servidores forem atualizados, você verá a aceleração. O trabalho ainda está em andamento.

Muito bem feito! Ansioso por isso!
 

Boa tarde, Renat!

Qualquer corretor nos EUA está usando o MT5 para

Negociação de futuros?

 
Ainda não.
 
Renat:
Ainda não.
Os planos estão distantes ou em um futuro próximo?
 
Mikalas:
Os planos estão distantes ou em um futuro próximo?
À medida que as notícias chegarem, iremos publicá-las.
 

Boa tarde, Renat!

Você planeja melhorar o manipulador da OnTradeTransaction?

 
O que você quer dizer exatamente com isso?
 
Renat:
O que você quer dizer exatamente com isso?

Boa tarde!

A foto mostra o registro da ação com uma ordem 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 );
}

Instalação --> Modificação --> Remoção

Por que a duplicação (circulada em vermelho)?

E não há códigos de retorno.

Por exemplo, uma ordem pode ser apagada por mim, mas também pode ser apagada pelo corretor, ou talvez tenha ocorrido uma expiração da ordem.

Como posso saber?

Agora vamos analisar a criação de uma ordem pendente:

Ao enviar o comando OrderSendAsync, obtemos o número da solicitação req_id = result.request_id

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

Na OnTradeTransaction recebemos imediatamente uma resposta (resultado.retcode) quer o pedido esteja definido (recebemos seu bilhete) ou não

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

Por que precisamos de mais 3 mensagens,

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 já tivermos tudo resolvido?

Em seguida, a modificação.

por que precisamos da mensagem,

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 não soubermos o resultado desta ação de qualquer forma(Retcode = 0)?

Ao enviar um comando para modificar a ordem, já sabemos, como no caso da configuração, que ela está sendo modificada (recebemos o bilhete repetidamente eresult.retcode == TRADE_RETCODE_PLACED).

Seria muito mais informativo adicionarRetcode = MODIFY_DONE à mensagem

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