管理员,有两组指令请帮忙解答如下问题,谢谢!
发单指令代码组:
Order.OrderQueue = 1
call order.sell(1,1,0,0,“IF04”,“ZJ”,“800000”,0)
call order.BuyShort(1,1,0,0,“IF04”,“ZJ”,“800000”,0)
撤单指令代码组:
Result=Order.OrderInfoByCode2(,“IF04”,"ZJ”, OrderID, ConSign, Filled, Remaining, Action, OrderType, LmtPrice, Account, Kaiping)
If Result=1 Then
call Order.CancelOrder(OrderID)
End If
问题1:两下单指令入队列后,先平多仓,成交后再反手开空仓,好理解。如果平多仓指令在一段时间后未成交(5秒),我发出查询有无未成交订单指令,此时的回报的未成交信息(Result=1),是指平仓未成交?开仓未成交?还是平仓开仓都未成交?
问题2:在平仓未成交时(反手开仓尚未执行),我此时发出撤单指令,是只撤销平仓指令,还是平仓指令和反手开仓指令成对都撤销?如果是都撤销是我需要的结果,否则撤销了平仓指令的同时,反手开仓继续执行的话,我的资金就会不足了。
问题3:在发出撤单指令完成撤单后,我如果继续委托(先平多仓,再反手开空仓),是否必须将上面发单指令代码组的全部代码重新执行一次,还是只需要重新发出平仓指令即可?
问题1,OrderInfoByCode2这个只返回指定品种的未成交订单,如果同一个品种存在多个未成交单,那么可能会随机返回一个。如果你需要遍历整个未成交单,包括一个品种的多个订单,那么你应该使用 OrderInfo2 方法 进行遍历,取得所有未成交单信息进行处理
撤单时只撤 OrderID 这笔挂单,其他均不影响。
建议你多用Application.msgout函数用模拟账户进行调试一下便知
王峰老师,按您的意思我理解:
1、在打开Order.OrderQueue=1时候,如果同时下了平仓和反手开仓的订单,如果平仓单未成交,开仓单肯定也未执行,此时用Order.OrderInfoByCode2检测是否有未成交的订单,回报的可能是平仓的挂单,也可能是反手开仓的挂单,是随机的,此时用call Order.CancelOrder(OrderID)撤单,可能撤销的是平仓挂单,也可能是反手开仓的挂单,取决于OrderID返回的挂单号。我的问题是,如果我撤销了平仓挂单,没有撤销后面的反手开仓挂单,如果账号资金足够,是不是会执行反手开仓挂单?
2、如果我只撤销了平仓挂单,马上继续追加挂平仓单,是否也不会成交,因为队列前面还有反手开仓单没有撤销,必须将平仓和反手开仓单一起撤销后,再发出平仓和反手开仓挂单?
看了你的描述,
这里解释如下:
在打开Order.OrderQueue=1时候,金字塔会按照队列报单,也就是只会报第一笔,第二笔放在队列中不会报单,如果你查询未成交单的话只会查到第一笔。
如果撤单成功,那么在默认情况下第二笔报单会随之报出去,如果你希望第一笔报单撤单后撤销队列里的报单,那么你应该在 交易菜单-》下单设置-》程序化交易 选项卡中,选择 “之前报单完成成交后再顺序报单”这个选项
另外请教王峰老师,在下单设置选择“之前报单完成成交后再顺序报单”这个选项时,弹出”使用时注意:在策略里的报单至少需要2笔以上的委托单,如果只往队列中报单一笔,那么金字塔将会在2秒钟之后才开始处理这一笔保单“的提示,这里说说的至少2笔是什么意思,是说今天这个策略至少有2笔委托先后发送到队列,还是必须是同时发送2笔委托到队列?按前者理解,即今天发送第一笔委托时,会在队列中等待延迟2秒才报单,今天第2笔委托就不再在队列中延迟2秒了,是这样吗?
在第二笔队列插入后才马上对第一笔报单进行委托处理。如果第二笔报单迟迟未报,那么再等待2秒后不再等待