如何找到布林带两个条件(上穿上轨/下穿下轨)间的最高高点?
布林带区间内寻找最高点的实现方法
以TradingView的Pine Script为例,实现你要的逻辑:
核心思路
- 先计算布林带的上轨、下轨
- 捕捉价格上穿上轨的时刻作为区间起始点
- 捕捉价格下穿下轨的时刻作为区间结束点
- 在区间存续期间,实时追踪并记录最高价
代码实现
//@version=5 indicator("布林带区间找最高点", overlay=true) // 计算布林带 length = input.int(20, title="布林带周期") src = close mult = input.float(2.0, title="标准差倍数") basis = ta.sma(src, length) dev = mult * ta.stdev(src, length) upper = basis + dev lower = basis - dev // 标记区间起点(价格上穿上轨) startCondition = ta.crossover(close, upper) // 标记区间终点(价格下穿下轨) endCondition = ta.crossunder(close, lower) // 追踪区间内的最高价 var float rangeHigh = na // 当区间开始时,初始化最高价为当前收盘价 if startCondition rangeHigh := close // 区间存续期间,更新最高价 if not startCondition and not endCondition and na(rangeHigh) == false rangeHigh := math.max(rangeHigh, high) // 区间结束时,重置最高价变量 if endCondition rangeHigh := na // 可视化区间内的最高点 plotshape(rangeHigh, title="区间最高点", location=location.belowbar, color=color.green, style=shape.labelup, text="区间高点", textcolor=color.white) // 绘制布林带 plot(upper, color=color.new(color.blue, 0)) plot(basis, color=color.new(color.orange, 0)) plot(lower, color=color.new(color.blue, 0))
代码说明
startCondition:用ta.crossover判断收盘价上穿上轨,触发区间开始endCondition:用ta.crossunder判断收盘价下穿下轨,触发区间结束rangeHigh:用var声明的变量,用来保存区间内的最高价,区间开始时初始化,存续期间不断取当前高点和已有最高价的最大值,区间结束时重置为na- 最后用
plotshape把区间最高点标记出来,方便可视化
内容的提问来源于stack exchange,提问作者Leon Z
相关产品推荐
相关产品推荐

