如何在多个study(指标)与strategy之间传递共享全局变量
需求可行性说明
该需求可通过以下两种成熟方案实现,适配Pine Script的官方规则限制:
方案1:整合多指标逻辑到单个study对外输出
利用strategy最多可引用1个study的规则,把所有需要用到的跨study全局变量的计算逻辑,全部整合到同一个自定义study中,所有需要传递给strategy的变量都通过plot()函数输出,不需要可视化的变量可设置为隐藏状态。
- 整合study示例代码:
//@version=5 indicator("多指标变量整合容器", overlay=false) // 原第一个study的计算逻辑,输出全局变量ma5 ma5 = ta.sma(close, 5) // 原第二个study的计算逻辑,输出全局变量rsi14 rsi14 = ta.rsi(close, 14) // 原第三个study的计算逻辑,输出全局变量atr14 atr14 = ta.atr(14) // 对外输出所有全局变量,display.none表示不在K线图上显示 plot(ma5, title="ma5", display=display.none) plot(rsi14, title="rsi14", display=display.none) plot(atr14, title="atr14", display=display.none)
- strategy调用变量示例代码:
//@version=5 strategy("跨指标变量调用策略", overlay=true) // 分别定义输入源关联整合study的三个输出变量 input_ma5 = input.source(close, title="关联ma5变量") input_rsi14 = input.source(close, title="关联rsi14变量") input_atr14 = input.source(close, title="关联atr14变量") // 策略内直接调用变量即可 if ta.crossover(close, input_ma5) and input_rsi14 < 30 strategy.entry("多单", strategy.long)
操作提示:将整合study添加到K线图表后,打开strategy的参数设置面板,把三个input.source的取值分别选为整合study对应的三个plot输出项即可完成变量传递。
方案2:全逻辑合并到strategy脚本内
如果不需要单独维护多个独立study的可视化效果,直接把所有study的计算逻辑迁移到strategy脚本内部,用var关键字声明的变量就是全局持久化变量,可在整个策略脚本的任意位置调用,性能比跨脚本引用更高,不会出现周期匹配偏差问题。
- 示例代码:
//@version=5 strategy("单脚本整合逻辑策略", overlay=true) // 全局变量声明 var float ma5 = na var float rsi14 = na var float atr14 = na // 原多study的计算逻辑直接在策略内实现 ma5 := ta.sma(close,5) rsi14 := ta.rsi(close,14) atr14 := ta.atr(14) // 策略逻辑直接调用变量 if ta.crossunder(close, ma5) and rsi14 > 70 strategy.entry("空单", strategy.short)
注意事项
- 官方暂不支持strategy同时引用多个独立study,所以无法直接在不整合逻辑的前提下跨多个独立study传递变量
- 跨脚本引用时要保证study和strategy的运行时间周期完全一致,避免取值错误
- 不要在整合study中输出冗余变量,避免增加不必要的计算开销
内容的提问来源于stack exchange,提问作者Jimmy
相关产品推荐
相关产品推荐

