日志情况是这样,以下的日志从09:44 一直出现,直到10:11
2011-11-09 09:44:46.125 【后台】IF11 TBuyShort 出现信号
2011-11-09 09:44:46.125 【后台】IF11 TBuyShort 委托数量为0
2011-11-09 09:44:46.125 【后台】IF11 运行结束
2011-11-09 09:44:47.218 【后台】IF11 运行结束
2011-11-09 09:44:47.546 【后台】IF11 TBuyShort 出现信号
2011-11-09 09:44:47.562 【后台】IF11 TBuyShort 委托数量为0
2011-11-09 09:44:47.562 【后台】IF11 运行结束
2011-11-09 09:44:49.031 【后台】IF11 运行结束
……
……
2011-11-09 10:11:30.343 【后台】IF11 运行结束
2011-11-09 10:11:30.703 【后台】IF11 运行结束
2011-11-09 10:11:31.031 【后台】IF11 TBuyShort 出现信号
2011-11-09 10:11:31.046 【后台】IF11 TBuyShort 委托数量为0
下单语句是这样的:
kc:=abs(cc821888888)-sellhold;
if buyhold=0 and wt=0 and kc>0 and sellhold>=0 then begin//buyhold、sellhold、wt分别代表多头持仓、空头持仓、委托单数量
tbuyshort(abb821888888 =tm,kc,mkt,0,0,'821888888 '),allowrepeat;
tbuyshort(abb821888888 <=0,kc,lmt,dynainfo(21)-s*0.2,0,'821888888 '),allowrepeat;
extgbdataset('abb821888888 ',1);
debugfile('D:\LOG\821888888 .txt',numtostr(cc821888888 ,0)+' 开空 '+numtostr(buyhold,0)+' '+numtostr(sellhold,0)+' %.0f',wt);
end
debugfile 输出的日志为(09:44——10:11,都是以下的样子):
2011-11-09 09:44:46.109 -8 开空 0 8 0
2011-11-09 09:44:47.546 -8 开空 0 8 0
……
2011-11-09 10:11:29.687 -8 开空 0 8 0
2011-11-09 10:11:31.031 -8 开空 0 8 0
也就是:buyhold=0、wt=0、sellhold>=0都成立,但kc=abs(-8)-8=0,并不符合“kc>0”的条件。但是会下单,这是什么原因?
难道是精度问题?
幸好tbuyshort(1,0,mkt),在手数为0时,并不表示满仓开空。呵呵
那岂不是所有与0比较的变量都要取整?
比如以上条件中,buyhold=0 ,可能buyhold=0.00001 。wt也可能是 0.00001 或者 0.999999 ,都要取整?
也就是,如果比较的2个量 如果可能很接近的话,都要考虑精度问题
我最经常用的 if holding=0 and buycond then buy(1,1,limitr,c); 这里的holding需要取整吗
恩。holding应该不用
不过想想,还是有点不明白
sellhold:=tbuyholding(AC,stklabel,N) 这个可能出现浮点数吗,还是一定是整数?
cc821888888的整个计算过程都是整数计算,应该一直都是整数吧。
cc821888888的计算过程是: 引用其它3个模型的holding ,分别为cc1、cc2、cc3,然后乘以系数
即:cc821888888:=2*cc1 + 3*cc2 +1*cc3 ;
cc821888888和sellhold ,这2个变量,谁搞的鬼。把它揪出来
球哥真幽默
KC>=1会不会变成 0.999999>=1 不成立啊
看来只能这样,用kc>0.5 ,这样肯定没问题