以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://www.weistock.com/bbs/index.asp) -- 公式模型编写问题提交 (http://www.weistock.com/bbs/list.asp?boardid=4) ---- 什么叫做“从头刷新指标数据时” (http://www.weistock.com/bbs/dispbbs.asp?boardid=4&id=51694) |
|||||||||||||||||||||||||||||||||||||||
-- 作者:wn10000neng -- 发布时间:2013/5/5 18:47:32 -- 什么叫做“从头刷新指标数据时” GLOBALVARIABLE的说明
好像VARIABLE也会记住最后一次被赋予的值?二者到底有什么区别呢 [此贴子已经被作者于2013-5-5 18:49:11编辑过]
|
|||||||||||||||||||||||||||||||||||||||
-- 作者: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总是会越来越大 |
|||||||||||||||||||||||||||||||||||||||
-- 作者:klc -- 发布时间:2013/5/5 22:50:34 -- 我再跟你解释下,这段代码的输出吧 globalvariable:mybarpos=0; mybarpos:=mybarpos+1; A:barpos; B:mybarpos;
假如一共有3根K线,那么加载上去后,三根K线的A、B值分别是:
假如这个时候是休市期间,那么正常情况下,K线应该不会刷新了,你用光标在K线上移动,图表上就一直显示上面的值。 然后你可以重新编辑下上面的代码,随便改点,比如加个空行,再保存,那么3个K线都会重新计算,就变成了:
不用怀疑,再改就一直这么下去,依此类推。
如果收到新行情了呢?如果收到新行情,出来个第4根K线,紧接着上面的值,就会变成:
再收到一个新行情,但仍是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线产生 |
|||||||||||||||||||||||||||||||||||||||
-- 作者:wn10000neng -- 发布时间:2013/5/6 9:40:41 -- 什么叫做“从头刷新指标数据时” 请客服回答,谢谢 |
|||||||||||||||||||||||||||||||||||||||
-- 作者:stephen -- 发布时间:2014/5/30 10:28:31 -- 非常详细!谢谢! |
|||||||||||||||||||||||||||||||||||||||
-- 作者:fhlszmj -- 发布时间:2015/1/12 23:59:57 -- 我想请教一下 这个有什么作用呢? |
|||||||||||||||||||||||||||||||||||||||
-- 作者:jinzhe -- 发布时间:2015/1/13 9:12:21 -- 解释一下超全局变量在图表上以逐k线仅刷最后一根k线模式下的运行机制 |