如何以事件为回溯期对比当前与前序事件的HH和LL
基于前序事件回溯的高低点对比实现(Pine Script)
想要对比当前事件区间的**最高高点(HH)**和前序事件区间的最高高点,但现有方案只能按固定K线根数回溯,没法精准以事件节点划分区间?给你改个能实现的版本:
问题出在哪
你原来的代码里,ta.barssince(signalLong[1])只会盯着上一次多单信号的位置,没法对应前序的任意事件(不管多空),所以区间划分不准。要实现按事件节点回溯,得把每次事件触发的K线位置记下来,动态计算区间范围。
修正后的代码
// 初始化变量:存事件触发的K线索引、各区间高低点 var int lastEventBar = na var float prevHH = 0.0 var float currHH = 0.0 var float prevLL = 0.0 var float currLL = 0.0 // 新事件触发时,更新前序区间数据,初始化当前区间 if signalLong or signalShort // 把当前区间的高低点转成前序数据 prevHH := currHH prevLL := currLL // 首次触发用当前K线数据,之后取前序事件到当前的区间极值 currHH := na(lastEventBar) ? high : ta.highest(high, bar_index - lastEventBar + 1) currLL := na(lastEventBar) ? low : ta.lowest(low, bar_index - lastEventBar + 1) // 更新当前事件的K线位置 lastEventBar := bar_index // 事件触发后,后续每根K线实时更新当前区间的高低点 if not na(lastEventBar) currHH := ta.max(currHH, high) currLL := ta.min(currLL, low) // 举个对比例子:当前区间HH超过前序时标记 plotshape(currHH > prevHH and not na(prevHH), title="HH突破", location=location.belowbar, color=color.green, style=shape.labelup, text="HH突破")
关键逻辑说明
- 用
lastEventBar记录上一次事件触发的K线位置,每次新事件来的时候,通过bar_index - lastEventBar + 1算出两个事件之间的K线数,精准提取这段区间的高低点作为前序数据。 - 事件触发后,后续每根K线都会更新当前区间的
currHH和currLL,保证是区间内的真实最高/最低点。 - 直接用
currHH > prevHH就能对比当前和前序事件区间的最高高点,完全符合需求。
内容的提问来源于stack exchange,提问作者Pitt
相关产品推荐
相关产品推荐

