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

如何在Pine Script中计算三次均线交叉之间的K线数量?

在Pine Script中计算EMA8与EMA113交叉间的K线数量

实现思路

要统计三次EMA交叉之间的K线数量,核心需要完成三点:

  • 追踪每一次EMA上穿信号的触发时机
  • 记录交叉发生时的K线索引位置
  • 通过索引差值计算相邻交叉点之间的K线数,达到三次交叉后展示对应数据

完整实现代码

//@version=5
indicator("EMA交叉K线计数", overlay=true)

// 计算两条均线
ema8 = ta.ema(close, 8)
ema113 = ta.ema(close, 113)

// 定义EMA8上穿EMA113的信号
crossover_signal = ta.crossover(ema8, ema113)

// 初始化持久化变量:交叉计数器、存储交叉K线索引的数组
var int cross_count = 0
var array<int> cross_bars = array.new_int()

// 触发交叉时更新计数器与索引数组
if crossover_signal
    cross_count += 1
    array.push(cross_bars, bar_index)

// 计算并显示交叉间的K线数量
var label cross_label = label.new(na, na, "", style=label.style_label_down)
if cross_count >= 2
    // 计算前两次交叉的K线间隔
    bars_between_1_2 = array.get(cross_bars, cross_count-1) - array.get(cross_bars, cross_count-2)
    // 存在第三次交叉时,补充显示第二次到第三次的间隔
    if cross_count >= 3
        bars_between_2_3 = array.get(cross_bars, cross_count-1) - array.get(cross_bars, cross_count-2)
        label.set_text(cross_label, str.format("第1-2次交叉间隔:{0}\n第2-3次交叉间隔:{1}", bars_between_1_2, bars_between_2_3))
    else
        label.set_text(cross_label, str.format("第1-2次交叉间隔:{0}", bars_between_1_2))
    // 将标签定位到最新交叉点上方
    label.set_xy(cross_label, bar_index, high)
    label.set_color(cross_label, color.yellow)
    label.set_textcolor(cross_label, color.black)

// 绘制均线与交叉标记
plot(ema8, color=color.white, title="EMA8")
plot(ema113, color=color.aqua, title="EMA113")
plotshape(series=crossover_signal, style=shape.flag, location=location.top, color=#9FE2BF, size=size.normal)

关键逻辑说明

  • 使用var关键字声明变量,确保脚本在K线更新时不会重置计数器和索引数组
  • 数组cross_bars用于存储每次交叉发生的K线索引,通过索引差值直接得到两次交叉的K线间隔
  • 标签组件cross_label会在交叉发生后,动态更新并显示间隔数据,定位在最新交叉点的上方

内容的提问来源于stack exchange,提问作者Владислав Паршаков

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 02:15:11