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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 什么叫做“从头刷新指标数据时”

   

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


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

主题:什么叫做“从头刷新指标数据时”

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


加好友 发短信
等级:黑侠 帖子:993 积分:1787 威望:0 精华:5 注册:2012/11/28 17:37:20
  发帖心情 Post By:2013/5/5 22:35:06    Post IP:183.235.249.123[显示全部帖子]

你看看我的“教你写一个不卡的复杂图表策略”你就知道了,这是里面我的研究报告:

“逐K线计算”+“仅刷最后一根K线”模式的运行原理是这样的:

加载公式到图表,或公式被初次stkindi:从第1根K线(barpos=1)逐根计算至最后一根K线(barpos=DATACOUNT且islastbar为true

收到新的行情但没有产生新的K线:仅就最后一根K线进行计算

收到新的行情并且产生新的K线(即新K线收到第一笔行情):从第1根K线(barpos=1)逐根计算至最后一根K线(barpos=DATACOUNT且islastbar为true

 

所以,金字塔即使在“仅刷最后一根K线”时也会新产生一根K线就“从头刷新指标数据”,不勾选他,则每次都是“从头刷新指标数据”。所以两种全局变量表现不同:VARIABLE在计算barpos=1的K线时被重置,GLOBALVARIABLE不会,所以使用GLOBALVARIABLE要更小心,例如我曾经遇到两次评测的结果不同,后来查出的原因就是连两次评测时,GLOBALVARIABLE都没被重置,也就是GLOBALVARIABLE竟然记住了上次评测时最后一次被赋予的值。当然,把评测窗口关闭,然后重新从菜单中点击再次进入交易评测,GLOBALVARIABLE就被重置了。

 

我还发现,当你把公式加载到图表后,GLOBALVARIABLE就再也不会被重置,即使你进入代码编辑,修改了一点代码,保存,图表上的公式进行了重新计算,GLOBALVARIABLE也没有被重置。

 

换句话说GLOBALVARIABLE在加载后,只进行一次初始化,然后只能通过代码来改变他的值,你可以在barpos=1时对他进行赋值个初始值,那他和variant就几乎没什么两样了。

 

以前我以为勾选了“仅刷最后一根K线”,GLOBALVARIABLE或variable就每次都被重置,但实际不是的,只是这时金字塔对最后一根K线的“临时值”是不保存的,但当新K线产生时,那根K线最后一次被计算的值还是会被保存的。

你可以试试:

variable:mybarpos=0;

mybarpos:=mybarpos+1;

A:barpos;

B:mybarpos;

上面A、B输出总是一样的,但是你想过没有,最后一根K线在实盘时往往被刷新很多次,结果系统只承认一次,明白了吧?

 

globalvariable:mybarpos=0;

mybarpos:=mybarpos+1;

A:barpos;

B:mybarpos;

这个输出的B就不一定和A一样了,只有第一次加载时是一样的,第二次计算,B就都比A大很多了,总之B总是会越来越大


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


加好友 发短信
等级:黑侠 帖子:993 积分:1787 威望:0 精华:5 注册:2012/11/28 17:37:20
  发帖心情 Post By:2013/5/5 22:50:34    Post IP:183.235.249.123[显示全部帖子]

我再跟你解释下,这段代码的输出吧

globalvariable:mybarpos=0;

mybarpos:=mybarpos+1;

A:barpos;

B:mybarpos;

 

假如一共有3根K线,那么加载上去后,三根K线的A、B值分别是:

 

  K线序号  1    2    3   
   A 1    2    3   
   B 1    2    3   

 

假如这个时候是休市期间,那么正常情况下,K线应该不会刷新了,你用光标在K线上移动,图表上就一直显示上面的值。

然后你可以重新编辑下上面的代码,随便改点,比如加个空行,再保存,那么3个K线都会重新计算,就变成了:

 

  K线序号  1    2    3   
   A 1    2    3   
   B 4    5    6   

 

不用怀疑,再改就一直这么下去,依此类推。

 

如果收到新行情了呢?如果收到新行情,出来个第4根K线,紧接着上面的值,就会变成:

 

  K线序号   1    2    3    4  
   A  1    2    3    4  
   B  7    8    9    10  

 

再收到一个新行情,但仍是4根K线,由于勾选了仅刷新最后K线,所以仅刷新第4根K线,这时,金字塔仅对第4根K线进行计算,计算过程如下,我逐句解释:

globalvariable:mybarpos=0;

在这次刷新中不进行初始化,所以mybarpos不会变成0,但mybarpos也不是上次计算第4根的10,而是取第3根最后保存的值,那就是9

mybarpos:=mybarpos+1; 

9+1等于10,所以计算后结果为10,其实这里相当于mybarpos:=ref(mybarpos,1)+1; 所以你应该明白为什么金字塔说ref在if  then和exit时会不正常了吧

A:barpos;

输出4

B:mybarpos;

输出10

 

所以,不管第4根K线被刷新多少次,在“仅刷新最后一根K”时,你会看到B的结果总是10。直到新的K线产生


版主评定:好评,获得30个金币奖励好评,获得30个金币奖励
(理由:奖励)
 回到顶部