TradingView Pine Script v5版ADR指标信号延迟1天问题求助
解决Pine Script v5 ADR指标延迟1天的问题
问题出在哪
- 原代码用
request.security获取日级别数据时,未配置barmerge.lookahead_on参数,无法实时同步当日的日数据更新,导致指标延迟一天。 - 手动逐个提取10天历史波动范围的写法不仅冗余,还容易因索引逻辑混乱导致数据偏差。
修改后的完整代码
//@version=5 indicator(title="CDsGam", shorttitle="CDss", overlay=true) // 实时获取日级别开盘、最高、最低价,开启前瞻合并同步当日数据 [daily_open, daily_high, daily_low] = request.security(syminfo.tickerid, 'D', [open, high, low], barmerge.lookahead_on) // 构建10天波动范围数组:包含当日实时波动+过去9天历史波动 day_ranges = array.new_float(10) // 先加入当天的实时波动范围 array.push(day_ranges, daily_high - daily_low) // 循环添加过去9天的波动范围 for i = 1 to 9 array.push(day_ranges, request.security(syminfo.tickerid, 'D', high[i] - low[i], barmerge.lookahead_on)) // 计算不同周期的ADR值 adr_10 = array.avg(day_ranges) // 取数组前5个元素(当日+过去4天)计算ADR5 adr_5 = array.avg(array.slice(day_ranges, 0, 5)) // 计算ADR上下轨 adr_high_10 = daily_open + (adr_10 / 2) adr_low_10 = daily_open - (adr_10 / 2) adr_high_5 = daily_open + (adr_5 / 2) adr_low_5 = daily_open - (adr_5 / 2) // 绘图(修正原代码拼写错误:circlescles改为circles) p1 = plot(adr_high_10, title="ADR High10", style=plot.style_circles, color=color.red, linewidth=2) p2 = plot(adr_low_10, title="ADR LOW10", style=plot.style_circles, color=color.green, linewidth=2) p3 = plot(adr_high_5, title="ADR High5", style=plot.style_circles, color=color.red, linewidth=2) p4 = plot(adr_low_5, title="ADR LOW5", style=plot.style_circles, color=color.green, linewidth=2) // 填充区间 fill(p1, p3, color=color.new(color.red, 90)) fill(p2, p4, color=color.new(color.green, 90))
核心修改点
- 给
request.security添加barmerge.lookahead_on参数,让指标能实时获取当日的日级别数据,彻底解决延迟问题。 - 用数组整合10天波动范围,将当日实时波动纳入计算,ADR值能跟随当日行情实时更新。
- 修正原代码中的拼写错误
plot.style_circlescles,改为正确的plot.style_circles,避免绘图异常。 - 改用数组函数简化ADR计算逻辑,代码更简洁且不易出错。
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

