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

如何在Pine Script中检测价格穿越自定义绘制的基准线?

如何在Pine Script中检测价格穿越自定义基准线?

问题场景

我在Pine Script中绘制了一条基准线:

baseLine := line.new(x1, y1, x2, y2, width=1, extend=extendStyle, color=color.new(colorLower, 0))

想要检测价格是否穿越这条基准线,尝试使用以下代码:

isCrossed = ta.crossover(high, baseline)

但运行后出现错误:

Cannot call 'ta.crossover' with argument 'source2'='baseline'. An argument of 'series line' type was used but a 'series float' is expected.

错误原因

line.new()创建的是绘图用的线段对象,并非代表价格数值的序列(series float)。而ta.crossover()要求两个参数都是浮点数序列(比如价格K线、均线这类数值序列),直接传入线段对象会导致类型不匹配。

解决方案

根据基准线的生成逻辑,有两种正确实现方式:

方式一:直接使用基准线的数值序列(优先推荐)

如果你的基准线是通过公式计算出来的数值序列(比如固定价格、动态均线类数值),直接用这个数值序列替代线段对象做检测即可。例如:

// 示例:假设基准线是固定价格3000,或是根据逻辑计算出的动态数值
baseValue = 3000
// 检测价格穿越基准线
isCrossed = ta.crossover(high, baseValue)

方式二:获取线段对象对应位置的数值

如果基准线是基于特定坐标绘制的线段(比如手动定位的线段),可以通过line.get_y()方法获取当前K线位置对应的基准线y轴数值,再进行穿越检测:

// 创建基准线(建议用var避免重复创建)
var line baseLine = line.new(x1, y1, x2, y2, width=1, extend=extendStyle, color=color.new(colorLower, 0))
// 获取当前K线位置的基准线数值
baseValue = line.get_y(baseLine, bar_index)
// 检测价格穿越
isCrossed = ta.crossover(high, baseValue)

注意事项

  • 如果基准线未延伸到当前K线位置,line.get_y()会返回na,需要用ta.isna()做判断处理;
  • 避免在每个K线周期都创建新的线段对象,建议用var关键字初始化线段,仅在需要更新时修改线段属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 23:30:02