Pinescript编译错误求助:NA类型值无法赋值给无类型定义变量
解决Pine Script编译错误:NA类型无法赋值给未定义类型的变量
错误原因
在Pine Script v4中,未通过类型关键字(如float、var)声明的变量,系统会根据首次赋值自动推断其类型。你代码里的up、down变量首次被赋值为K线价格(high/low,属于float类型),后续又赋值na,类型不匹配触发了编译错误。
修改方案
显式声明up和down为float类型,允许它们接受na值;同时优化原代码中的循环逻辑(Pine Script更适合矢量化操作,逐bar循环会降低性能)。
修改后的完整代码
//@version=4 study("犹豫平滑EMA", overlay=true) // 输入参数 length = input(14, minval=1, title="周期") hesitation = input(0.5, minval=0, maxval=1, title="犹豫阈值") // 带犹豫平滑的指数移动平均线 hesitation_ema = ema(close, length) smoothed_ema = 0.0 smoothed_ema := na(hesitation_ema[1]) ? hesitation_ema : hesitation_ema[1] for i = 2 to bar_index if abs(hesitation_ema[i] - hesitation_ema[i-1]) > hesitation * (high[i] - low[i]) smoothed_ema := nz(hesitation_ema[i]) else smoothed_ema := nz(smoothed_ema[1]) plot(smoothed_ema, color=color.red, linewidth=1, title="犹豫平滑EMA") // 绘制无犹豫平滑时的EMA趋势箭头 // 显式声明变量类型,允许赋值NA float up = na float down = na // 用矢量化判断替代循环,提升性能 ema_trend = hesitation_ema > hesitation_ema[1] up := ema_trend ? high : na down := not ema_trend and hesitation_ema < hesitation_ema[1] ? low : na plotarrow(up, down, offset=-length)
关键修改说明
- 箭头部分开头添加
float up = na、float down = na,明确变量类型,解决NA赋值的类型冲突问题 - 将原箭头部分的逐bar循环替换为矢量化判断,更符合Pine Script的设计逻辑,同时提升指标运行效率
内容的提问来源于stack exchange,提问作者Karabo Gerald
相关产品推荐
相关产品推荐

