Pine Script修复plot局部作用域报错 实现30EMA连续K线计数条件绘图
报错原因
Pine Script语法明确要求plot、hline这类绘图函数必须在全局作用域调用,不能放在if分支的局部作用域内,这是触发“Cannot use plot in local scope”报错的直接原因。
修复方案
按条件绘制不同序列的需求,可以通过预先处理绘制序列的方式实现:先分别计算两种状态下的连续天数,不符合对应状态的K线位置设置为na(代表该位置不绘制),最后在全局作用域调用plot即可。
完整可运行代码
indicator("LandryLight") ema30 = ta.ema(close,30) bardown = high < ema30 barup = low > ema30 // 提前计算两种状态的绘制序列,不符合条件的位置设为na up_series = barup ? ta.barssince(barup)*-1 : na down_series = bardown ? ta.barssince(bardown) : na // 全局调用plot绘图 plot(series=up_series, title="连续高于30EMA天数", color=color.red, style=plot.style_histogram, linewidth=2) plot(series=down_series, title="连续低于30EMA天数", color=color.green, style=plot.style_histogram, linewidth=2) hline(10,title="阈值", color=color.white, linestyle=hline.style_dashed, linewidth=1)
效果说明
- 当K线最低价高于30EMA时,绘制红色向下柱形,数值绝对值代表连续符合条件的天数
- 当K线最高价低于30EMA时,绘制绿色向上柱形,数值代表连续符合条件的天数
- 不满足以上两种条件的K线位置不会显示柱形
内容的提问来源于stack exchange,提问作者Jerry Edwards
相关产品推荐
相关产品推荐

