以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  金字塔软件问题提交  (http://222.73.7.161/bbs/list.asp?boardid=2)
----  常数函数的bug  (http://222.73.7.161/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线仅刷一遍,所以, 即使是常数函数也会定格为刷那一遍的时候的值.