Pine Script中xloc.bar_time类型趋势线获取当前价格报错如何解决
问题根因
你代码中已经显式指定了xloc = xloc.bar_index,触发报错的核心原因是调用line.get_price时传入的线ID无效(为na):
- 只有
trend_s1_line_extend为true且sm_bag_ready为true时,s1_first_line2才会存储有效线ID,其余场景下该变量值为na,直接调用line.get_price就会触发参数校验错误。 - 另外如果没有做旧线清理逻辑,重复创建趋势线会导致变量存储的线ID混乱,也可能引发同类报错。
解决方案
按以下步骤修改代码即可正常获取趋势线当前价格:
- 调用
line.get_price前先判断线ID是否有效,仅有效时执行取值逻辑 - 新增旧线清理逻辑,避免同一趋势线重复创建
- 把线ID声明为
var类型,减少重复初始化的异常
修改后代码示例
// 声明线ID为var类型,保留历史赋值 var line s1_first_line2 = na // 先删除旧线,再创建新线,避免重复生成 if trend_s1_line_extend and sm_bag_ready line.delete(s1_first_line2) s1_first_line2 := line.new( s1T_fx, s1T_fy, s1T_tx, s1T_ty, extend = extend.right, xloc = xloc.bar_time, color = trend_s1_use_colors == false ? trend_s1_color_default : (sTriDir == 1) ? trend_s1_line_color_up : trend_s1_line_color_dn, style = trend_s1_xline_style, width = trend_s1_xline_width) else s1_first_line2 := na // 仅线ID有效时调用get_price,避免报错 currentLineValue = na if not na(s1_first_line2) currentLineValue := line.get_price(s1_first_line2, bar_index)
内容的提问来源于stack exchange,提问作者Prometheus
相关产品推荐
相关产品推荐

