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

触发crossUp_red条件时绘制水平线失败的求助(Pine Script v4)

在Pine Script中触发crossUp_red时绘制水平线的解决方案

问题根源

  1. hline()报错原因:hline()函数仅支持固定的数值输入(input float),无法接收随K线动态变化的序列值(series[float]),而valuewhen()返回的是序列值,因此直接传入会触发类型不匹配错误。
  2. plot()线条堆积底部原因:valuewhen(crossUp_red, close, 0)仅在crossUp_red触发的K线返回对应价格,其余K线返回na,导致大部分时段无有效价格显示,视觉上呈现堆积在底部的效果。

解决方案1:显示最近一次触发的水平线

通过var变量保存触发价格,确保非触发时段保留上一次的价格值,再用plot()绘制贯穿图表的水平线:

// 假设你已定义crossUp_red条件
// crossUp_red = ...

// 初始化变量,仅在脚本启动时赋值一次
var float trigger_price = na

// 触发条件满足时更新价格,否则保留原有值
trigger_price := crossUp_red ? close : trigger_price

// 绘制水平线,trackprice确保线条持续显示在对应价格水平
plot(trigger_price, title="line_crossUp_red", color=color.green, linewidth=2, transp=0, trackprice=true)

// 保留你原有的箭头绘制代码
plotshape(crossUp_red ? rvi : na, title="Up Arrow", style=shape.arrowup, location=location.abovebar, color=#109c3f, size=size.small, text="crossUp_red")

解决方案2:显示所有触发点的水平线

如果需要保留每一次crossUp_red触发的水平线,使用line.new()动态创建线条:

// 假设你已定义crossUp_red条件
// crossUp_red = ...

// 每次触发时创建新水平线
if crossUp_red
    // 创建从当前K线左侧延伸至右侧的水平线,可调整x2值控制线条长度
    line.new(bar_index - 1, close, bar_index + 100, close, color=color.green, width=2, style=line.style_dotted)

// 保留你原有的箭头绘制代码
plotshape(crossUp_red ? rvi : na, title="Up Arrow", style=shape.arrowup, location=location.abovebar, color=#109c3f, size=size.small, text="crossUp_red")
  • 若需避免线条过多,可搭配line.delete()删除旧线条,比如只保留最近5条触发线。

内容的提问来源于stack exchange,提问作者metokitt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:03:16