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

如何找到布林带两个条件(上穿上轨/下穿下轨)间的最高高点?

布林带区间内寻找最高点的实现方法

以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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 12:43:15