触发crossUp_red条件时绘制水平线失败的求助(Pine Script v4)
在Pine Script中触发crossUp_red时绘制水平线的解决方案
问题根源
hline()报错原因:hline()函数仅支持固定的数值输入(input float),无法接收随K线动态变化的序列值(series[float]),而valuewhen()返回的是序列值,因此直接传入会触发类型不匹配错误。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
相关产品推荐
相关产品推荐

