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