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
导致 一直在发出平仓委托
请教,是写的有问题吗?
VBA取的是实际持仓量,发出委托后,如果没有成交,那么buyhoding等变量不会马上变化。因此不要简单的把buyhoding持仓做为条件,还应该联合查询未成交单这样来综合判断是否该需要下单
不好意思,是我提的问题
重新测试一下,给出证据。呵呵
模拟账户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
定义一下那些变量看看
如:
dim sellhoding
你应该先看看Order.HoldingInfo2的返回值,如果是1的话再进行下单动作
Result = Order.HoldingInfo2...
if Result = 1 then
...
end if
每次都如上所述。
经过测验,Order.HoldingInfo2在没有仓位的情况下,获取持仓信息失败
如果改为如下:
Result = Order.HoldingInfo2...
if Result = 1 then
...
end if
就不会出错了。
也就是全部平仓后,获取持仓信息失败,但sellhoding和buyhoding并不等于0
而是依然等于上一次的sellhoding、buyhoding的值
而我按一般程序的思路,想当然地认为,获取持仓信息失败的时候,sellhoding、buyhoding的值应该为0或者无效值
看来下次要认真调试,先判断返回值是否成功再执行程序
谢谢以上几位兄弟。