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

如何在每一次EMA交叉位置绘制水平射线(hray)?

问题分析与代码修正

原代码无法实现需求的核心原因是:hline() 是全局绘图函数,不允许在条件语句(if)内调用。它会在整个图表周期内固定显示一条水平线,无法根据交叉事件动态创建多条射线。

要实现“每次EMA金叉时绘制水平射线”的需求,需要使用Pine Script的动态线条函数 line.new(),它支持在特定条件下创建独立的线条对象。

修正后的代码

//@version=4
study("EMA交叉水平射线", overlay=true)

// 定义5和13周期EMA
ema5 = ema(close, 5)
ema13 = ema(close, 13)

// 检测EMA5上穿EMA13的金叉信号
crossUp = crossover(ema5, ema13)
// 可选:检测死叉信号,如需绘制死叉射线可启用
crossDown = crossunder(ema5, ema13)

// 金叉时绘制红色水平射线
if crossUp
    // 创建从交叉K线开始,向右无限延伸的水平射线
    line.new(bar_index, ema5[1], bar_index + 10000, ema5[1], 
             color=color.red, linewidth=2, title="EMA金叉射线")

// 可选:死叉时绘制绿色水平射线
if crossDown
    line.new(bar_index, ema5[1], bar_index + 10000, ema5[1], 
             color=color.green, linewidth=2, title="EMA死叉射线")

// 隐藏EMA曲线(可选,如需查看可删除display=hidden)
plot(ema5, title="EMA 5", display=hidden)
plot(ema13, title="EMA 13", display=hidden)

关键修正点说明

  • 使用 line.new() 替代 hline():该函数可以在指定条件下动态创建线条,每个交叉事件都会生成一条独立的射线
  • 射线延伸设置:将终点的x坐标设为 bar_index + 10000,确保射线能覆盖未来足够多的K线,实现“无限延伸”的效果
  • 信号检测:保留 crossover() 检测金叉,新增 crossunder() 可选检测死叉,按需启用即可
  • 脚本属性:添加 overlay=true 确保射线直接绘制在K线图上(原代码缺失,会导致线条在独立子图显示)

内容的提问来源于stack exchange,提问作者F.D.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:05:18