使用变量作为line.new的x坐标参数绘制线条时报错如何解决
自定义变量作为line.new的x坐标报错的解决方法
错误原因
Pine Script中line.new()的x1、x2参数仅支持两类合法输入:
- 整数类型的K线索引(即
ta.bar_index的返回值) - 时间戳类型的K线时间(即
time的返回值)
你用来识别收盘价位于EMA下方吞没形态的变量为布尔类型,值仅为true/false,和参数要求的类型不匹配,因此触发报错。
解决步骤
- 首先确保你的形态识别逻辑正确,形态成立时返回
true - 在形态成立的条件分支内调用
line.new(),直接取当前K线的bar_index作为x坐标即可,无需额外做类型转换 - 如果需要后续复用形态触发时的坐标,可声明
var类型变量存储触发时的bar_index值
示例代码
//@version=5 indicator("吞没形态画线示例", overlay=true) // 计算20周期EMA ema_val = ta.ema(close, 20) // 识别EMA下方的看跌吞没形态 bearish_engulfing = close < open[1] and open > close[1] and close[1] < open[1] and close < ema_val // 形态成立时画线 if bearish_engulfing // 取当前K线索引为x1,向后延伸5根K线画水平线 line.new(x1=bar_index, y1=high, x2=bar_index + 5, y2=high, color=color.red, width=2) // 绘制EMA线 plot(ema_val, color=color.blue, title="EMA20")
优化提示
如果需要减少内存占用,避免每次触发形态都新建线条,可以声明var类型的line变量,每次形态触发时更新已有线条的坐标即可:
var line pattern_line = na if bearish_engulfing if na(pattern_line) pattern_line := line.new(x1=bar_index, y1=high, x2=bar_index + 5, y2=high, color=color.red, width=2) else line.set_xy1(pattern_line, bar_index, high) line.set_xy2(pattern_line, bar_index + 5, high)
内容的提问来源于stack exchange,提问作者stefano introini
相关产品推荐
相关产品推荐

