如何在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,提问作者Владислав Паршаков
相关产品推荐
相关产品推荐

