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

如何让日线与低时间周期图表的ADR计算结果一致?

跨周期ADR计算结果不一致的解决方法

问题描述

编写了一个TradingView指标,使用ADR变量计算,但日线图表与5分钟等低时间周期图表的ADR计算结果不一致。右侧数据窗口显示daily_range数组在不同周期取值不同,但绘制的高低点线条取值正确,需要实现跨周期ADR计算结果一致。

问题原因

当前代码中,daily_range是通过跨周期获取日线高低点后在当前周期计算,再用ta.sma()计算10日均值。但在低时间周期(如5分钟)中,每个K线都会重复获取当日的daily_range值,导致ta.sma()计算时会将同一个交易日的区间值多次纳入样本,而日线周期中每个K线仅对应一个交易日的区间值,两者的SMA计算样本逻辑不同,最终结果不一致。

解决方案

将ADR的完整计算逻辑(包括daily_range的均值计算)放在日线周期内完成,通过request.security()直接请求日线周期上计算好的10日ADR值,而非在当前周期计算均值。这样无论当前使用什么时间周期,获取的都是统一的日线周期计算结果,保证跨周期一致性。

修正后的完整代码

//@version=5
indicator("ADR-TEST", shorttitle="ADR-Test")

ticker_D = ticker.new(syminfo.prefix, syminfo.ticker, session.regular)

// 直接在日线周期内完成daily_range的计算和SMA均值
adr = request.security(ticker_D, 'D', ta.sma(high - low, 10))
// 同时获取日线高低点用于绘制
[day_high, day_low] = request.security(ticker_D, 'D', [high, low])

// 调试用输出
plot(adr, "adr", display = display.data_window)
// 获取历史日线区间值用于验证
daily_range = day_high - day_low
plot(daily_range, "daily_range", display = display.data_window)
plot(daily_range[1], "daily_range1", display = display.data_window)
plot(daily_range[2], "daily_range2", display = display.data_window)
plot(daily_range[3], "daily_range3", display = display.data_window)
plot(daily_range[4], "daily_range4", display = display.data_window)
plot(daily_range[5], "daily_range5", display = display.data_window)

// 高低点绘制代码
highLine = line.new(bar_index - 1, day_high, bar_index, day_high, extend = extend.both, color = color.green)
lowLine = line.new(bar_index - 1, day_low, bar_index, day_low, extend = extend.both, color = color.green)
highLine1 = line.new(bar_index - 1, day_high[1], bar_index, day_high[1], extend = extend.both, color = color.red)
lowLine1 = line.new(bar_index - 1, day_low[1], bar_index, day_low[1], extend = extend.both, color = color.red)
highLine2 = line.new(bar_index - 1, day_high[2], bar_index, day_high[2], extend = extend.both, color = color.rgb(0, 255, 255))
lowLine2 = line.new(bar_index - 1, day_low[2], bar_index, day_low[2], extend = extend.both, color = color.rgb(0, 255, 255))

// 删除旧线条
line.delete(highLine[1])
line.delete(highLine1[1])
line.delete(lowLine[1])
line.delete(lowLine1[1])
line.delete(highLine2[1])
line.delete(lowLine2[1])

说明

  • 核心修改:将ta.sma(daily_range, 10)的计算逻辑移入request.security()的日线周期请求中,确保均值计算完全基于日线级别的单条K线数据,避免低周期重复值干扰。
  • 高低点绘制逻辑保持不变,依然可以正确显示不同交易日的高低水平线。
  • 调试用的daily_range输出仍可正常查看,且跨周期取值会保持一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 19:25:16