如何在Pine Script中判断当前bar_index是否为枢轴高点?
在Pine Script中实时判断枢轴高点
为什么默认ta.pivothigh无法实时识别
ta.pivothigh(leftBars, rightBars)的核心逻辑是:只有当枢轴高点右侧的rightBars根K线全部走完后,才会在对应枢轴高点的位置返回true。比如你设置rightBars=2,枢轴高点出现在bar索引10,那只有当bar索引走到12时,ph[2]才会显示true——在bar10和bar11时,你无法通过这个函数直接知道bar10是枢轴高点。
解决方案1:自定义实时识别逻辑(确认型)
如果你想在右侧rightBars根K线走完的瞬间,就标记出对应的枢轴高点(而不是依赖默认函数的回溯索引),可以自己实现判断逻辑:
//@version=5 indicator("实时枢轴高点识别", overlay=true) leftBars = input.int(2, "左侧对比K线数") rightBars = input.int(2, "右侧对比K线数") // 自定义函数:判断当前K线的前_rightBars根K线是否是枢轴高点 isConfirmedPivotHigh(_left, _right) => pivotBarIdx = bar_index - _right // 获取候选枢轴高点的价格 pivotHigh = high[_right] // 候选点左侧_left根K线的最高值(不包含候选点本身) leftHighest = ta.highest(high, _left)[_right + 1] // 候选点右侧_right根K线的最高值(包含当前K线之前的_right根) rightHighest = ta.highest(high, _right) // 候选点高点同时大于左右两侧的最高值 pivotHigh > leftHighest and pivotHigh > rightHighest // 实时确认枢轴高点 confirmedPH = isConfirmedPivotHigh(leftBars, rightBars) // 标记枢轴高点 var label[] phLabels = array.new_label() if confirmedPH // 在对应的枢轴高点K线绘制标记 lbl = label.new(bar_index - rightBars, high[rightBars], "枢轴高点", color=color.red, style=label.style_label_down) array.push(phLabels, lbl)
这段代码会在右侧rightBars根K线走完的瞬间,在对应的枢轴高点K线上绘制标记,不需要你手动回溯索引。
解决方案2:识别潜在枢轴高点(预判型)
如果你想在当前K线走完时,就判断它是否满足枢轴高点的左侧条件(成为潜在候选),可以用以下逻辑:
//@version=5 indicator("潜在枢轴高点识别", overlay=true) leftBars = input.int(2, "左侧对比K线数") rightBars = input.int(2, "右侧对比K线数") // 判断当前K线是否是左侧_leftBars根中的最高点 isPotentialPivotHigh(_left) => currentHigh = high leftHighest = ta.highest(high, _left) currentHigh > leftHighest // 潜在枢轴高点标记 potentialPH = isPotentialPivotHigh(leftBars) // 绘制潜在候选标记 plotshape(potentialPH, location=location.abovebar, color=color.orange, style=shape.triangledown, size=size.small, title="潜在枢轴高点")
这种方式会在当前K线走完时,只要它的高点超过左侧leftBars根K线的最高点,就标记为潜在枢轴高点。后续随着右侧K线的走完,你可以再结合方案1的逻辑确认它是否真的是枢轴高点。
关键说明
- 真正的枢轴高点必须满足左右两侧K线高点都低于自身,所以必然需要等待右侧
rightBars根K线走完才能100%确认,没有办法在当前K线走完时就完全确定(除非你接受预判)。 - 自定义逻辑可以让你更灵活地控制识别时机,无论是提前标记候选,还是在确认瞬间立刻定位枢轴高点。
内容的提问来源于stack exchange,提问作者Saurav Satwik
相关产品推荐
相关产品推荐

