为何Pine Script中SmoothedTrueRange先声明再立即重赋值?
关于Pine Script v4中ADX指标SmoothedTrueRange赋值方式的疑问解答
核心原因:初始化逻辑的兼容性与可读性
- 贴合经典指标的计算流程
传统ADX的平滑真实波幅计算逻辑里,原本就有“先初始化初始值为0,再逐步迭代更新”的步骤。拆分写法完全还原了这个经典流程,让熟悉技术指标底层逻辑的开发者能快速对应上代码和指标定义,减少理解成本。 - 清晰区分初始化与更新步骤
虽然不加var的变量会在每根K线重新声明,但先赋值0.0再用:=重赋值的写法,能明确把“初始化”和“迭代更新”两个环节分开。如果后续需要针对特殊K线(比如第一根K线、跳空K线)做额外逻辑调整,这种结构会更容易修改维护。 - 对齐官方示例的编码风格
TradingView官方的ADX参考代码就采用这种写法,本质是为了和官方示例的编码习惯保持一致,避免开发者在对比官方代码时产生困惑。
- 贴合经典指标的计算流程
两种写法的功能一致性
实际测试就能发现:直接用单行SmoothedTrueRange = nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange计算,和拆分写法的输出结果完全相同。两种写法在功能上没有区别,拆分写法更多是出于可读性、逻辑还原的考虑。
内容的提问来源于stack exchange,提问作者dharmatech
相关产品推荐
相关产品推荐

