以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  Order.CancelOrder问题  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=151029)

--  作者:laotang250
--  发布时间:2017/4/11 14:15:05
--  Order.CancelOrder问题
我在VBA程序里发现对于未成交的限价单不能通过这个方法撤消,而未成交的停损单可以,不知道为什么会这样?是有什么特别的讲究么?

代码如下:
\'假如程序运行时rb00的市价为3000
order1 = Order.Buy(0,5,2900,0,"rb00","sq","",0)
order2 = Order.Buy(2,5,3100,0,"rb00","sq","",0)

Order.CancelOrder order1,""
Order.CancelOrder order2,""

--  作者:laotang250
--  发布时间:2017/4/11 14:18:44
--  

另外,我发现以上代码调用中,停损单返回的单号一般是个3位数字(例如543),而限价单是一个比较大的数字(例如:446657792),和这个有关系么?

--  作者:王锋
--  发布时间:2017/4/11 14:53:29
--  

直接委托后,单子还没等报到交易所下一句你就马上撤单,这样肯定是不行的。

你要将Order.CancelOrder order1 放到其他过程语句,建议等2秒后再撤单


--  作者:laotang250
--  发布时间:2017/4/11 20:34:00
--  
为了代码的紧凑,我只是写了个示例,我实际用的代码是开单后,用定时器延时了10秒才撤单的,但是限价单不成功,而停损单可以。可方便确认一下?
--  作者:马良
--  发布时间:2017/4/11 23:20:23
--  
那建议你代码贴全,便于我们核实你说的问题
--  作者:laotang250
--  发布时间:2017/4/12 19:49:11
--  
我的问题解决了,这个函数没有问题。
原因我通过VBA的函数返回给PET公式调用的单号通过NUMTOSTR输出后和在VBA下调试看到的单号不一致,是这个问题,但是这个问题还没找到原因。对于停损单,单号是3位数字,这个传递过去没有问题,对于限价单,单号是9位数字,VBA中通过MSGOUT输出的和PET中通过NUMTOSTR转换后输出的不一致,9位数字的最后两位有差异,前面7位一致,不知道是不是PET内部单精度浮点数引起的问题。