以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 金字塔软件问题提交 (http://weistock.com/bbs/list.asp?boardid=2) ---- 奇怪:做空条件不成立,却有下单,但下单手数为0 (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=8891) |
-- 作者:阿火 -- 发布时间:2011/11/10 8:36:49 -- 奇怪:做空条件不成立,却有下单,但下单手数为0 日志情况是这样,以下的日志从09:44 一直出现,直到10:11 2011-11-09 09:44:46.125 【后台】IF11 TBuyShort 出现信号 …… 2011-11-09 10:11:30.343 【后台】IF11 运行结束
下单语句是这样的: 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; end
debugfile 输出的日志为(09:44——10:11,都是以下的样子): 2011-11-09 09:44:46.109 -8 开空 0 8 0 2011-11-09 10:11:29.687 -8 开空 0 8 0
也就是:buyhold=0、wt=0、sellhold>=0都成立,但kc=abs(-8)-8=0,并不符合“kc>0”的条件。但是会下单,这是什么原因? 难道是精度问题? 幸好tbuyshort(1,0,mkt),在手数为0时,并不表示满仓开空。呵呵
[此贴子已经被作者于2011-11-10 8:42:11编辑过]
|
-- 作者:admin -- 发布时间:2011/11/10 8:41:51 -- 可能是精度问题,默认情况下的计算都是浮点的,浮点计算是有误差的,你下次可以试试与0比较时,将数值取整后再比较 |
-- 作者:阿火 -- 发布时间:2011/11/10 8:48:58 -- 那岂不是所有与0比较的变量都要取整? 比如以上条件中,buyhold=0 ,可能buyhold=0.00001 。wt也可能是 0.00001 或者 0.999999 ,都要取整?
也就是,如果比较的2个量 如果可能很接近的话,都要考虑精度问题
我最经常用的 if holding=0 and buycond then buy(1,1,limitr,c); 这里的holding需要取整吗 [此贴子已经被作者于2011-11-10 8:51:59编辑过]
|
-- 作者:admin -- 发布时间:2011/11/10 8:56:17 -- if holding=0 等是不需要的,因为holding返回的数值本身就是整数,与0判断要取整主要是经过数值计算后的数据 |
-- 作者:fly -- 发布时间:2011/11/10 8:57:50 -- 本地还从来未遇到过HOLDING和0比较时会出现这种现象,个人认为holding不需要取整,得出的也都是正确的. |
-- 作者:阿火 -- 发布时间:2011/11/10 9:12:56 -- 恩。holding应该不用
不过想想,还是有点不明白 sellhold:=tbuyholding(AC,stklabel,N) 这个可能出现浮点数吗,还是一定是整数? cc821888888的整个计算过程都是整数计算,应该一直都是整数吧。 cc821888888的计算过程是: 引用其它3个模型的holding ,分别为cc1、cc2、cc3,然后乘以系数 即:cc821888888:=2*cc1 + 3*cc2 +1*cc3 ;
cc821888888和sellhold ,这2个变量,谁搞的鬼。把它揪出来 |
-- 作者:董小球 -- 发布时间:2011/11/10 21:05:10 -- 哈哈 这个问题只能哥来解决了,回想下上学时,有没有印象老师一般都讲过一个极端情况,那就是0=0 成立,0>0成立,0<0也成立,忘记是中学还是大学的微积分那部分了,反正我稍微有点这个印象,不知是不是这个问题~~ |
-- 作者:董小球 -- 发布时间:2011/11/10 21:16:41 -- 另外,我觉得这个判断可以修改成为KC>=1 来代替=0,肯定可以避免这种状况,我总感觉1和0在电脑世界代表的意义太多了 |
-- 作者:阿火 -- 发布时间:2011/11/10 22:15:49 -- 球哥真幽默
KC>=1会不会变成 0.999999>=1 不成立啊
看来只能这样,用kc>0.5 ,这样肯定没问题 [此贴子已经被作者于2011-11-10 22:18:23编辑过]
|