업데이트: 2026년 11월 3일. 볼린저밴드의 계산, 밴드 터치와 스퀴즈를 해석할 때의 조건을 다룹니다. 차트와 숫자는 가상 데이터로 만든 설명용 예시이며, 매매 성과를 측정한 결과가 아닙니다.
볼린저밴드는 최근 변동성에 맞춰 폭이 바뀌는 범위다
볼린저밴드(Bollinger Bands)는 존 볼린저(John Bollinger)가 1980년대에 만든 지표입니다. 이동평균 위아래에 일정한 비율이나 폭으로 긋는 고정 밴드와 달리, 밴드 폭을 최근 가격의 표준편차로 정합니다. 그래서 변동성이 커지면 밴드가 넓어지고 작아지면 좁아집니다.
따라서 볼린저밴드가 직접 보여주는 것은 두 가지입니다. 현재 가격이 최근 평균에서 상대적으로 얼마나 떨어져 있는지, 그리고 최근 변동성이 과거보다 큰지 작은지입니다. 가격이 앞으로 어디로 갈지는 보여주지 않습니다.
기본값은 20기간 평균과 2표준편차다
볼린저가 기본값으로 제시한 설정은 20기간과 2표준편차입니다.
| 선 | 계산 |
|---|---|
| 중심선 | 20기간 단순이동평균(SMA) |
| 상단 밴드 | 중심선 + 2 × 20기간 표준편차 |
| 하단 밴드 | 중심선 − 2 × 20기간 표준편차 |
볼린저는 두 보조 지표도 정의했습니다. %B는 가격이 밴드 안 어디에 있는지를 나타내며, 하단 밴드에서 0, 중심선에서 0.5, 상단 밴드에서 1입니다. 밴드 밖이면 0보다 작거나 1보다 큽니다. BandWidth는 밴드 폭을 중심선으로 나눈 값으로, 가격 수준이 다른 시기나 종목의 변동성을 비교할 수 있게 합니다.
%B = (가격 − 하단 밴드) / (상단 밴드 − 하단 밴드)
BandWidth = (상단 밴드 − 하단 밴드) / 중심선
“2표준편차면 가격의 약 95%가 밴드 안에 있다”는 설명은 가격이 정규분포를 따른다는 가정에서 나온 숫자입니다. 가격은 그 가정을 따르지 않으며, StockCharts ChartSchool은 볼린저의 설명을 인용해 밴드가 가격 움직임의 88–89% 정도를 담는다고 소개합니다. 볼린저 자신도 이 계산에서 통계적 결론을 끌어내지 말라고 경고합니다. 또 표준편차를 n으로 나누는지, n − 1로 나누는지는 플랫폼마다 다를 수 있고, n − 1을 쓰면 밴드가 조금 넓어집니다. 아래 코드는 n으로 나눕니다.
import numpy as np
import pandas as pd
def bollinger(close, n=20, k=2.0):
mid = close.rolling(n).mean()
sd = close.rolling(n).std(ddof=0) # divide by n; some platforms use n - 1
upper, lower = mid + k * sd, mid - k * sd
return pd.DataFrame({
"mid": mid, "upper": upper, "lower": lower,
"pct_b": (close - lower) / (upper - lower),
"bandwidth": (upper - lower) / mid,
})
rng = np.random.default_rng(7)
quiet = 100 + rng.normal(0, 0.2, 60)
loud = 100 + rng.normal(0, 2.0, 60)
close = pd.Series(np.r_[quiet, loud])
bb = bollinger(close)
# BandWidth follows recent volatility: much narrower in the quiet block.
assert bb["bandwidth"].iloc[40:60].mean() * 5 < bb["bandwidth"].iloc[100:].mean()
# %B is 0 at the lower band, 0.5 at the middle, 1 at the upper band.
row = bb.iloc[-1]
assert np.isclose((row["mid"] - row["lower"]) / (row["upper"] - row["lower"]), 0.5)
# A trending series spends many closes at or above the upper band ("walking the band").
trend = bollinger(pd.Series(100 + np.arange(80.0) + rng.normal(0, 0.3, 80)))
assert (trend["pct_b"].iloc[20:] > 0.9).mean() > 0.5
# The n - 1 convention gives slightly wider bands than the n convention.
s = close.iloc[:20]
assert s.std(ddof=1) > s.std(ddof=0)
밴드 터치는 매매 신호가 아니다
“상단 밴드에 닿으면 매도, 하단 밴드에 닿으면 매수”는 가장 흔한 오해입니다. 볼린저의 규칙은 이렇게 말합니다. 밴드에 닿은 것은 닿은 것일 뿐 신호가 아니며, 밴드 밖에서 마감한 종가는 처음에는 반전이 아니라 지속 신호로 봐야 합니다. 많은 변동성 돌파 시스템이 이 생각에 기대고 있습니다.
강한 상승 추세에서는 가격이 상단 밴드를 따라 여러 번 닿으며 올라가는 “밴드 워크(walking the bands)“가 나타납니다. 위 코드의 세 번째 검증이 그 예입니다. 일정하게 오르는 가상 가격에서는 대부분의 종가에서 %B가 0.9를 넘습니다. 이때 상단 밴드 터치를 매도 근거로 쓰면 추세와 반대로 거래하게 됩니다. 하락 추세에서는 하단 밴드에서 같은 일이 일어납니다.
밴드 터치를 쓰려면 “시장이 추세장인지 박스권인지”를 별도의 조건으로 정의해야 합니다. 그 조건 자체도 사후에 고르면 결과가 부풀려지므로, 미리 정한 규칙으로 검증해야 합니다.
스퀴즈는 변동성 수축을 알릴 뿐 방향은 알려주지 않는다
밴드 폭이 자기 과거에 비해 크게 좁아진 상태를 스퀴즈(Squeeze)라고 부릅니다. 볼린저는 BandWidth의 가장 흔한 용도가 스퀴즈를 찾는 것이라고 설명합니다.
다만 스퀴즈는 방향을 알려주지 않습니다. 밴드가 좁아진 뒤 위로 갈지 아래로 갈지는 볼린저밴드만으로는 알 수 없고, 확장이 언제 올지도 정해져 있지 않습니다. 스퀴즈를 규칙으로 쓰려면 “BandWidth가 최근 N기간 최저일 때”처럼 기준을 숫자로 정하고, 이탈 방향을 무엇으로 판단하는지도 함께 고정해야 합니다.
밴드가 넓어진다는 것은 변동성이 이미 커졌다는 관찰입니다. 그것이 추세의 시작인지 끝인지는 밴드 폭만으로 판단할 수 없습니다.
조합은 서로 다른 정보를 주는 지표로 한다
볼린저는 볼린저밴드를 다른 지표와 함께 쓰되, 서로 직접 연관되지 않은 지표를 고르라고 권합니다. 모멘텀 지표 하나와 거래량 지표 하나는 서로 보완할 수 있지만, 같은 가격에서 계산한 모멘텀 지표 두 개는 하나보다 나을 것이 없다는 것입니다. 하단 밴드 터치와 RSI 30 이하가 동시에 나왔다고 신뢰도가 두 배가 되지는 않습니다. 둘 다 최근 가격이 크게 내렸다는 같은 사실을 반영하기 때문입니다.
ChartSchool이 소개하는 볼린저의 W 바닥(W-Bottom)은 밴드를 조건으로 정의한 예입니다. 검증 가능한 규칙으로 옮기면 다음과 같습니다.
- 첫 저점이 하단 밴드 근처나 밖에서 만들어진다.
- 가격이 중심선 쪽으로 반등한다.
- 두 번째 저점은 첫 저점보다 낮지만 하단 밴드 안쪽에서 멈춘다(%B가 0보다 큼).
- 두 번째 저점에서 강하게 반등해 반등 고점을 넘는다.
이렇게 정의하면 형태를 주관적으로 고르는 일을 줄일 수 있습니다. 하지만 이 규칙이 거짓 신호를 걸러낸다거나 수익을 낸다는 근거는 이 글의 출처에 없습니다. 손절 위치, 신호 수, 비용을 포함해 따로 검증해야 합니다.
기간과 배수는 함께 움직여야 한다
20과 2는 기본값이지 정답이 아닙니다. 볼린저는 시장과 목적에 따라 다른 값이 필요할 수 있다고 하면서, 기간을 늘리면 표준편차 배수도 늘리고 줄이면 배수도 줄이라고 권합니다. 그의 예시는 20기간에 2, 50기간에 2.1, 10기간에 1.9입니다. 기간만 바꾸고 배수를 그대로 두면 밴드 밖으로 나가는 빈도가 달라져 신호의 의미가 바뀝니다.
시간프레임도 따로 다뤄야 합니다. 일봉에서 스퀴즈인 구간이 1시간봉에서는 이미 한쪽으로 움직이고 있을 수 있습니다. 여러 기간·배수·시간프레임을 시험했다면 가장 좋은 조합을 바로 채택하지 말고, 과적합 방지 칼럼의 워크포워드 검증으로 선택 과정까지 다시 확인합니다. 변동성을 가격 단위의 손절 거리로 바꾸는 방법은 ATR 칼럼에서 다룹니다.
자료와 적용 범위
- Bollinger Band Rules: 기본값 20·2, 밴드 터치는 신호가 아니라는 원칙, 밴드 밖 종가의 지속 해석, 비상관 지표 조합, 기간에 따른 배수 조정, BandWidth와 스퀴즈.
- StockCharts ChartSchool: Bollinger Bands: 계산식, 88–89% 설명, 밴드 워크, W 바닥.
- Wikipedia: Bollinger Bands: 1980년대 개발 시기, 정규분포 가정이 맞지 않는다는 설명과 그 참고문헌.
- Park & Irwin (2007), “What Do We Know About the Profitability of Technical Analysis?”: 기술적 규칙 연구의 데이터 스누핑과 사후 규칙 선택 문제를 정리한 문헌 검토.
- 이 글은 볼린저밴드의 계산과 해석 조건을 설명합니다. 스퀴즈나 W 바닥 같은 규칙이 수익을 낸다고 주장하지 않으며, 투자 자문이 아닙니다.

