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

如何在Pine Script中触发SMA交叉后启动回溯倒计时?

SMA交叉回溯倒计时实现思路(Pine Script)

核心逻辑

通过记录交叉触发的K线索引,计算当前K线与交叉K线的位置差,在指定的9根K线范围内显示倒计时数字(交叉点标记为9,往回依次递减到1)。

分步实现

  1. 记录交叉触发的K线位置
    用var变量存储最近一次交叉的bar_index(每个K线的唯一递增索引),当交叉信号触发时更新这个变量:

    // 定义交叉信号
    crossUp = ta.crossover(smaFast, smaSlow)
    crossDown = ta.crossunder(smaFast, smaSlow)
    
    // 存储最近一次交叉的K线索引
    var int lastCrossBar = na
    if crossUp or crossDown
        lastCrossBar := bar_index
    
  2. 判断倒计时显示范围
    计算当前K线距离交叉K线的偏移量,筛选出交叉点及往回8根K线的范围(共9根):

    // 计算当前K线与交叉K线的索引差(交叉点为0,往回每根递增1)
    barsSinceCross = lastCrossBar - bar_index
    // 仅在9根K线范围内显示倒计时
    showCount = not na(lastCrossBar) and barsSinceCross >= 0 and barsSinceCross <= 8
    
  3. 计算并绘制倒计时数字
    根据偏移量计算对应数字(交叉点为9,往回每根减1),用plotchar或label绘制到K线上:

    // 计算倒计时数值
    countNumber = 9 - barsSinceCross
    
    // 绘制数字,可根据交叉方向设置颜色
    plotchar(showCount, "Retro Count", tostring(countNumber), location.belowbar, 
             size=size.small, color=crossUp ? color.green : color.red)
    

关键细节

  • var关键字确保交叉索引变量不会在每根K线重置,仅在新交叉触发时更新。
  • 新交叉触发时,旧的倒计时会自动失效,因为旧的交叉索引对应的范围不再满足当前K线的showCount条件。
  • 可根据需求调整绘制位置(location.belowbar/location.abovebar)、大小及颜色,适配不同图表风格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 01:50:08