以文本方式查看主题

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

--  作者:fly
--  发布时间:2011/9/9 13:09:39
--  请教:定时器

Sub dingshi0()  application.SetTimer 1,5000

 

End Sub

Sub APPLICATION_Timer(ID)
Order.HoldingInfo2 0,BuyHoding,BuyCost,BuyTodayHoding,SellHoding,SellCost,SellTodayHoding,PNL,UseMargin ,Code,Market
if sellhoding>0 then Order.Sellshort 1,1,0,0,Code,Market,"",0
if buyhoding>0 then Order.Sell 1,1,0,0,Code,Market,"",0
End Sub

 

VBA代码的意思是 平仓账户所有持仓
等平仓完毕之后,sellhoding 和 buyhoding 应该都为0,但是并不为0

导致 一直在发出平仓委托
请教,是写的有问题吗?


--  作者:王锋
--  发布时间:2011/9/9 13:14:07
--  

VBA取的是实际持仓量,发出委托后,如果没有成交,那么buyhoding等变量不会马上变化。因此不要简单的把buyhoding持仓做为条件,还应该联合查询未成交单这样来综合判断是否该需要下单


--  作者:阿火
--  发布时间:2011/9/9 14:32:07
--  

不好意思,是我提的问题

 

重新测试一下,给出证据。呵呵

模拟账户800043,买入4手股指,用以上的代码自动平仓,每5秒种检查一次,有持仓的话,平1手

 

这是下单日志: (定时器是5秒一次)

 

2011-09-09 14:23:07.680    【下单】IF09 价2745.199951 量4 买卖0 类型0 开平0 账户800043 Formula 1
2011-09-09 14:23:08.024    【回报】800043 : IF09 - 正在申报 4 价格:2745.20 开仓 买入
2011-09-09 14:23:08.086    【回报】800043 : IF09 全部成交 4 价格:2745.2 开 买 //买开4手
2011-09-09 14:23:11.321    【下单】IF09 价0.000000 量1 买卖1 类型1 开平1 账户800043 Formula 1
2011-09-09 14:23:11.743    【回报】800043 : IF09 - 正在申报 1 价格:2743.80 平仓 卖出
2011-09-09 14:23:12.008    【回报】800043 : IF09 全部成交 1 价格:2744.4 平 卖
2011-09-09 14:23:16.321    【下单】IF09 价0.000000 量1 买卖1 类型1 开平1 账户800043 Formula 1
2011-09-09 14:23:16.555    【回报】800043 : IF09 - 正在申报 1 价格:2744.40 平仓 卖出
2011-09-09 14:23:16.821    【回报】800043 : IF09 全部成交 1 价格:2745.0 平 卖
2011-09-09 14:23:21.321    【下单】IF09 价0.000000 量1 买卖1 类型1 开平1 账户800043 Formula 1
2011-09-09 14:23:21.539    【回报】800043 : IF09 - 正在申报 1 价格:2744.20 平仓 卖出
2011-09-09 14:23:21.743    【回报】800043 : IF09 全部成交 1 价格:2744.8 平 卖
2011-09-09 14:23:26.321    【下单】IF09 价0.000000 量1 买卖1 类型1 开平1 账户800043 Formula 1
2011-09-09 14:23:26.805    【回报】800043 : IF09 - 正在申报 1 价格:2744.20 平仓 卖出
2011-09-09 14:23:26.883    【回报】800043 : IF09 全部成交 1 价格:2745.0 平 卖   //全部平仓完毕,后面一直下单
2011-09-09 14:23:31.321    【下单】IF09 价0.000000 量1 买卖1 类型1 开平1 账户800043 Formula 1
2011-09-09 14:23:31.524    【回报】800043 : 委托手数超过可平仓数量--800043,IF1109,卖,平,投,1,2744.2000,800043,cffex,dzqb2b
2011-09-09 14:23:36.321    【下单】IF09 价0.000000 量1 买卖1 类型1 开平1 账户800043 Formula 1
2011-09-09 14:23:36.586    【回报】800043 : 委托手数超过可平仓数量--800043,IF1109,卖,平,投,1,2744.0000,800043,cffex,dzqb2b
2011-09-09 14:23:41.321    【下单】IF09 价0.000000 量1 买卖1 类型1 开平1 账户800043 Formula 1
2011-09-09 14:23:41.602    【回报】800043 : 委托手数超过可平仓数量--800043,IF1109,卖,平,投,1,2744.4000,800043,cffex,dzqb2b
2011-09-09 14:23:46.321    【下单】IF09 价0.000000 量1 买卖1 类型1 开平1 账户800043 Formula 1
2011-09-09 14:23:46.649    【回报】800043 : 委托手数超过可平仓数量--800043,IF1109,卖,平,投,1,2744.2000,800043,cffex,dzqb2b
2011-09-09 14:23:51.321    【下单】IF09 价0.000000 量1 买卖1 类型1 开平1 账户800043 Formula 1
2011-09-09 14:23:51.571    【回报】800043 : 委托手数超过可平仓数量--800043,IF1109,卖,平,投,1,2744.2000,800043,cffex,dzqb2b
2011-09-09 14:23:56.321    【下单】IF09 价0.000000 量1 买卖1 类型1 开平1 账户800043 Formula 1
2011-09-09 14:23:56.618    【回报】800043 : 委托手数超过可平仓数量--800043,IF1109,卖,平,投,1,2744.0000,800043,cffex,dzqb2b
2011-09-09 14:24:01.321    【下单】IF09 价0.000000 量1 买卖1 类型1 开平1 账户800043 Formula 1
2011-09-09 14:24:01.602    【回报】800043 : 委托手数超过可平仓数量--800043,IF1109,卖,平,投,1,2744.0000,800043,cffex,dzqb2b
2011-09-09 14:24:06.321    【下单】IF09 价0.000000 量1 买卖1 类型1 开平1 账户800043 Formula 1
2011-09-09 14:24:06.555    【回报】800043 : 委托手数超过可平仓数量--800043,IF1109,卖,平,投,1,2743.2000,800043,cffex,dzqb2b
2011-09-09 14:24:11.321    【下单】IF09 价0.000000 量1 买卖1 类型1 开平1 账户800043 Formula 1
2011-09-09 14:24:11.586    【回报】800043 : 委托手数超过可平仓数量--800043,IF1109,卖,平,投,1,2743.0000,800043,cffex,dzqb2b
2011-09-09 14:24:16.321    【下单】IF09 价0.000000 量1 买卖1 类型1 开平1 账户800043 Formula 1
2011-09-09 14:24:16.602    【回报】800043 : 委托手数超过可平仓数量--800043,IF1109,卖,平,投,1,2743.4000,800043,cffex,dzqb2b


--  作者:admin
--  发布时间:2011/9/9 14:45:26
--  
每次都这样么还是只是偶尔
--  作者:guotx2010
--  发布时间:2011/9/9 16:24:15
--  

定义一下那些变量看看

如:

dim sellhoding

 


--  作者:admin
--  发布时间:2011/9/9 16:27:02
--  

你应该先看看Order.HoldingInfo2的返回值,如果是1的话再进行下单动作

 

Result = Order.HoldingInfo2...

if Result = 1 then

...

end if

[此贴子已经被作者于2011-9-9 16:27:12编辑过]

--  作者:阿火
--  发布时间:2011/9/10 0:08:51
--  

每次都如上所述。

经过测验,Order.HoldingInfo2在没有仓位的情况下,获取持仓信息失败

 

如果改为如下:

Result = Order.HoldingInfo2...

if Result = 1 then

...

end if

就不会出错了。

 

也就是全部平仓后,获取持仓信息失败,但sellhoding和buyhoding并不等于0

而是依然等于上一次的sellhoding、buyhoding的值

而我按一般程序的思路,想当然地认为,获取持仓信息失败的时候,sellhoding、buyhoding的值应该为0或者无效值

看来下次要认真调试,先判断返回值是否成功再执行程序

谢谢以上几位兄弟。

 

[此贴子已经被作者于2011-9-10 0:09:50编辑过]