如何让Pine Script中不同时间周期显示一致的ADR数值?
问题解决思路及修正代码
问题根源
原代码的核心问题是SMA计算的周期上下文错误:你先把日线的high和low拉取到当前脚本运行的周期(比如周线),再在这个大周期上计算SMA。这导致周线周期下计算的是20个周K线对应的日线比值的平均值,而非20个日线K线的比值平均值,最终不同周期的ADR结果自然不一致。
修正代码
把ADR的完整计算逻辑放在request.security的第三个参数中,让所有计算都在日线周期上下文内完成:
Length = 20 ADR = request.security(syminfo.tickerid, "1D", 100 * (ta.sma(high/low, Length) - 1))
代码说明
request.security(syminfo.tickerid, "1D", ...)会临时切换到日线周期执行括号内的计算逻辑- 在日线周期内,
ta.sma(high/low, Length)直接计算20个日线K线的high/low比值的简单移动平均 - 计算完成后,该结果会被返回给当前脚本运行的任何周期(日线、周线、小时线等),因此所有周期显示的ADR值完全一致
内容的提问来源于stack exchange,提问作者geleone
相关产品推荐
相关产品推荐

