开拓者期货期权程序化系统交易论坛

标题: 要等待Data2.A_DeleteOrder()回复吗? [打印本页]

作者: masterhdd    时间: 2018-4-28 09:50:07     标题: 要等待Data2.A_DeleteOrder()回复吗?

本帖最后由 masterhdd 于 2018-4-28 10:02 编辑

在交易策略进阶中,有个“A函数下单撤单和全局变量操作”的例子,是不是在执行完Data2.A_DeleteOrder();这一条后,Data2.A_GetOpenOrderCount()就立刻==0了?还是要等待Data2.A_DeleteOrder()回复说撤单成功了才
Data2.A_GetOpenOrderCount()==0呢?之所以在撤单指令发出后还要延迟几个TICK才进行下一步的平仓动作,可能就是因为执行完Data2.A_DeleteOrder();这一条后,Data2.A_GetOpenOrderCount()就立刻==0了,而不用等Data2.A_DeleteOrder()的回复来确认,所以要等待若干个TICK来估计现在是真的已经撤单成功了,也就是说此时此处的Data2.A_GetOpenOrderCount()==0不代表真实的撤单成功而仅表示撤单指令已经发出了而已。请版主指教。

  Begin
        。。。   
      If(Data2.Close != InvalidNumeric && Data2.A_GetOpenOrderCount()>0) // 商品2全部撤单
        {
            Data2.A_DeleteOrder();
            DeleteOrderTickCounter = 1;
        }

        DeleteOrderTickCounter = DeleteOrderTickCounter + 1;
        SetGlobalVar(0,DeleteOrderTickCounter);
        If(DeleteOrderTickCounter < 5) Return;
作者: 小米    时间: 2018-5-2 14:14:21

a_deleteorde执行后,A_GetOpenOrderCount()不会立刻==0,需要等柜台的回报返回到本地后, 再次查询的.A_GetOpenOrderCount的结果后才会为0。
作者: masterhdd    时间: 2018-5-2 15:17:52

小米 发表于 2018-5-2 14:14
a_deleteorde执行后,A_GetOpenOrderCount()不会立刻==0,需要等柜台的回报返回到本地后, 再次查询的.A_Ge ...

若是需要等柜台的回报返回到本地后, 再次查询的.A_GetOpenOrderCount的结果后才会为0,那在后续的基于A_BuyPosition()的平仓动作就没必要用Tick计数器延时来估计发出去的单子已成交,查询A_GetOpenOrderCount的结果为0,那么A_BuyPosition()的返回值就是可靠的,比用Tick计数器延时更可靠?
作者: 小米    时间: 2018-5-2 16:16:54

本帖最后由 小米 于 2018-5-2 16:19 编辑
masterhdd 发表于 2018-5-2 15:17
若是需要等柜台的回报返回到本地后, 再次查询的.A_GetOpenOrderCount的结果后才会为0,那在后续的基于A_ ...


既然您看到这个代码了,麻烦再读一下这个代码前在134页的文字说明。

(3)。。。。。
或者因为成交回报不及时而不能得到准确的a_buyposition值,因此,设计撤单后延时5个tick再平仓
(注意:这里假定撤单后5个tick委托状态能同步成功,实际情况中因网络延时等原因并不一定能够成功,因此实际策略中请根据情况调整)

您也可以完全不理会这个代码,按自己的想法来实现公式的。这里只是一个范例,并没有什么标准答案。你有更好的方法都可以试一下的。
作者: masterhdd    时间: 2018-5-2 18:02:21

小米 发表于 2018-5-2 16:16
既然您看到这个代码了,麻烦再读一下这个代码前在134页的文字说明。

(3)。。。。。

多谢释疑。




欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2