求助:编写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
相关产品推荐
相关产品推荐

