PineScript条件安全请求问题:如何让ADR/ADRD在全时间帧正常显示?
PineScript 多时间帧 ADR 显示问题解决方案
问题根源
你的代码存在两个核心问题:
- 类型冲突报错:
ADR被定义为float[]数组类型,但在低于日线时间帧时赋值为单浮点类型的na,导致类型不匹配触发报错。 - 数值异常跳变:高于日线时间帧时,
ADRD通过request.security获取单一日线K线的数值,当日线数据更新时会出现跳变;同时ADR使用request.security_lower_tf返回数组,未做处理直接显示会导致数值异常波动。
修正代码
//@version=5 indicator("ADR 多时间帧适配", overlay=false) // 基础 avgDailyRange 计算(示例用ATR(14),可替换为你的自定义逻辑) avgDailyRange = ta.atr(14) // 判断当前时间帧是否高于日线 isHigherThanDaily = timeframe.in_seconds() > timeframe.in_seconds("D") // 日线及以下时间帧使用的 ADRD:获取最新日线级别的 avgDailyRange ADRD = request.security(syminfo.tickerid, "D", avgDailyRange) // 高于日线时间帧使用的 ADR:计算当前大周期内所有日线 avgDailyRange 的平均值 ADR = na if isHigherThanDaily float[] adrLowerTFArray = request.security_lower_tf(syminfo.tickerid, "1D", avgDailyRange) ADR = array.size(adrLowerTFArray) > 0 ? array.avg(adrLowerTFArray) : na // 最终输出值:根据时间帧自动切换 finalADR = isHigherThanDaily ? ADR : ADRD // 绘制显示 plot(finalADR, color=color.blue, title="ADR/ADRD", linewidth=2)
优化说明
- 类型统一:通过条件判断延迟数组定义,避免跨类型赋值冲突,解决低于日线时间帧的报错问题。
- 逻辑适配:高于日线时间帧时,计算当前大周期内所有日线数据的平均值,替代单一日线数据的跳变;日线及以下时间帧直接取最新日线的 avgDailyRange。
- 单一输出:仅显示适配后的
finalADR,避免多变量显示导致的混乱。
内容的提问来源于stack exchange,提问作者geleone
相关产品推荐
相关产品推荐

