Pine Script报错:未声明标识符及plot无法在局部作用域调用问题
解决Pine Script变量作用域与plot调用问题
问题根源
- 变量作用域限制:在
if/else分支内声明的变量属于局部变量,外部的plot()函数无法访问,导致undeclared identifier错误。 - plot函数的作用域要求:
plot()只能在全局作用域调用,不能放在if/else等局部代码块内,否则触发cannot use plot in local scope错误。
解决方案
提前在全局作用域初始化B1和Q1变量,后续仅在if/else分支内更新变量值,最后在全局作用域调用plot()。
修改后的代码示例
indicator(title='Ultimate Bifröst', shorttitle='Ultimate Bifröst') // Choose base and quote currency base = input.string("USD",title="Base CURRENCY", options=["USD","EUR","GBP","AUD","NZD","CHF","CAD"]) quote = input.string("JPY",title="Quote CURRENCY", options=["USD","JPY","GBP","AUD","NZD","CHF","CAD"]) // Add the inputs l = input.int(title='Length', defval=20, minval=5) // dollar group UJ = input.symbol(title='USDJPY', defval='FX:usdjpy') UCA = input.symbol(title='USDCAD', defval='FX:usdcad') s_UJ = request.security(UJ, timeframe.period, close) s_UCA = request.security(UCA, timeframe.period, close) // 全局初始化变量,避免未声明错误 B1 = na Q1 = na if base == "USD" and quote == "JPY" B1 = ta.correlation(close, s_UJ, l)*0.25 Q1 = ta.correlation(close, s_UCA, l)*0.25 else if base == "USD" and quote == "GBP" B1 = ta.correlation(close, s_UJ, l)*0.5 Q1 = ta.correlation(close, s_UCA, l)*0.5 // 补充其他base/quote组合的赋值逻辑... // 全局作用域调用plot,符合Pine Script规则 plot(B1, color=color.new(#9C27B0, 0), title='B1') plot(Q1, color=color.new(#673AB7, 0), title='Q1')
关键说明
- 全局初始化
B1 = na和Q1 = na确保变量在整个脚本中可见,即使部分分支未覆盖到,也不会出现未声明问题。 - 所有
if/else分支仅对已初始化的变量赋值,而非重新声明。 plot()始终放在全局作用域,满足Pine Script的函数调用规则。
内容的提问来源于stack exchange,提问作者T K
相关产品推荐
相关产品推荐

