FORTS : Codes de retour de OnTradeTransaction() - page 6

 

Génial !

Temps d'installation - 15:07:31.849

Heure de la suppression - 15:07:31.865

Et c'est déjà la 25ème semaine de lademande Invalide, et c'est très sérieux. Maintenant je comprends pourquoi Servicedesk est silencieux.


 

Dans ce cas, le conseiller peut recevoir un code :

TRADE_RETCODE_REJECT
 

Sergei !

Vous avez eu raison. Bogue MQ

Leterminal ne met pas à jour le statut de la commande:

2015.11.26 15:41:56.094 Forts_trader (GAZR-12.15,H1)    Remove: Ордер не отослан! Причина: Неправильный запрос; Билет = 24041883
2015.11.26 15:41:56.094 Forts_trader (GAZR-12.15,H1)    DEBUG: order state = ORDER_STATE_STARTED
2015.11.26 15:41:56.068 Forts_trader (GAZR-12.15,H1)    CheckOrders: Sell ордер установлен. Билет = 24041883

J'ai reçu une commande, mais son état est toujoursORDER_STATE_STARTED.

 
Михаил:

Sergei !

Vous avez eu raison. Bogue MQ

Leterminal ne met pas à jour le statut de la commande:

J'ai reçu la commande, mais son état est toujoursORDER_STATE_STARTED.

Michael, la commande existe-t-elle toujours après ces messages ? Par hasard, un marché n'aurait-il pas été conclu quelques secondes auparavant ?

 
Alexey Kozitsyn:

Michael, la commande existe-t-elle toujours après ces messages ? Est-ce que, par hasard, c'est quelques ms avant que la transaction n'aurait pas pu être exécutée ?

Oui, la commande existe toujours après l'erreur.

Cela n'a pas d'importance, car avant de supprimer (modifier) l'ordre, on vérifie s'il existe :

void COrder::Remove()
{
  if ( ticket > 0 )
  {
    if ( OrderSelect( ticket ) )
    {
      ENUM_ORDER_STATE ord_state = ENUM_ORDER_STATE( OrderGetInteger( ORDER_STATE ) );
      if ( ( ord_state == ORDER_STATE_REQUEST_MODIFY ) ||
           ( ord_state == ORDER_STATE_REQUEST_CANCEL ) ||
           ( ord_state == ORDER_STATE_REQUEST_ADD ) ) return;
//........................................ Other code 
   }
  }
}
 

Pourquoi je demande, je suis dans cette situation :

Journal de bord (experts) :

2015.11.26 18:05:16.725 FROG (RTS-12.15,M1)     TradeRemoveCycle case ORDER_STATE_PLACED: ОШИБКА #4756,  retcode = 10013. Ордер не удален!
2015.11.26 18:05:16.691 FROG (RTS-12.15,M1)     TradeRemoveCycle: ORDER_STATE_PLACED

Je vois que la commande a été acceptée (ce qui signifie qu'elle peut être traitée), mais la demande n'est pas correcte.

Dans le carnet de bord, le journal se présente comme suit :

2015.11.26 18:05:16.725 Trades  '1007642': failed cancel order #35817112 buy 0.00  at market [Invalid request]
2015.11.26 18:05:16.693 Trades  '1007642': cancel order #35817112 buy limit 1.00 RTS-12.15 at 87780
2015.11.26 18:05:16.691 Trades  '1007642': deal #4375646 buy 1.00 RTS-12.15 at 87780 done (based on order #35817112)

C'est-à-dire qu'au moment où l'ordre a été supprimé, une transaction a été exécutée sur celui-ci. Et ensuite, le robot essaie de supprimer l'ordre qui n'existe plus.

Maintenant, j'essaie de décider ce qu'il faut faire.

 
Михаил:

Oui, l'ordre existe bien après l'erreur.

Mais cela n'a pas d'importance, car avant de supprimer (modifier) l'ordre, on vérifie qu'il existe :

Comme vous pouvez le voir, le mien aussi...
 
Alexey Kozitsyn:

Pourquoi je demande, je suis dans cette situation :

Journal de bord (experts) :

Je vois que la commande a été acceptée (ce qui signifie qu'elle peut être traitée), mais la demande n'est pas correcte.

Dans le carnet de bord, le journal se présente comme suit :

C'est-à-dire qu'au moment où l'ordre a été supprimé, une transaction a été exécutée sur celui-ci. Et ensuite, le robot essaie de supprimer l'ordre qui n'existe plus.

J'essaie maintenant de décider ce qu'il faut faire.

J'ai également eu ce problème, mais je l'ai résolu.

Quelle commande utilisez-vous pour définir la fonction OrderSend() ou OrderSendAsync() ?

 
Михаил:

J'ai eu ce problème aussi, mais je l'ai résolu.

Quelle commande utilisez-vous pour définir OrderSend() ou OrderSendAsync() ?

OrderSend(). Et quelle est la différence dans ce cas ?
 
Alexey Kozitsyn:
Envoi de la commande()

Le fait est que lorsqu'un ordre est en cours d'exécution, vous ne contrôlez pas son exécution et vous ne bloquez donc pas OnTick() ou OnBookEvent().

Vous devez traiter l'événement de transaction dans OnTradeTransaction() pour contrôler rapidement l'ordre en cours d' exécution.

Je posterai bientôt le code pour le faire...