You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pine Script报错:未声明标识符及plot无法在局部作用域调用问题

解决Pine Script变量作用域与plot调用问题

问题根源

  1. 变量作用域限制:在if/else分支内声明的变量属于局部变量,外部的plot()函数无法访问,导致undeclared identifier错误。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 13:40:40