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

Pine Script如何实现EMA交叉时绘制K线半价位止损线

Pine Script 实现金叉K线半价位画线及止损逻辑

ta.valuewhen 函数用法说明

这个函数的作用是当指定条件触发时,记录目标变量的取值,条件未触发时一直保留最近一次记录的值,一共3个入参:

  • 第1个参数:触发条件,对应场景中金叉判断条件EmaCross
  • 第2个参数:触发时需要记录取值的变量/计算表达式,对应场景中信号对应K线的半价位计算式
  • 第3个参数:取历史上第几次触发的取值,0代表最近一次,1代表上上次,以此类推

注意逻辑偏移问题

你提到的(open[1] + close[1]) / 2是计算当前K线的前一根K线的半价位,如果要取金叉信号发生当根K线的半价位,直接用(open + close)/2即可,不需要加[1]偏移,否则止损位会错移一根K线。

完整实现代码

//@version=5
// 纯指标显示场景:把下面的strategy行替换为 indicator(title="EMA 20/50/100 带半价线", overlay=true) 即可
strategy(title="EMA金叉半价止损策略", overlay=true, initial_capital=10000, default_qty_type=strategy.cash, default_qty_value=10000, commission_type=strategy.commission.percent, commission_value=0.1)

// 计算EMA均线
shortest = ta.ema(close, 5)
short = ta.ema(close, 10)
longer = ta.ema(close, 20)

// 识别EMA金叉信号
EmaCross = ta.crossover(shortest, short)

// 记录最近一次金叉发生时,信号K线的半价位
crossHalfPrice = ta.valuewhen(EmaCross, (open + close)/2, 0)

// 交易逻辑(纯指标显示场景可删除)
if EmaCross and strategy.position_size == 0
    strategy.entry("多仓", strategy.long)
// 价格跌破半价位触发止损平仓
if strategy.position_size > 0 and close < crossHalfPrice
    strategy.close("多仓")

// 绘图
plot(shortest, color=color.yellow, linewidth=2, title="EMA5")
plot(short, color=color.red, linewidth=2, title="EMA10")
plot(longer, color=color.purple, linewidth=2, title="EMA20")
// 绘制半价位线,无有效信号时自动断开
plot(crossHalfPrice, color=color.blue, linewidth=2, title="金叉半价止损位", style=plot.style_linebr)
// 标记金叉信号位置
plotshape(EmaCross, location=location.belowbar, color=color.green, style=shape.labelup, text="金叉", textcolor=color.white, size=size.small)

补充说明

  • 如果确实需要取信号K线前一根的半价位,只需要把ta.valuewhen的第二个参数改成(open[1] + close[1])/2即可。
  • 如果需要在图上显示历史所有金叉对应的半价位固定水平线,可以搭配line.new函数在每次EmaCross触发时绘制从信号K线开始延伸的固定线段;仅做最近一次止损位参考的话,上面的写法性能更高、逻辑更简单。
  • 纯指标模式下删除交易逻辑相关的代码即可正常加载,不会影响线条绘制效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:21:33