欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 重复下单问题

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有3565人关注过本帖树形打印复制链接

主题:重复下单问题

帅哥哟,离线,有人找我吗?
wukong_32
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:88 积分:150 威望:0 精华:0 注册:2013/5/15 11:29:34
重复下单问题  发帖心情 Post By:2015/4/28 11:30:29 [只看该作者]

vb中,我按照下面的顺序执行的时候,会出现重复下单:

 

do while 每2秒
  1、获取当前的持仓:Order.HoldingInfoByCode2
  2、根据当前持仓,判断是否需要开\平仓,如果需要开平仓:
  (1)获取未成交委托笔数,order.OrderNum2
  (2)获取未成交委托号,order.OrderInfo2
  (3)根据未成交单委托号,全部撤单order.CancelOrder   
  (4)重新委托下单,order.buy(市价委托)
end

 

问题:
1、重复下单的原因,是否是成交回报>2秒?
2、如果1成立,市价委托,成交回报>2秒,粗粗感觉,同样的环境,比手工设置的止损单回报要慢。
3、请问,如何增加对委托回报或者成交回报的判断,来避免重复下单的问题?

 

我尝试做的工作如下:
4、尝试使用了SynchroByAccount 刷新委托信息,但是该函数有问题,无法显示“未成交委托”;舍弃;(见下图)
5、尝试使用OrderStatusEx2,但是如果SynchroByAccount无法使用的话,如何能保证OrderStatusEx2取到的是最新数据?


该问题比较急迫,烦请解答,非常谢谢!


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20150428110152.jpg
图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
yukizzc
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2015/4/28 15:36:46 [只看该作者]

1、可以看下交易日志里面下单到回报过来,这个时间差有多少

2、OrderStatusEx2这个没问题的,你可以通过判断Status 报单是否已提交


 回到顶部
帅哥哟,离线,有人找我吗?
王锋
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2015/4/28 15:43:43 [只看该作者]

使用你的逻辑是没法精确判断上笔报单是否成交,加上你2秒的轮询出现重复下单是必然的。

并不是成交回报要2秒,而是你这2秒的轮询期间,那面正好有重合点是你报单回报没来得及回来的时刻这样你就会产生重复下单。

我们金字塔处理防止重复下单是采用得到order.buy的返回值的订单ID,这个ID在你下单后会马上产生,你保存这个订单号,遇到成交回报或者撤单回报等回报,与回报里的订单ID比较,成交或者撤单后再删除这个ID。这样下次再做下单时只要判断你保存的订单ID是否存在就可以了。

此外,VBA的开发工作是细致的工作,用户应该掌握最基本的调试手段,本地记录日志是最常用,这样你就可以自己去分析解决问题,而不是具足无措了



金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
wukong_32
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:88 积分:150 威望:0 精华:0 注册:2013/5/15 11:29:34
  发帖心情 Post By:2015/4/28 16:25:03 [只看该作者]

非常感谢耐心解答!

 

1、确实忘记打开记录日志了(现已打开);

2、我看到帮助文档里,order.buy下面写:当使用orderqueue时,返回值恒定为0,而要通过成交回报获得订单ID

目前使用了orderqueue,请问有什么方法能够快捷得到刚刚委托的订单ID?

 

orderinfo2可以获取未成交的id,假设有多笔未成交的时候,感觉根据orderinfo2的参数index来获取不一定准确。

 

烦请不辞辛苦,指点一二!


 回到顶部
帅哥哟,离线,有人找我吗?
王锋
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2015/4/28 16:26:51 [只看该作者]

使用了orderqueue就没办法了,建议你程序精确控制持仓时不要用orderqueue


金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
wukong_32
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:88 积分:150 威望:0 精华:0 注册:2013/5/15 11:29:34
  发帖心情 Post By:2015/4/28 16:29:08 [只看该作者]

嗯,有道理,既然判断到逐笔的委托的状态,完全可以代替使用orderqueue了;

我再试一下,非产感谢哈!

 


 回到顶部