经过测试发现,
买入开仓后,1手
OrderStatusEx2的Status为"Submitted"和"PreSubmitted" 时,tremainqty(1,'888888',stklabel)的值有时候依然为0,按理应该为“1”
OrderStatusEx2的Status为Filled时,tbuyholdingex的值有时候依然为0 ,按理应该为“1”
当然,大部分是同步的
后台程序,模拟账户800043
程序的动作:涨停价开多1手,16秒后 跌停价卖出平仓,再16秒后 开多,如此循环
检查方法:检查tbuyholdingex('800043',stklabel,1)和 extgbdata('kaiping') 是否一致
kaiping的取值来源于OrderStatusEx2
代码如下:
Sub ORDER_OrderStatusEx2(OrderID, Status, Filled, Remaining, Price, Code, Market, OrderType, Aspect, Kaiping, Account, AccountType)
if filled=1 then
if kaiping=0 then document.SetExtData "kaiping",1 '开多,且成交,kaiping置为1
if kaiping=1 then document.SetExtData "kaiping",0 ’平多,且成交,kaiping置为0
end if
End Sub
后台程序:
if not(islastbar) then exit;
abb:=extgbdata('abb');
buyhold:=tbuyholdingex('800043',stklabel,1);
if buyhold<>extgbdata('kaiping') then debugfile('c:\luntan.txt','no=%.0f',1);//如果不一致,输出 no=1
if buyhold=0 and abb=16 then begin
tbuy(1,1,lmt,dynainfo(54),0,'800043'),allowrepeat;
extgbdataset('abb',0);
end
if buyhold>0 and abb=10 then begin
tsell(1,1,lmt,dynainfo(55),0,'800043'),allowrepeat;
extgbdataset('abb',0);
end
if abb>16 then extgbdataset('abb',abb-1);
if abb<16 then extgbdataset('abb',abb+1);
输出的日志:
2011-10-20 13:38:07.114 no=1
2011-10-20 13:39:57.114 no=1
2011-10-20 13:42:10.114 no=1
2011-10-20 13:42:32.114 no=1
2011-10-20 13:44:44.161 no=1
2011-10-20 13:46:56.161 no=1
同步时间下单的金字塔日志也提供一下
或者这样检测 ,后台每10秒钟开多、平多一直循环
只交易1个品种,只开多,这样 order.Holding2("800043") 为1 就是 持有1手多单,为0就是没有任何持仓
开多成交时,检查order.Holding2是否为1 ,平多成交时,检查order.Holding2是否为0
如果不对,就输出消息。
不知道这样检测是否科学?
dim Acc
Sub ORDER_OrderStatusEx2(OrderID, Status, Filled, Remaining, Price, Code, Market, OrderType, Aspect, Kaiping, Account, AccountType)
if filled=1 then
if kaiping=0 then acc=1
if kaiping=1 then acc=0
if acc<>order.Holding2("800043") then
application.MsgOut "1"
end if
end if
End Sub