Pine Script如何让if语句内声明的变量可全局使用
Pine Script if块内var变量全局调用解决方案
核心原因:Pine Script采用块级作用域规则,在if、for等代码块内部声明的变量即使带有var修饰,也仅在块内部生效,外部无法直接访问,要实现全局调用按以下操作:
- 先在if语句外部的全局作用域提前声明变量,需要var持久化特性时,声明阶段直接添加var修饰符,可先赋值为默认值
na - 在if语句内部使用
:=赋值运算符给提前声明的全局变量赋值,不要在块内再次用var或=声明同名变量 - 完成赋值后即可在脚本任意位置调用该全局变量
代码示例
错误写法
//@version=5 indicator("错误示例", overlay=true) if close > open var bullCount = 0 bullCount += 1 plot(bullCount) // 此处报错:未定义变量bullCount
正确写法
//@version=5 indicator("正确示例", overlay=true) // 全局作用域提前声明带var的变量 var bullCount = 0 if close > open // 块内直接赋值,不需要再加var bullCount := bullCount + 1 plot(bullCount) // 可正常调用
注意:如果声明变量时不带var修饰,变量会在每根K线计算时重置为初始值;带var修饰的变量仅在脚本首次加载时初始化1次,值会跨K线持久保留直到被重新赋值。
内容的提问来源于stack exchange,提问作者Adam B
相关产品推荐
相关产品推荐

