FORTS: Códigos de retorno de OnTradeTransaction() - página 6

 

¡Impresionante!

Tiempo de instalación - 15:07:31.849

Hora de borrado - 15:07:31.865

Y ya es la 25ª semana desolicitud de Invalid, y es con toda seriedad. Ahora entiendo por qué servicedesk está en silencio.


 

En estos casos el asesor puede recibir un código:

TRADE_RETCODE_REJECT
 

¡Sergei!

Resultó tener razón. Error MQ

Elterminal no actualiza el estado del pedido:

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

He recibido un pedido pero su estado sigue siendoORDER_STATE_STARTED

 
Михаил:

¡Sergei!

Resultó tener razón. Error MQ

Elterminal no actualiza el estado del pedido:

He recibido el pedido pero su estado sigue siendoORDER_STATE_STARTED

Michael, ¿el pedido sigue existiendo después de estos mensajes? ¿Por casualidad no se pudo realizar un acuerdo sobre él unos meses antes?

 
Alexey Kozitsyn:

Michael, ¿el pedido sigue existiendo después de estos mensajes? ¿Por casualidad, unos pocos ms antes de que el comercio no podría haber sido ejecutado?

Sí, el pedido sigue existiendo después del error.

No importa, porque antes de borrar (modificar) la orden se comprueba si 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 
   }
  }
}
 

Por qué lo pregunto, tengo esta situación:

Cuaderno de bitácora (expertos):

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

Veo que el pedido ha sido aceptado (lo que significa que se puede gestionar), pero la solicitud no es correcta.

En el cuaderno de bitácora el registro es así:

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)

Es decir, en el momento en que la orden fue eliminada, se ejecutó una operación sobre ella. Y entonces, el robot intenta borrar el pedido que ya no existe.

Ahora estoy tratando de decidir qué hacer.

 
Михаил:

Sí, el pedido existe después del error.

Pero no importa, porque antes de borrar (modificar) la orden se comprueba que existe:

Como puedes ver, el mío también lo hace...
 
Alexey Kozitsyn:

Por qué lo pregunto, tengo esta situación:

Cuaderno de bitácora (expertos):

Veo que el pedido ha sido aceptado (lo que significa que se puede gestionar), pero la solicitud no es correcta.

En el cuaderno de bitácora el registro es así:

Es decir, en el momento en que la orden fue eliminada, se ejecutó una operación sobre ella. Y entonces, el robot intenta borrar el pedido que ya no existe.

Ahora estoy tratando de decidir qué hacer.

Yo también he tenido este problema, pero lo he solucionado.

¿Qué comando se utiliza para establecer el OrderSend() o OrderSendAsync()?

 
Михаил:

Yo también he tenido este problema, pero lo he solucionado.

¿Qué comando se utiliza para establecer OrderSend() o OrderSendAsync()?

OrderSend(). ¿Y cuál es la diferencia en este caso?
 
Alexey Kozitsyn:
EnviarPedido()

La cuestión es que cuando se está ejecutando una orden, no se controla su ejecución y por tanto no se bloquea OnTick() ni OnBookEvent().

Es necesario manejar el evento de comercio en OnTradeTransaction() para controlar rápidamente la orden que se ejecuta.

Pronto publicaré el código de cómo hacerlo...