以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://www.weistock.com/bbs/index.asp) -- 金字塔软件问题提交 (http://www.weistock.com/bbs/list.asp?boardid=2) ---- 常数函数的bug (http://www.weistock.com/bbs/dispbbs.asp?boardid=2&id=156701) |
-- 作者:dwjgwsm -- 发布时间:2017/8/10 11:14:18 -- 常数函数的bug 逐K线模式,仅刷最后一根K线 x1:CURRENTTIME,NODRAW; text:=NUMTOSTR(date,0) & \' x1=\' & NUMTOSTR(x1,0); if STRCMP(code,\'TA00\')=0 and lastbar and range(CURRENTTIME,085959,090300) then begin for i=0 to 3 do BEGIN DEBUGFILE(\'c:\\Records.txt\',text[barpos-i] & \' c=%.0f\',c); end end 记录结果: 2017-08-10 09:00:44.859 1170810 x1=90037 c=5310 2017-08-10 09:00:44.859 1170809 x1=90037 c=5310 2017-08-10 09:00:44.859 1170808 x1=90037 c=5310 2017-08-10 09:00:44.859 1170807 x1=90037 c=5310 2017-08-10 09:02:01.609 1170810 x1=90201 c=5312 2017-08-10 09:02:01.609 1170809 x1=90037 c=5312 //90037这个时间是当根K线第一次运行的时间,也就是说currenttime函数在历史K线上被始终定格为第一遍运行的时间 2017-08-10 09:02:01.609 1170808 x1=90037 c=5312 2017-08-10 09:02:01.609 1170807 x1=90037 c=5312 这带来的问题就是,如果在语句中使用了常数函数,比如currenttime函数,若有如下语句 cont:=aa and not(range(currenttime,90000,90100)),假如有一根K线,其cont在90100之后条件成立,当该K线成为历史K线之后,cont的值将始终定格在90000~90100期间的运算结果(因为第一遍运行是在此期间完成的),也就是cont将始终不成立 |
-- 作者:pyd -- 发布时间:2017/8/10 11:28:08 -- lastbar 这个函数写错了吧,是要表达最新的一根k吗? 是ISLASTBAR |
-- 作者:FireScript -- 发布时间:2017/8/10 11:31:44 -- 1.currenttime会刷新,但是是在当前最新K上,有分笔来的时候刷新一次。如果行情不活跃,那么可能就会维持一个值一段时间。 2.这个函数在当前最新K的上一个K上以及更久之前的K维持一个相同的值。这个值是这样的:最新K之前的那个K最后一次刷新时产生的currenttime值。
如果我说的不够明白,您可以使用这个函数,单独调试下。看下返回值。这是这么个机制。 |
-- 作者:dwjgwsm -- 发布时间:2017/8/10 11:37:12 -- lastbar:=islastbar; 我是后台策略引用图表策略,上述代码放在图表策略中 直接加载图表策略到k线图表中好像是没这个问题,我待会儿再测试一下
|
-- 作者:dwjgwsm -- 发布时间:2017/8/10 11:40:23 -- 这个值是这样的:最新K之前的那个K最后一次刷新时产生的currenttime值。 确实是这样的!我的测试中图表策略设置的是仅刷最后一根k线,但这样确实会存在我一楼后面说的问题
|
-- 作者:dwjgwsm -- 发布时间:2017/8/10 11:42:26 -- 是不是所有的常数函数都是这样的机制? |
-- 作者:dwjgwsm -- 发布时间:2017/8/10 11:45:03 -- 这样的机制导致常数函数在运用历史k线时很容易出错!和编程者的通常理解不一致、这样设计真的好么? |
-- 作者:dwjgwsm -- 发布时间:2017/8/10 11:47:46 -- 确实得注意常数函数的理解和使用了 |
-- 作者:dwjgwsm -- 发布时间:2017/8/10 12:09:27 -- 明白了,由于历史K线仅刷一遍,所以, 即使是常数函数也会定格为刷那一遍的时候的值. |