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

PineScript条件安全请求问题:如何让ADR/ADRD在全时间帧正常显示?

PineScript 多时间帧 ADR 显示问题解决方案

问题根源

你的代码存在两个核心问题:

  1. 类型冲突报错:ADR 被定义为 float[] 数组类型,但在低于日线时间帧时赋值为单浮点类型的 na,导致类型不匹配触发报错。
  2. 数值异常跳变:高于日线时间帧时,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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 23:47:48