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

为何Pine Script内置atr函数表现与文档公式不一致?

Pine Script内置ATR函数与手动复现结果差异的原因

核心问题:混淆了TR与ATR的定义

内置atr()函数返回的是真实波幅(TR)序列的RMA(相对移动平均)值,而你手动计算的只是单根K线的TR值,两者完全不是同一个指标:

  • 真实波幅(TR):单根K线的瞬时波动幅度,公式为max(high - low, abs(high - close[1]), abs(low - close[1])),每根K线都对应一个独立的TR值
  • ATR:是对TR序列进行指定周期(你用的是22期)的RMA平滑后的结果,反映的是一段周期内的平均波动水平

你的代码错误点

  1. 第一段代码中使用high[length]等偏移量,相当于取了22根K线之前的单根TR值,和当前周期的ATR(22期平均波动)没有可比性
  2. 第二段代码去掉偏移后,得到的是当前K线的TR值,这只是ATR计算的第一步,没有完成后续的RMA平滑步骤,因此和内置atr()的结果必然差异极大

正确的手动复现代码

要完全复现内置atr()的结果,需要先计算每根K线的TR序列,再对该序列做RMA计算:

length = input(title="ATR Period", type=input.integer, defval=22)
// 计算每根K线的真实波幅TR
tr = max(high - low, abs(high - close[1]), abs(low - close[1]))
// 对TR序列执行RMA平滑,得到手动复现的ATR
atr_manual = ta.rma(tr, length)
// 对比内置ATR与手动复现结果
plot(atr(length), color=color.blue, title="内置ATR")
plot(atr_manual, color=color.red, title="手动复现ATR", style=plot.style_circles)

运行这段代码后,两个指标曲线会完全重合,说明复现正确

内容的提问来源于stack exchange,提问作者stas stas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 00:07:24