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

求助:编写Pine Script显示3天内10EMA上穿21EMA脚本(附失效代码)

修正后的EMA上穿信号标记脚本

原脚本的核心问题是判断“过去3天内”的逻辑错误:ta.change(crossedAbove)仅计算交叉信号的数值变化,无法识别时间范围。以下是修正后的Pine Script v5代码,可准确标记过去3天内10周期EMA上穿21周期EMA的信号:

//@version=5
indicator("EMA 3天内上穿标记", overlay=true)

// 定义EMA周期
ema_short_len = 10
ema_long_len = 21

// 计算两条EMA
ema_short = ta.ema(close, ema_short_len)
ema_long = ta.ema(close, ema_long_len)

// 检测EMA上穿信号
cross_above = ta.crossover(ema_short, ema_long)

// 计算3天对应的毫秒数,判断上穿是否发生在过去3天内
three_days_ms = 3 * 24 * 60 * 60 * 1000
within_3_days = ta.barssince(cross_above) != na and (ta.timenow - ta.time[ta.barssince(cross_above)] <= three_days_ms)

// 绘制EMA线(可选,方便观察信号位置)
plot(ema_short, color=color.blue, title="10周期EMA")
plot(ema_long, color=color.red, title="21周期EMA")

// 标记上穿信号:实时上穿用纯色标签,3天内已发生的上穿用半透明标签
if cross_above
    label.new(bar_index, low, "EMA上穿", style=label.style_label_up, color=color.green, textcolor=color.white)
else if within_3_days
    label.new(ta.barssince(cross_above), low, "3天内上穿", style=label.style_label_up, color=color.new(color.green, 50), textcolor=color.white)

关键修正说明:

  • 用ta.barssince(cross_above)获取距离上次上穿信号的K线位置,结合时间戳差值判断是否在3天范围内,适配所有时间周期(日线、4小时线等)
  • 新增EMA线绘制,便于直观验证信号对应位置
  • 区分实时上穿和历史上穿的标记样式,可根据需求删除其中一种标记逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 22:20:09