You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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线顺序计算的:
    1. 第一根K线:ama[1]不存在(没有前一根K线数据),所以nz()会触发默认值src,此时ama最终被赋值为当前收盘价,而非初始的0。
    2. 第二根及以后的K线:ama[1]引用的是前一根K线中被:=赋值后的最终ama值,自然不是你一开始声明的0。

你调试代码里的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 11:05:18