Pine Script跨时间帧绘图security调用可变/全局变量报错问询
Pine Script跨时间帧信号绘制错误解决方法
错误原因
- 首次报错是因为
security/request.security函数无法直接引用外部作用域的可变变量,要求传入的计算逻辑必须可在目标时间帧独立执行。 - 第二次报错是因为你在自定义函数内部使用
:=修改全局变量rwCross,Pine Script不允许函数内部修改全局作用域的变量,函数结果需通过返回值传递。
解决代码
首先将判断逻辑封装为无副作用的纯函数,直接返回布尔值,不修改任何外部变量:
// 计算rwCross信号的纯函数,条件满足返回true,否则返回false rwCross_func() => crossover(s3K,s3D) and s3K<25 and (s4K-s4D<3 and s4K-s4D>-3) and s4K<35
然后根据你的实际需求调用安全函数:
场景1:脚本加载在15分钟图,显示日线级别计算的该信号
// Pine Script v4写法 rwCrossDaily = security(syminfo.tickerid, 'D', rwCross_func(), barmerge.lookahead_off) // Pine Script v5写法 // rwCrossDaily = request.security(syminfo.tickerid, 'D', rwCross_func(), barmerge.lookahead_off) plotshape(rwCrossDaily, style = shape.arrowup, location = location.belowbar, color=color.yellow, size=size.small)
场景2:脚本加载在日线图,显示15分钟级别计算的该信号
// Pine Script v4写法 rwCrossDaily = security(syminfo.tickerid, '15', rwCross_func(), barmerge.lookahead_off) // Pine Script v5写法 // rwCrossDaily = request.security(syminfo.tickerid, '15', rwCross_func(), barmerge.lookahead_off) plotshape(rwCrossDaily, style = shape.arrowup, location = location.belowbar, color=color.yellow, size=size.small)
注意事项
- 代码中的
s3K、s3D、s4K、s4D等指标变量,需确保在函数作用域内可正常访问,或直接把这些指标的计算逻辑也移入rwCross_func内部,避免跨作用域变量错误。 - 末尾添加
barmerge.lookahead_off参数是为了避免未来函数导致的信号重绘问题,符合实盘使用要求。
内容的提问来源于stack exchange,提问作者HukaBee89
相关产品推荐
相关产品推荐

