FORTS: OnTradeTransaction() 返回代码 - 页 6

 

棒极了!

安装时间 - 15:07:31.849

清除时间 - 15:07:31.865

而现在已经是无效请求 的第25周了,而且是在认真 的情况下。现在我明白了为什么Servicedesk不说话了。


 

在这种情况下,顾问可能会收到一个代码。

TRADE_RETCODE_REJECT
 

谢尔盖!

事实证明,你是对的。MQ错误

终端不更新订单状态

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

收到了 一个订单,但其状态仍然是ORDER_STATE_STARTED

 
Михаил:

谢尔盖!

事实证明,你是对的。MQ错误

终端不更新订单状态

已经收到了 订单,但其状态仍然是ORDER_STATE_STARTED

迈克尔,在这些信息之后,这个订单还存在吗?有没有可能在几秒钟前就有一笔交易被执行?

 
Alexey Kozitsyn:

迈克尔,在这些信息之后,这个订单还存在吗?是否在任何机会下,在几毫秒之前,该交易不可能被执行?

是的,错误发生后,该订单仍然存在。

这并不重要,因为在删除(修改)订单之前会检查它是否存在。

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

我为什么要问,我有这种情况。

记录本(专家)。

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

我可以看到订单已被接受(这意味着它可以被处理),但请求并不正确。

在日志中,日志是这样的。

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)

也就是说,在订单被删除的那一刻,有一笔交易是在它上面执行的。然后,机器人试图删除已经不存在的订单。

现在我正试图决定该怎么做。

 
Михаил:

是的,错误后的订单确实存在。

但这并不重要,因为在删除(修改)订单之前会检查它是否存在。

如你所见,我的也是如此......。
 
Alexey Kozitsyn:

我为什么要问,我有这种情况。

记录本(专家)。

我可以看到订单已被接受(这意味着它可以被处理),但请求并不正确。

在日志中,日志是这样的。

也就是说,在订单被删除的那一刻,有一笔交易是在它上面执行的。然后,机器人试图删除已经不存在的订单。

现在我正试图决定该怎么做。

我也曾遇到过这个问题,但我已经解决了。

你用什么命令来设置OrderSend()或OrderSendAsync()?

 
Михаил:

我也遇到过这个问题,但我已经解决了。

你用哪个命令来设置OrderSend()或OrderSendAsync()?

OrderSend()。那么在这种情况下有什么不同呢?
 
Alexey Kozitsyn:
订单发送()

问题是,当一个订单被执行时,你并不控制它的执行,因此你不会阻止OnTick()或OnBookEvent()。

你需要在OnTradeTransaction()中处理交易事件,以快速控制正在执行的订单

我将很快发布如何做的代码...