Bollinger 指标:公式、参数与读法
布林带绘制收盘价的简单移动平均线,并在其上下各放置一条相距指定倍数标准差的轨道。收盘价围绕均值分散时轨道变宽,聚集在均值附近时轨道收窄。
Senzoukria · 指标 · Updated September 2026
Bollinger — 均线与波动率, 叠加在价格图上.
Bollinger 测量的是什么
中轨是最近 N 个收盘价的简单移动平均。上下轨等于中轨加减 k 倍同一窗口的标准差,采用总体标准差的计算方式:偏差平方和除以 N,而不是 N - 1。这一选择与 TradingView 和 ATAS 计算布林带的方式一致,使轨道比样本标准差算出的略窄一点。整个构造只使用收盘价,因此两次收盘之间发生的波动,只能通过它所形成的收盘价影响轨道。
公式:代码中的实现
这不是别处常见的定义,而是所发布代码实际计算的内容,记录在实现旁边:
True Range et ATR de Wilder : TR[0] = high − low ; TR[i] = max(high−low, |high−closeₚ|, |low−closeₚ|) ATR[N−1] = moyenne des N premiers TR ; ATR[i] = (ATR[i−1]·(N−1)+TR[i])/N Warm-up (< N barres) → null. Défaut N=14 (Wilder, 1978). */ export function atrSeries( bars: readonly FootprintBar[], period: number, ): Array<number | null> { const n = Math.max(1, Math.floor(period)); const out: Array<number | null> = new Array(bars.length).fill(null); if (bars.length < n) return out; const tr: number[] = new Array(bars.length); for (let i = 0; i < bars.length; i++) { const b = bars[i]; if (i === 0) { tr[i] = b.high - b.low; } else { const pc = bars[i - 1].close; tr[i] = Math.max(b.high - b.low, Math.abs(b.high - pc), Math.abs(b.low - pc)); } } let atr = 0; for (let i = 0; i < n; i++) atr += tr[i]; atr /= n; out[n - 1] = atr; for (let i = n; i < bars.length; i++) { atr = (atr * (n - 1) + tr[i]) / n; out[i] = atr; } return out; } const atr: SeriesIndicatorDef = { id: "atr", label: "ATR (Wilder)", group: "Averages & volatility", target: "pane", params: [ { key: "period", label: "Period", type: "number", default: 14, min: 1, max: 200, step: 1 }, { key: "color", label: "Color", type: "color", default: C.gray }, ], compute(bars, params) { const n = Math.max(1, Math.floor(numParam(params, "period", 14))); return [lineOut(toPoints(bars, atrSeries(bars, n)), strParam(params, "color", C.gray))]; }, }; /** Bollinger sur close : basis = SMA_N, bandes = basis ± k·σ où σ est l'écart-type de POPULATION de la fenêtre (÷N, pas ÷(N−1) — la convention TradingView/ATAS pour les BB). Défauts N=20, k=2 (Bollinger, 1983).
如何解读
- 带宽就是读数:轨道收缩说明近期收盘价紧密聚集在均值附近,轨道扩张则说明没有。
- 收盘在轨道之外,是对该收盘价相对窗口位置的描述,而不是信号;在单边行情中,收盘价可以连续很多根K线停留在轨道外。
- 价格沿一条轨道运行时,中轨通常朝同一方向倾斜,因此应把两者放在一起看,而不是只看轨道。
- 价格越出后重新回到轨道内,说明分散程度已经回落,而这时价格仍可能朝同一方向继续运行。
- 中轨是简单平均,会在价格之后才拐头;穿越中轨不是一个提前发生的事件。
参数与默认值
默认值为周期 20、倍数 2.0,这是 Bollinger 在 1983 年发布的组合。提高周期会使中轨和带宽都变慢,对单根K线更不敏感。提高倍数会按比例放大轨道,但不改变它们何时变宽或收窄。倍数可设为 0.5 到 5,步长 0.1;周期可设为 2 到 200。
| 参数 | 类型 | 默认值 | 取值范围 |
|---|---|---|---|
| Period | number | 20 | 2 – 200 |
| σ multiplier | number | 2 | 0.5 – 5 |
它无法显示的内容
布林带只描述过去收盘价的分散程度,别无其他。它不包含任何关于谁在这些价位成交的信息,因此通过吸收化解的收口和通过单边主动出手化解的收口,在图上看起来完全一样。计算中不假设收益率服从任何特定分布,因此不应指望正态分布下两个标准差内的观测比例在市场数据上成立。交易时段之间的缺口不可见,因为只有收盘价进入求和。一根非常大的K线之后,即使市场已重新归于平静,带宽也会在窗口剩余期间保持偏高。
相关指标
其他语言版本
Frequently asked questions
- 布林带使用总体标准差还是样本标准差?
- 本实现把偏差平方和除以 N,即总体标准差的惯例,这也是 TradingView 和 ATAS 计算布林带的方式。样本标准差(除以 N - 1)会得出稍宽的轨道。周期越大差异越小,在默认周期 20 下几乎看不出来。
- 布林带收口意味着什么?
- 收口是指上下轨相互靠近的一段时间,发生在近期收盘价紧密聚集在移动平均线周围时。它描述的是刚刚成交过的市场;既不指示随后行情的方向,也不指示何时开始。
- 布林带能看到交易时段之间的缺口吗?
- 不能。只有收盘价进入均值和标准差的计算,因此缺口只能通过其后的收盘价改变轨道。基于真实波幅的通道(如肯特纳通道)包含与前一收盘价的距离,会对缺口本身作出反应。