PineScript变量初始设为0,引用ama[1]却返回非零值的问题
关于PineScript中
ama[1]初始值非零的问题解答 核心原因是你混淆了PineScript中变量初始赋值和历史序列引用的逻辑,具体拆解:
- 你写的
ama = 0.只是当前K线的初始值,但后续通过ama := nz(ama[1]+tc*(src-ama[1]),src)对ama做了重新赋值,这个赋值结果会被PineScript存入变量的历史序列中,覆盖初始的0值。 - PineScript是按每根K线顺序计算的:
- 第一根K线:
ama[1]不存在(没有前一根K线数据),所以nz()会触发默认值src,此时ama最终被赋值为当前收盘价,而非初始的0。 - 第二根及以后的K线:
ama[1]引用的是前一根K线中被:=赋值后的最终ama值,自然不是你一开始声明的0。
- 第一根K线:
你调试代码里的txt = tostring(ama[1]),在第二根K线之后获取的都是前一根K线的计算结果,所以显示非零值。
如果要验证第一根K线的情况,可以修改调试代码,区分不同K线的ama[1]状态:
//@version=4 study("Trend Regularity Adaptive Moving Average","TRAMA",overlay=true) length=input(99),src = input(close) //---- ama = 0. //debugging part // 明确区分第一根K线和后续K线的ama[1]值 txt = bar_index == 0 ? "ama[1] = na" : tostring(ama[1]) x = bar_index y = src //end of debugging part label.new(x, y, txt, color=color.white, textcolor=color.black) hh = max(sign(change(highest(length))),0) ll = max(sign(change(lowest(length))*-1),0) tc = pow(sma(hh or ll ? 1 : 0,length),2) ama := nz(ama[1]+tc*(src-ama[1]),src) plot(ama,"Plot",#ff1100,2)
运行这段代码你会看到:第一根K线的ama[1]显示为na,从第二根开始,ama[1]就是前一根K线计算出的ama值。
内容的提问来源于stack exchange,提问作者JayK23
相关产品推荐
相关产品推荐

