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

如何在PineScript中跨时间周期调用Awesome Oscillator指标

跨周期调用Awesome Oscillator(AO)指标的PineScript实现

核心解决方案

要实现跨周期调用AO,关键是把AO的计算逻辑完整传入request.security()函数,而非先在当前周期计算再传入。以下是两种可行的实现方式:

写法1:直接在security内计算AO

//@version=5
indicator("跨周期AO指标", overlay=false)

// 输入参数
fastAo = input.int(12, minval=1, title="Fast AO")
slowAo = input.int(57, minval=1, title="Slow AO")
targetTF = input.timeframe("60", title="目标时间周期") // 示例为1小时周期

// 跨周期获取目标时间维度的AO值
aoHigherTF = request.security(syminfo.tickerid, targetTF, ta.sma(ta.hl2, fastAo) - ta.sma(ta.hl2, slowAo))

// 绘制当前周期与跨周期AO
aoCurrentTF = ta.sma(ta.hl2, fastAo) - ta.sma(ta.hl2, slowAo)
plot(aoCurrentTF, color=color.blue, title="当前周期AO")
plot(aoHigherTF, color=color.red, title="跨周期AO", linewidth=2)

写法2:封装成函数,提升代码可读性

将AO计算逻辑封装为独立函数,再在request.security()中调用,结构更清晰:

//@version=5
indicator("跨周期AO指标(函数封装版)", overlay=false)

// 封装AO计算函数
getAO(fastLen, slowLen) =>
    ta.sma(ta.hl2, fastLen) - ta.sma(ta.hl2, slowLen)

// 输入参数
fastAo = input.int(12, minval=1, title="Fast AO")
slowAo = input.int(57, minval=1, title="Slow AO")
targetTF = input.timeframe("60", title="目标时间周期")

// 跨周期获取AO值
aoHigherTF = request.security(syminfo.tickerid, targetTF, getAO(fastAo, slowAo))

// 绘制指标
aoCurrentTF = getAO(fastAo, slowAo)
plot(aoCurrentTF, color=color.blue, title="当前周期AO")
plot(aoHigherTF, color=color.red, title="跨周期AO", linewidth=2)

关键注意事项

  • 禁止先在当前周期计算AO再传入security():该函数的第三个参数是要在目标周期执行的表达式,如果传入当前周期已计算好的AO值,得到的只是当前周期值在目标周期的重复,并非目标周期真正计算的结果。
  • 时间周期格式:支持数字(如60代表1小时)或字符串(如"D"代表日线、"W"代表周线),使用input.timeframe()可让用户直观选择周期。
  • 规避未来函数风险:若不需要提前获取目标周期未闭合K线的数据,可添加barmerge.lookahead_on=false参数,示例:
    aoHigherTF = request.security(syminfo.tickerid, targetTF, getAO(fastAo, slowAo), barmerge.lookahead_on=false)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:32:11