如何在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
相关产品推荐
相关产品推荐

