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

求助:TradingView带EMA/SMA交叉触发的蜡烛计数脚本修正

修正后的TradingView指标代码

原代码存在的问题

  • count未用var声明,每根K线都会重置为1,无法持续累计计数
  • 条件判断if crossover == crossover(ema1,ema2)逻辑冗余,等价于直接判断交叉信号为真
  • 错误使用for循环,Pine Script是逐K线执行的,无需循环跟踪计数
  • 标签创建逻辑会在每根K线生成新标签,导致标签冗余且计数错误

实现需求的修正代码

//@version=5
indicator(title='蜡烛计数指标', overlay=true, max_labels_count=500)

// 计算指标线
ema8 = ta.ema(close, 8)
ema20 = ta.ema(close, 20)
sma20 = ta.sma(close, 20)

// 绘制指标线
plot(ema8, color=color.new(color.red, 0), linewidth=1, title="EMA8")
plot(ema20, color=color.new(color.green, 0), linewidth=1, title="EMA20")
plot(sma20, color=color.new(color.black, 0), linewidth=1, title="SMA20")

// 初始化计数变量和状态(用var保留跨K线的值)
var int candle_count = 0
var bool counting = false

// 检测交叉信号
ema_crossover = ta.crossover(ema8, ema20)
ema_sma_crossunder = ta.crossunder(ema20, sma20)

// 核心计数逻辑
if ema_crossover
    counting := true
    candle_count := 1  // 上穿信号触发时从1开始计数
elif ema_sma_crossunder
    counting := false
    candle_count := 0  // 下穿信号触发时终止计数并重置
elif counting
    candle_count += 1  // 计数状态下每根K线自动递增

// 在K线上标注计数值(仅计数状态下显示)
if counting
    label.new(bar_index, high + ta.atr(10)*0.1, str.tostring(candle_count), 
              textcolor=color.blue, style=label.style_label_down, size=size.small)

代码说明

  • 用var声明计数变量和状态标记,确保变量值在K线周期间保留
  • 触发EMA8上穿EMA20信号时,开启计数状态并将计数初始化为1
  • 触发EMA20下穿SMA20信号时,关闭计数状态并重置计数
  • 仅在计数状态下,每根K线自动累加计数
  • 标签仅在计数期间显示,位置设置在K线高点上方(结合ATR避免与K线重叠),使用向下标签样式更清晰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:46:15