忽然想到一个有点"杞人忧天"的想法,比如下面的语句:
result=order.buy()
if result=-1 then ....
order下单之后,如果回报较慢,会不会出现明明下单成功了,但由于程序运行速度过快,以致于没有等到成交回报就返回,导致result错误返回-1.可能出现这种情况吗?不知道这个担心是不是很白痴
不用担心,返回值是你的报单ID,不是成交回报,报单ID不用等成交回报的
这个Result=ORDER.BUY(....)我感觉肯定有问题,我今天早上,不断重复开仓,就是因为下单成功但Result错误返回0造成的.具体来说
BUYcon=Document.GetPrivateProfileString("OrderCon",tLabel & "BUYCon_" & tIndex,"","D:\SystemSet.ini") '本次触发条件
BUYconL=Document.GetPrivateProfileString("OrderCon",tLabel & "BUYConL_" & tIndex,"","D:\SystemSet.ini") '保存的上次触发条件,以便一根k线一条语句仅执行一遍
if BUYcon<>BUYconL then
order.OrderQueue = 1
orderlog=Date & " " & Time & ",账户:" & tAcc & "," & tMarket & tCode & "在VBABUY中下单,手数:" & Num & ",原因:" & BUYcon & "<>" & BUYconL '每句下单命令前都要写入下单日志便于查找原因
Document.DebugFile "D:\OrderLog.txt",orderlog,0
Result=ORDER.BUY(1,Num,0,0,tCode,tMarket,tAcc,0)
if Result=0 then
orderstr="账号:" & tAcc & "," & tMarket & tCode & "," & Num & "手多开下单失败!重点检查账号是否登录"
JIANGE tCode & "orderfail1",orderstr
exit sub
end if
Document.WritePrivateProfileString "OrderCon",tLabel & "BUYConL_"& tIndex,BUYcon,"D:\SystemSet.ini" '我现在是把这句放在if Result=0 then前面,因为发现有时下单成功却result返回0,以致执行了exit sub,后面无法写入tLabel & "BUYConL_"& tIndex,从而不断重复开仓!
ordermsg tCode,tMarket,Num,1
end if
[此贴子已经被作者于2014/9/10 13:26:02编辑过]
是否方便将你记录的日志也发过来,最好是别用INI文件,我们需要是那种连续记录的日志,这样可以对历史下单记录进行分析的
还有, 下单失败明确的返回记录是 -1, 只要不是 -1值, 都是成功标志
帮助上不是写着返回0才表示下单失败吗?怎么又变成-1了?
返回值:
下单失败返回0,否则返回本地订单ID(可能包含负数),通过此ID可以修改订单或者撤单等等操作
日志我明天上班再发
order.OrderQueue = 1
看到你这句话了, 使用队列下单时,你将无法获得及时的成交回报的,只能是返回0, 这个我们帮助没说明清楚,后面会补上的