欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件金字塔软件问题提交 → 常数函数的bug

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有2953人关注过本帖树形打印复制链接

主题:常数函数的bug

帅哥哟,离线,有人找我吗?
dwjgwsm
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:864 积分:607 威望:0 精华:0 注册:2013/3/14 23:16:32
常数函数的bug  发帖心情 Post By:2017/8/10 11:14:18 [只看该作者]

逐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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:8439 积分:0 威望:0 精华:0 注册:2014/7/14 13:43:36
  发帖心情 Post By:2017/8/10 11:28:08 [只看该作者]

lastbar 这个函数写错了吧,是要表达最新的一根k吗?

是ISLASTBAR


 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2017/8/10 11:31:44 [只看该作者]

1.currenttime会刷新,但是是在当前最新K上,有分笔来的时候刷新一次。如果行情不活跃,那么可能就会维持一个值一段时间。

2.这个函数在当前最新K的上一个K上以及更久之前的K维持一个相同的值。这个值是这样的:最新K之前的那个K最后一次刷新时产生的currenttime值。

 

如果我说的不够明白,您可以使用这个函数,单独调试下。看下返回值。这是这么个机制。



命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
dwjgwsm
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:864 积分:607 威望:0 精华:0 注册:2013/3/14 23:16:32
  发帖心情 Post By:2017/8/10 11:37:12 [只看该作者]

lastbar:=islastbar;

我是后台策略引用图表策略,上述代码放在图表策略中

直接加载图表策略到k线图表中好像是没这个问题,我待会儿再测试一下

 回到顶部
帅哥哟,离线,有人找我吗?
dwjgwsm
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:864 积分:607 威望:0 精华:0 注册:2013/3/14 23:16:32
  发帖心情 Post By:2017/8/10 11:40:23 [只看该作者]

这个值是这样的:最新K之前的那个K最后一次刷新时产生的currenttime值。

确实是这样的!我的测试中图表策略设置的是仅刷最后一根k线,但这样确实会存在我一楼后面说的问题

 回到顶部
帅哥哟,离线,有人找我吗?
dwjgwsm
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:864 积分:607 威望:0 精华:0 注册:2013/3/14 23:16:32
  发帖心情 Post By:2017/8/10 11:42:26 [只看该作者]

是不是所有的常数函数都是这样的机制?

 回到顶部
帅哥哟,离线,有人找我吗?
dwjgwsm
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:864 积分:607 威望:0 精华:0 注册:2013/3/14 23:16:32
  发帖心情 Post By:2017/8/10 11:45:03 [只看该作者]

这样的机制导致常数函数在运用历史k线时很容易出错!和编程者的通常理解不一致、这样设计真的好么?

 回到顶部
帅哥哟,离线,有人找我吗?
dwjgwsm
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:864 积分:607 威望:0 精华:0 注册:2013/3/14 23:16:32
  发帖心情 Post By:2017/8/10 11:47:46 [只看该作者]

确实得注意常数函数的理解和使用了

 回到顶部
帅哥哟,离线,有人找我吗?
dwjgwsm
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:864 积分:607 威望:0 精华:0 注册:2013/3/14 23:16:32
  发帖心情 Post By:2017/8/10 12:09:27 [只看该作者]

 明白了,由于历史K线仅刷一遍,所以, 即使是常数函数也会定格为刷那一遍的时候的值.

 回到顶部