Rss & SiteMap

金字塔客服中心 - 专业程序化交易软件提供商 http://www.weistock.com/bbs/

专业程序化软件提供商
共7 条记录, 每页显示 10 条, 页签: [1]
[浏览完整版]

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

1楼
wn10000neng 发表于:2013/5/5 18:47:32

GLOBALVARIABLE的说明
申明并初始化超全局变量,GLOBALVARIABLE除了不支持数组外其他使用均与VARIABLE普通全局变量相同,
唯一不同之处在与GLOBALVARIABLE超全局变量在不会每次从头刷新指标数据时重新被刷新计算,而是始终会记住最后一次被赋予的值
超全局变量一般会在客户停止后台程式化交易或者关闭框架图表后销毁重置。

 

好像VARIABLE也会记住最后一次被赋予的值?二者到底有什么区别呢

[此贴子已经被作者于2013-5-5 18:49:11编辑过]
2楼
klc 发表于:2013/5/5 22:35:06

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

“逐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总是会越来越大

3楼
klc 发表于:2013/5/5 22:50:34
我再跟你解释下,这段代码的输出吧

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线产生

4楼
wn10000neng 发表于:2013/5/6 9:40:41

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

请客服回答,谢谢

5楼
stephen 发表于:2014/5/30 10:28:31
非常详细!谢谢!
6楼
fhlszmj 发表于:2015/1/12 23:59:57
我想请教一下 这个有什么作用呢?
7楼
jinzhe 发表于:2015/1/13 9:12:21
解释一下超全局变量在图表上以逐k线仅刷最后一根k线模式下的运行机制
共7 条记录, 每页显示 10 条, 页签: [1]


Powered By Dvbbs Version 8.3.0
Processed in 0.03613 s, 3 queries.