개요
Bollinger Bands (볼린저 밴드)는 1980년대 초 John Bollinger가 개발한 변동성 밴드 지표로, 이동평균 위아래에 표준편차를 기반으로 밴드를 구성하여 가격의 상대적 고저점을 판단한다1. 기존의 고정폭 밴드(Percentage Envelopes)와 달리, 밴드 폭이 시장 변동성에 자동으로 적응한다는 것이 핵심 혁신이다.
핵심 아이디어: "상단밴드 위의 가격은 상대적으로 높고, 하단밴드 아래의 가격은 상대적으로 낮다." -- Bollinger는 밴드를 확률적 경계가 아닌 상대적 기준(relative framework)으로 정의했다1.
창시자
John A. Bollinger(1950~)는 CFA(Chartered Financial Analyst)와 CMT(Chartered Market Technician)를 동시에 보유한 최초의 금융 분석가다. 1980년 독립 트레이더로 전향한 후 옵션 트레이딩 과정에서 Bollinger Bands를 개발하기 시작했으며, 1984~1990년 Financial News Network(FNN)의 Chief Market Analyst로 재직하며 TV 방송을 통해 이 지표를 대중에게 알렸다. Bollinger Capital Management을 설립하여 CEO로 활동하고 있으며, "Bollinger Bands"는 2011년에 상표 등록되었다. 그는 기술적 분석과 기본적 분석의 결합을 "Rational Analysis"로 명명한 인물이기도 하다1.
개발 배경과 선행 지표
1980년대 이전 트레이더들은 이동평균의 위아래에 고정 비율(3~4%)을 적용하는 Percentage Envelopes를 사용했다. 이 방법의 근본적 문제는 시장 변동성이 변해도 밴드 폭이 고정된다는 것이었다.
Bollinger Bands 이전에 등장한 주요 가격 밴드 지표는 다음과 같다:
- Donchian Channels (1960년대): Richard Donchian이 개발. n기간의 최고가/최저가로 채널을 구성한다. 변동성이 아닌 가격 극단값 기반이므로 정상적 변동성 변화를 반영하지 못한다.
- Keltner Channels (1960): Chester W. Keltner가 How to Make Money in Commodities에서 "Ten-Day Moving Average Trading Rule"로 소개했다2. 전형적 가격(Typical Price)의 이동평균에 거래범위 이동평균을 더하고 빼는 방식이다. Linda Bradford Raschke가 1980년대에 EMA + ATR 기반으로 현대화했다3.
Bollinger의 혁신은 표준편차(Standard Deviation)를 밴드 폭의 척도로 도입하여, 밴드가 시장 변동성에 자동으로 적응하게 만든 것이다. 원저 Bollinger on Bollinger Bands(2001, McGraw-Hill)는 11개 언어로 번역되었으며, 밴드 설정, %B/BandWidth 파생 지표, W바닥/M천장 패턴 인식, 3가지 트레이딩 시스템을 상세히 설명한다1.
수학적 정의
기본 공식
Bollinger Bands는 세 개의 선으로 구성된다: 중심선(Middle Band), 상단밴드(Upper Band), 하단밴드(Lower Band)1.
여기서:
- : 시점 의 종가(Close Price)
- : 룩백 기간 (Bollinger 기본값: 20)
- : 표준편차 배수 (Bollinger 기본값: 2)
- : 기간 단순이동평균
- : 기간 모집단 표준편차
표준편차 계산
Bollinger는 모집단 표준편차(Population Standard Deviation)를 사용한다1:
분모가 인 모집단 표준편차이며, 분모가 인 표본 표준편차(Bessel's correction)가 아니다. Bollinger Bands는 모집단 추정이 목적이 아니라 해당 윈도우 내 가격의 분산 정도를 직접 측정하는 것이 목적이기 때문이다. 일 때 두 공식의 차이는 약 2.5%에 불과하며, 대부분의 차팅 소프트웨어가 모집단 공식을 따른다.
| 변수 | 의미 | 기본값 | 단위 |
|---|---|---|---|
| 시점 의 종가 | -- | 가격 | |
| SMA 기간 (룩백 윈도우) | 20 | 기간(봉 수) | |
| 표준편차 배수 | 2 | 무차원 | |
| 기간 단순이동평균 | -- | 가격 | |
| 기간 모집단 표준편차 | -- | 가격 |
단계별 계산
20기간의 종가 데이터로 Bollinger Bands를 계산하는 과정을 보인다.
Step 1: 단순이동평균(SMA) 계산
Step 2: 편차 제곱합 계산
Step 3: 표준편차 계산 (모집단 공식)
Step 4: 밴드 계산 ()
밴드 전체 폭은 이며, 중심선 대비 약 11.0%에 해당한다.
비유적 설명: 고무줄 울타리
Bollinger Bands를 고무줄로 만든 울타리로 상상해보자. 울타리의 중심은 최근 20일간 가격의 "중심지"(SMA)이고, 위아래로 고무줄 울타리가 쳐져 있다.
- 가격이 조용할 때(저변동성): 고무줄이 팽팽하게 수축하여 울타리 폭이 좁아진다.
- 가격이 요동칠 때(고변동성): 고무줄이 크게 늘어나 울타리 폭이 넓어진다.
- 가격이 울타리 밖으로 튀어나가면: 곧 울타리 안으로 돌아올 가능성이 높거나(평균 회귀), 울타리 자체가 넓어져야 할 만큼 환경이 변한 것이다(추세 발생).
고정폭 밴드(Percentage Envelopes)는 철제 울타리와 같다. 시장이 조용하든 격렬하든 울타리 폭이 변하지 않는다. Bollinger의 혁신은 울타리를 고무줄로 바꿔, 시장 상황에 자동으로 적응하게 만든 것이다.
파생 지표: %B
%B는 현재 가격이 밴드 내에서 어디에 위치하는지를 0~1로 정규화한 지표다. Bollinger가 Stochastic Oscillator에서 영감을 받아 개발했다1.
| %B 값 | 의미 |
|---|---|
| > 1.0 | 상단밴드 돌파 (밴드 외부) |
| 1.0 | 상단밴드 위치 |
| 0.5 | 중심선 위치 |
| 0.0 | 하단밴드 위치 |
| < 0.0 | 하단밴드 이탈 (밴드 외부) |
%B의 핵심 장점: 밴드 폭에 관계없이 가격의 상대적 위치를 비교할 수 있다. 고변동성 기간의 %B = 0.8과 저변동성 기간의 %B = 0.8은 동일한 의미를 가진다.
파생 지표: BandWidth
BandWidth는 밴드의 상대적 폭을 측정한다1.
기본 설정()에서:
여기서 은 변동계수(Coefficient of Variation)이다. 즉, 기본 설정에서 BandWidth는 20기간 변동계수의 정확히 4배이며, 이는 BandWidth가 순수한 변동성 척도임을 수학적으로 증명한다.
Bollinger Band Squeeze
Squeeze는 밴드 폭이 극도로 좁아진 상태를 감지하는 개념이다. Bollinger 본인이 원저에서 제안했으며1, Carter가 Keltner Channels과의 교차 조건으로 체계화했다4.
Bollinger의 원래 Squeeze: BandWidth가 최근 기간(일반적으로 125 = 약 6개월) 중 최저값에 도달하면 스퀴즈 상태로 판정한다.
Carter의 TTM Squeeze: Bollinger Bands의 상하단이 Keltner Channels의 상하단 내부에 위치하면 스퀴즈 ON이다4.
스퀴즈의 수학적 의미: Bollinger Bands(표준편차 기반)가 Keltner Channels(ATR 기반) 내부로 수축한다는 것은, 종가 기반 변동성이 고가-저가 범위 기반 변동성보다 상대적으로 더 작아졌다는 뜻이다. 표준편차는 편차를 제곱한 후 평균을 구하므로 극단적 편차에 더 강하게 반응하고, ATR은 절대값 기반이므로 반응이 더 완만하다. 이 차이가 시장이 조용해지면 BB가 KC보다 더 빨리 수축하는 원리이다.
정규분포 가정과 체비셰프 부등식
Bollinger Bands의 2 표준편차 설정은 정규분포의 특성에서 영감을 받았다1.
| 정규분포 포함률 | 체비셰프 최소 포함률 | |
|---|---|---|
| 1 | 68.27% | 0% (하한 무의미) |
| 1.5 | 86.64% | 55.56% |
| 2 | 95.45% | 75.00% |
| 2.5 | 98.76% | 84.00% |
| 3 | 99.73% | 88.89% |
체비셰프 부등식(Chebyshev's Inequality)은 분포의 형태에 관계없이 적용된다:
일 때, 데이터가 어떤 분포를 따르든 최소 75%는 밴드 내에 포함된다.
Fat Tail 문제
금융 가격 수익률은 정규분포보다 두꺼운 꼬리(fat tail/leptokurtic)를 가진다. 주식 일간 수익률의 첨도(kurtosis)는 410+, 암호화폐는 520+에 달한다. 실증 연구에서 Bollinger Bands(20, 2) 내 가격 포함률은 이론적 95.45%가 아닌 약 88~89% 수준으로 보고된다1. Bollinger는 이를 인지하고, 밴드를 확률적 경계가 아닌 상대적 고점/저점의 정의로 사용할 것을 권장했다.
변동성 주기
Bollinger Bands의 핵심 전제 중 하나는 변동성의 순환적 특성(cyclicality of volatility)이다1:
이는 금융 시계열에서 관찰되는 변동성 군집(volatility clustering) 현상과 일치한다. GARCH 모델에서 조건부 분산은 자기상관을 가지며, 큰 변동 뒤에 큰 변동이, 작은 변동 뒤에 작은 변동이 따르는 경향이 있다. Bollinger Bands는 이 현상을 시각적으로 포착하는 비모수적(non-parametric) 도구이다.
파라미터
기본 설정: 20일 / 2 표준편차
Bollinger는 원저에서 20일 기간과 2 표준편차를 기본값으로 권장했다1.
- 20일: 약 1개월의 거래일(미국 시장 기준 4주 x 5일). 통계적으로 의미 있는 표본 크기를 확보하면서도 시장 변화에 충분히 반응하는 기간이다. 10일 미만은 통계적 신뢰도가 떨어지고, 50일 이상은 시장 변화를 너무 늦게 반영한다.
- 2 표준편차: 체비셰프 부등식에 의해 분포에 관계없이 최소 75% 포함을 보장한다. 실제 금융 데이터에서 약 88~89%가 포함되며, "충분히 많은 데이터를 밴드 안에 유지하면서, 의미 있는 이탈을 감지할 수 있는" 실용적 균형점이다1.
기간-배수 연동 원칙
Bollinger는 기간을 변경하면 표준편차 배수도 반드시 조정해야 한다고 강조했다1:
| 기간 () | 배수 () | 용도 |
|---|---|---|
| 10 | 1.9 | 단기 트레이딩 |
| 20 | 2.0 | 표준 (Bollinger 권장) |
| 50 | 2.1 | 중장기 분석 |
짧은 기간은 표본이 적어 표준편차가 불안정하므로 배수를 낮추고, 긴 기간은 표준편차가 안정적이므로 배수를 약간 높인다.
타임프레임별 권장 설정
| 타임프레임 | 기간 | 배수 | 특성 |
|---|---|---|---|
| 1분~5분 | 20 | 2.0 | 노이즈 많음, 거래량 필터 필수 |
| 15분~1시간 | 20 | 2.0 | 일중 트레이딩 표준 |
| 4시간 | 20 | 2.0 | 스윙 트레이딩 (약 3.3일) |
| 1일 | 20 | 2.0 | 원래 설계 기준 |
| 1주 | 20 | 2.0 | 장기 추세 분석 (약 5개월) |
암호화폐 24시간 시장 고려사항
- 20일의 의미 차이: 전통 시장의 20거래일은 4주(28일)이지만, 24시간 운영되는 암호화폐 시장의 20일봉은 정확히 20일이다. 주말 휴장이 없어 실질 기간이 다르다.
- 높은 변동성: 암호화폐는 전통 자산 대비 변동성이 2~5배 높다. 밴드가 매우 넓어져 의미 있는 밴드 터치가 드물어질 수 있다. Day et al.(2022)은 비트코인 선물에서 60일 MA 사용 시 수익률이 개선되었음을 보고했다5.
- 4시간 봉의 중요성: 암호화폐에서 4시간 봉은 전통 시장의 일봉과 유사한 역할을 한다. 20기간은 약 80시간(3.3일)으로, 단기 변동성 사이클을 잘 포착한다.
- Fat Tail 심화: 암호화폐의 첨도는 전통 시장보다 극단적이므로, 밴드 이탈 빈도가 더 높다. 밴드 터치를 단독 매매 신호로 사용하면 손실 위험이 크다.
해석 방법
W 바닥 패턴 (W-type Bottom)
Bollinger가 가장 강조한 패턴이다. Arthur Merrill의 W 패턴 분류(16가지 변형)에서 영감을 받았다1.
식별 조건:
- 첫 번째 저점이 하단밴드를 터치하거나 돌파 (%B < 0)
- 반등하여 중심선 근처까지 상승
- 두 번째 저점이 첫 저점보다 높거나 같지만, 하단밴드 내부에서 형성 (%B > 0)
- 두 번째 저점의 %B가 첫 번째보다 높음 (핵심: 가격은 비슷하지만 밴드 내 위치가 개선)
- 중심선 돌파 시 매수 확인
가격이 아닌 %B를 기준으로 판단하는 것이 Bollinger의 핵심 통찰이다. 가격은 이전 저점을 재테스트하지만, 밴드 내 상대적 위치가 개선되어 하락 모멘텀의 약화를 나타낸다.
M 천장 패턴 (M-type Top)
W 바닥의 정반대 구조다:
- 첫 번째 고점이 상단밴드 터치 또는 돌파 (%B > 1)
- 조정 후 두 번째 고점이 첫 고점과 유사하지만 상단밴드 내부에서 형성 (%B < 1)
- 두 번째 고점의 %B가 첫 번째보다 낮음
- 중심선 하향 이탈 시 매도/청산 확인
밴드 걷기 (Walking the Band)
강한 추세에서 가격이 상단 또는 하단 밴드를 따라 연속적으로 움직이는 현상이다. 이것은 추세의 강도를 나타내는 신호이지, 반전 신호가 아니다1.
- 상단밴드 걷기: 강한 상승 추세 (매수 유지)
- 하단밴드 걷기: 강한 하락 추세 (매도 유지 또는 관망)
이 현상이 발생할 때 밴드 터치를 반전 신호로 해석하면 추세에 역행하는 포지션을 반복적으로 잡게 된다. 비트코인이 2020~2021년 강세장에서 상단밴드를 따라 수개월간 상승한 것이 대표적 사례다.
Squeeze에서 Expansion으로
Bollinger는 변동성의 순환적 성격을 강조했다: 낮은 변동성은 높은 변동성을 낳고, 높은 변동성은 낮은 변동성으로 수렴한다1.
- 스퀴즈 식별: BandWidth가 최근 6개월(약 125거래일) 최저치에 근접할 때
- 확장: 스퀴즈 이후 밴드가 급격히 확장되면 큰 가격 움직임이 시작됨
- 방향 판단 불가: Bollinger는 스퀴즈가 방향을 예측하지 않는다고 명시적으로 경고했다. 방향은 별도 지표(MACD, RSI 등)로 확인해야 한다.
Carter의 TTM Squeeze는 이 개념을 객관화했다4: Bollinger Bands가 Keltner Channels 내부로 수축하면 스퀴즈 ON, 외부로 확장하면 스퀴즈 OFF. 돌파 방향은 12기간 선형 회귀의 기울기 방향으로 판단한다.
%B 해석
| %B 값 | 위치 | 의미 |
|---|---|---|
| > 1.0 | 상단밴드 위 | 극단적 강세 (밴드 이탈) |
| 0.8 ~ 1.0 | 상단밴드 근처 | 강세 영역 |
| 0.5 | 중심선 | 중립 |
| 0.0 ~ 0.2 | 하단밴드 근처 | 약세 영역 |
| < 0.0 | 하단밴드 아래 | 극단적 약세 (밴드 이탈) |
Bollinger는 %B 자체를 매매 신호로 사용하기보다, W/M 패턴 식별의 핵심 도구로 활용했다1.
BandWidth 해석
- 기본 설정(20, 2)에서 BandWidth는 20기간 변동계수(CV)의 4배와 동일하다
- 역사적 최저 BandWidth: "The Squeeze"의 핵심 지표
- 역사적 최고 BandWidth: 변동성 정점, 추세 전환 가능성
실용적 활용
Mean Reversion (평균 회귀): 밴드 터치에서 반전
전제 조건: 시장이 횡보(레인지 바운드) 상태여야 한다. 추세장에서 사용하면 큰 손실 위험이 있다.
롱 진입 조건:
- 가격이 하단밴드 터치 또는 하향 이탈 (%B <= 0)
- 반전 캔들 패턴 확인 (해머, 불리시 인걸핑 등)
- 보조 지표로 과매도 확인 (RSI < 30 등)
- 거래량 감소에서 증가로 전환 (셀링 클라이맥스)
숏 진입 조건:
- 가격이 상단밴드 터치 또는 상향 이탈 (%B >= 1)
- 반전 캔들 패턴 확인 (유성, 베어리시 인걸핑 등)
- 보조 지표로 과매수 확인 (RSI > 70 등)
손절: 밴드 이탈 후 추가 이탈 방향으로 1 ATR / 익절: 중심선(SMA 20) 또는 반대편 밴드
Breakout (돌파): Squeeze 후 방향성 진입
진입 조건:
- BandWidth가 최근 120기간(6개월 일봉 기준) 최저치 근접
- 또는 TTM Squeeze 기준: BB가 KC 내부에서 외부로 확장 (스퀴즈 OFF)
- 확장 시점에 가격이 상단밴드 돌파: 롱 / 하단밴드 돌파: 숏
- 거래량 증가 동반 필수
손절: 중심선(SMA 20). 돌파 후 중심선 복귀는 돌파 실패를 의미한다 / 익절: 밴드가 최대 확장 후 수축 시작 시
W 바닥 / M 천장 전략
W 바닥 매수: (1) 첫 저점에서 %B < 0 확인 (진입하지 않음) (2) 반등 후 두 번째 저점에서 %B > 첫 저점의 %B 확인 (3) 가격이 중심선 상향 돌파 시 진입 (4) 손절: 두 번째 저점 아래 (5) 익절: W 패턴 높이만큼 중심선에서 상방 투사
M 천장 매도/청산: (1) 첫 고점에서 %B > 1 확인 (2) 두 번째 고점에서 %B < 첫 고점의 %B 확인 (3) 가격이 중심선 하향 이탈 시 숏 진입 또는 롱 청산 (4) 손절: 두 번째 고점 위
신호 강도 분류
| 강도 | 조건 | 신뢰도 |
|---|---|---|
| 강함 | 밴드 이탈 + W/M 패턴 완성 + 보조 지표 일치 + 거래량 확인 | 높음 |
| 보통 | 밴드 터치 + 보조 지표 일치 | 중간 |
| 약함 | 밴드 터치 단독 | 낮음 (단독 사용 비권장) |
다른 지표와의 조합
RSI + Bollinger Bands: BB는 가격의 변동성 대비 상대적 위치를 측정하고, RSI는 가격 변화의 내부 강도(상승/하락 비율)를 측정한다. 서로 다른 수학적 원리(표준편차 vs 비율)를 사용하므로 정보 중복이 적다. Bollinger 본인도 원저에서 BB와 모멘텀 지표(RSI 또는 MFI)의 조합을 명시적으로 권장했다1.
- BB 하단 터치 + RSI < 30: 변동성 기준으로도, 모멘텀 기준으로도 과매도 -- Mean Reversion 신호 강화
- BB 상단 걷기 + RSI > 50 유지: 추세가 건전함을 확인 -- 밴드 터치 매도 함정 회피
- %B와 RSI의 다이버전스: 가격은 새 고점이지만 %B와 RSI 모두 이전 고점 미달 -- 강력한 M 천장 신호
Keltner Channels + Bollinger Bands (TTM Squeeze): BB는 표준편차(가격의 산포도) 기반, KC는 ATR(실제 거래 범위) 기반이다. BB가 KC보다 좁아지는 것은 "정상적 거래 범위 대비 통계적 변동성이 극도로 축소"되었음을 의미한다43.
거래량 지표: BB는 가격 데이터만 사용하여 거래량 정보를 전혀 반영하지 않는다. BB 돌파 + 거래량 급증은 유효 돌파, BB 돌파 + 거래량 미미는 허위 돌파 가능성이 높다. Bollinger는 원저에서 MFI(Money Flow Index)를 %B와 함께 사용하는 시스템을 제시했다1.
MACD + Bollinger Bands: BB의 스퀴즈가 "언제 큰 움직임이 올지"를 알려주면, MACD가 "어느 방향인지"를 알려준다. 스퀴즈 OFF + MACD 히스토그램 양전환은 상방 돌파 진입, 음전환은 하방 돌파 진입이다.
학술적 검증
실증 연구 요약
| 연구 | 시장 | 전략 유형 | 거래비용 | 결과 | 유의성 |
|---|---|---|---|---|---|
| Leung & Chong (2003) | 미국 주식 | 추세 추종 | -- | MAE 대비 미미 | 유의하지 않음 |
| Lento et al. (2007) | TSX/DJIA/NASDAQ | 역발상 | O | 개선됨 | 부분적 유의 |
| Fang et al. (2017) | 국제 주식시장 | 다양 | O | 시간에 따라 감소 | BB 도입 전 유의, 이후 소멸 |
| Ni et al. (2020) | Taiwan 50 | 역발상/모멘텀 | O | 양(+) | 1% 수준 유의 |
| Day et al. (2022) | BTC 선물 | BB 기반 | -- | 양(+) | 유의 |
주요 연구 상세
Leung & Chong (2003): 이동평균 엔벨로프(MAE)와 BB의 수익성을 직접 비교한 최초 연구다6. BB가 급격한 가격 변동을 포착할 수 있음에도 불구하고, MAE를 유의미하게 능가하지 못한다는 결과를 보여 적응형 밴드의 이론적 우월성이 반드시 실증적 수익성으로 이어지지 않음을 시사했다.
Lento, Gradojevic & Wright (2007): TSX, DJIA, NASDAQ에서 BB 수익성을 검증했다7. 거래비용 차감 후 표준 추세 추종 전략은 바이앤홀드를 하회했으나, 역발상(contrarian) 접근 시 수익성이 개선되었다. 이는 BB가 추세 추종보다 평균 회귀 관점에서 더 유효할 수 있음을 시사한다.
Fang, Jacobsen & Qin (2017): BB 관련 가장 중요한 학술 연구 중 하나다8. BB 도입 이전에는 국제 주식시장에서 매우 수익성 높은 전략이었으나, 인기 상승과 함께 예측력이 점진적으로 감소하여 2001년 원저 출판 이후 대부분 소멸했다. "수익성 있는 전략은 인기가 높아질수록 자멸한다(self-destruct with increasing popularity)"는 것이 핵심 발견이다.
Ni, Day, Huang & Yu (2020): Taiwan 50 구성종목에서 10년간(2007~2016) BB를 검증했다9. 하단밴드 터치 시 롱 진입으로 Fama-French 3요인 모형 기준 1% 유의수준에서 양(+)의 비정상 수익률을 확인했다. 신흥시장에서 BB의 유효성이 선진시장 대비 높을 수 있음을 시사한다.
Day, Cheng, Huang & Ni (2022): 비트코인 선물(CME)에서 BB 전략을 검증한 최초 연구 중 하나다5. 20일 MA 기준 평균 보유 수익률 20%+, 60일 MA 조정 시 50%+를 달성했다. 암호화폐의 높은 변동성 환경에서 BB의 적응형 밴드 특성이 효과적임을 실증했다.
시장별 유효성 차이
| 시장 유형 | BB 유효성 | 주요 조건 |
|---|---|---|
| 선진 주식시장 (미국) | 낮음 | 역발상 전략 시 부분적 유효 |
| 선진 주식시장 (국제) | 시간에 따라 감소 | 2001년 이후 대부분 소멸 |
| 신흥시장 (대만) | 중간~높음 | 개별 종목 수준에서 유의 |
| 암호화폐 (BTC 선물) | 높음 | 적응형 밴드의 이점 |
패턴 요약: 선진 주식시장에서 표준 BB 추세 추종 전략은 대체로 유의하지 않으나, (1) 역발상 전략, (2) 신흥시장, (3) 암호화폐 시장에서는 유의미한 결과가 관찰된다.
이론적 맥락
효율적 시장 가설(EMH): 선진 주식시장에서 표준 BB 전략이 바이앤홀드를 하회한다는 다수의 연구 결과는 약형 EMH와 일치한다. 반면 대만 시장과 비트코인 선물에서의 유의미한 초과 수익은 약형 EMH에 대한 반례를 제공한다.
적응적 시장 가설(AMH): Andrew Lo(2004)의 이론은 Fang et al.(2017)의 발견을 가장 잘 설명한다. 시장 참여자들이 BB 전략을 학습하고 채택함에 따라 차익 기회가 축소되지만, 새로운 시장(암호화폐)이나 비효율적 시장(신흥국)에서는 여전히 유효할 수 있다.
변동성 클러스터링: BB의 이론적 기반인 "변동성의 시간적 변화"는 Mandelbrot(1963)이 최초로 관찰한 양식화된 사실(stylized fact)이다. Engle(1982)의 ARCH / Bollerslev(1986)의 GARCH 모형으로 정식화되었으며, BB는 GARCH 조건부 변동성 밴드의 "실용적 근사(practical approximation)"로 해석할 수 있다.
한계점
1. 정규분포 가정의 한계 (Fat Tail 문제)
Bollinger Bands의 2 표준편차는 정규분포 가정 하에서 95% 포함을 의미하지만, 금융 시장의 수익률 분포는 fat tail을 가진다. 정규분포에서 3 표준편차 이상의 이벤트는 0.3% 확률이지만, 실제 금융 시장에서는 1~3% 빈도로 관찰된다. 밴드 이탈을 확률적 이벤트로 과신하지 않아야 한다. "%B < 0이면 95% 확률로 반등"이라는 해석은 수학적으로 틀리다1.
2. 후행성 (SMA 기반의 구조적 지연)
중심선이 SMA(단순이동평균)이므로 급격한 가격 변동에 느리게 반응한다. 20일 SMA는 현재 가격 변화가 밴드에 완전히 반영되기까지 최대 20일이 걸린다. 급등 초기에 밴드가 아직 좁은 상태에서 밴드 터치 매도 전략을 적용하면, 강한 상승 추세의 초기에 매도하게 된다. EMA로 대체하면 반응 속도가 빨라지지만, Bollinger의 원래 설계가 아니며 밴드의 통계적 특성이 변한다1.
3. 밴드 걷기(Walking the Band) 시 역추세 함정
강한 추세에서 밴드 터치를 반전 신호로 해석하면 추세에 역행하는 포지션을 반복적으로 잡게 된다. Mean Reversion 전략은 반드시 횡보장에서만 사용해야 한다. 밴드 터치 전에 추세 방향을 먼저 확인하고, 추세 방향과 동일한 밴드 터치는 추세 지속 신호로 해석해야 한다.
4. 과최적화 위험 (Parameter Overfitting)
기간, 표준편차 배수, 타임프레임을 조합하면 무한히 많은 설정이 가능하다. 과거 데이터에서 최적 파라미터를 찾아 적용하면 백테스트에서는 좋은 결과를 보이지만 미래 데이터에서는 성능이 급락한다. Fang et al.(2017)은 BB 전략의 수익성이 시간이 지남에 따라 체계적으로 감소했음을 보고했다8. Bollinger의 기본 설정(20, 2)을 유지하되, 명확한 근거가 있을 때만 조정하는 것이 바람직하다.
5. 거래량 미반영
BB는 종가만 사용하며 거래량 정보를 전혀 포함하지 않는다. 저유동성 시간대에 소량 거래로 하단밴드를 터치한 것과, 높은 거래량에서 하단밴드를 터치한 것은 전혀 다른 신호지만 BB 단독으로는 구분할 수 없다. MFI(Money Flow Index)나 OBV(On Balance Volume)와 함께 사용하여 확인해야 한다1.
6. 레인지 vs 추세 구분 불가
BB 자체는 현재 시장이 추세장인지 횡보장인지를 알려주지 않는다. Mean Reversion은 횡보장에서만, Breakout은 추세 전환 시에만 유효하므로, ADX 등 추세 강도 지표와 병행하여 시장 레짐을 먼저 판단해야 한다.
흔한 오용
- "상단 밴드 터치 = 즉시 매도, 하단 밴드 터치 = 즉시 매수": Bollinger 본인이 원저에서 명시적으로 경고한 사항이다1. 밴드 터치는 "상대적으로 높거나 낮은 가격"을 의미할 뿐이다.
- "밴드 안에 95%의 가격이 포함": 금융 수익률은 정규분포를 따르지 않으며, 실제 포함률은 약 88~89%다. 밴드 이탈은 "드문 사건"이 아니라 "정상적으로 발생하는 사건"이다.
- "스퀴즈 = 상승 신호": 스퀴즈는 큰 움직임이 임박함을 알려줄 뿐, 방향은 모멘텀 지표로 별도 판단해야 한다.
- "BB만으로 완전한 시스템 구축 가능": Bollinger 본인이 "BB는 상대적 기준(relative framework)이며 다른 지표와 함께 사용해야 한다"고 명시했다1. Lento et al.(2007)도 BB 단독 전략이 거래비용 조정 후 바이앤홀드를 능가하지 못함을 실증했다7.
- "파라미터 최적화로 수익 향상": 과최적화(overfitting)의 전형적 함정이다. 기본 설정(20, 2)은 통계적으로 견고한 근거를 가지며, 변경 시 반드시 충분한 아웃오브샘플 검증이 필요하다8.
구현 예시
Bollinger(2001)의 원래 정의에 충실한 구현이다. SMA + 모집단 표준편차 기반이며, 파생 지표(%B, BandWidth, Squeeze)를 포함한다.
// --- 타입 정의 ---
interface BollingerInput {
/** 종가(close price) 배열. 시간순 정렬 (오래된 것부터) */
prices: number[];
/** 이동평균 및 표준편차 계산 기간. Bollinger의 기본값은 20 */
period?: number;
/** 표준편차 배수. Bollinger의 기본값은 2 */
multiplier?: number;
}
interface BollingerBand {
/** 상단 밴드: SMA + k * sigma */
upper: number;
/** 중심선: SMA(n) */
middle: number;
/** 하단 밴드: SMA - k * sigma */
lower: number;
/** %B: 가격의 밴드 내 상대적 위치 (0~1, 범위 초과 가능) */
percentB: number;
/** BandWidth: 밴드의 상대적 폭 = (upper - lower) / middle */
bandwidth: number;
}
interface BollingerResult {
values: BollingerBand[];
}
interface SqueezeResult {
squeeze: boolean[];
}
// --- SMA 계산 ---
function sma(prices: number[], start: number, period: number): number {
let sum = 0;
for (let i = start; i < start + period; i++) {
sum += prices[i];
}
return sum / period;
}
// --- 모집단 표준편차 계산 ---
// Bollinger(2001)는 모집단 표준편차를 사용한다 (N으로 나눔, N-1 아님).
function populationStdDev(
prices: number[],
start: number,
period: number,
mean: number
): number {
let sumSquaredDiff = 0;
for (let i = start; i < start + period; i++) {
const diff = prices[i] - mean;
sumSquaredDiff += diff * diff;
}
return Math.sqrt(sumSquaredDiff / period);
}
// --- Bollinger Bands 계산 ---
function calculateBollingerBands(input: BollingerInput): BollingerResult {
const { prices, period = 20, multiplier = 2 } = input;
if (prices.length < period) {
return { values: [] };
}
const values: BollingerBand[] = [];
for (let i = 0; i <= prices.length - period; i++) {
const mean = sma(prices, i, period);
const stdDev = populationStdDev(prices, i, period, mean);
const upper = mean + multiplier * stdDev;
const lower = mean - multiplier * stdDev;
const bandWidth = upper - lower;
// %B: 밴드 폭이 0인 경우(stdDev=0) 0.5 반환 (정중앙 해석)
const currentPrice = prices[i + period - 1];
const percentB = bandWidth > 0
? (currentPrice - lower) / bandWidth
: 0.5;
// BandWidth: middle이 0인 경우 0 반환
const bandwidthNorm = mean !== 0 ? bandWidth / mean : 0;
values.push({
upper,
middle: mean,
lower,
percentB,
bandwidth: bandwidthNorm,
});
}
return { values };
}
// --- Squeeze 감지 ---
// BandWidth가 lookback 기간 내 최저값이면 스퀴즈로 판단한다.
// Bollinger(2001)는 6개월(약 125거래일) 기준을 제시했다.
function detectSqueeze(
bandwidths: number[],
lookback: number = 125
): SqueezeResult {
const squeeze: boolean[] = [];
for (let i = 0; i < bandwidths.length; i++) {
if (i < lookback - 1) {
squeeze.push(false);
continue;
}
let isMinimum = true;
for (let j = i - lookback + 1; j < i; j++) {
if (bandwidths[j] < bandwidths[i]) {
isMinimum = false;
break;
}
}
squeeze.push(isMinimum);
}
return { squeeze };
}
// --- 사용 예시 ---
const result = calculateBollingerBands({
prices: [22.27, 22.19, 22.08, 22.17, 22.18, 22.13, 22.23, 22.43, 22.24, 22.29,
22.15, 22.39, 22.38, 22.61, 23.36, 23.23, 23.08, 23.13, 23.19, 23.21,
23.44, 23.46, 23.61, 23.73, 23.85, 23.83, 23.63, 23.82, 23.87, 23.65],
});
const latest = result.values[result.values.length - 1];
console.log(`Upper: ${latest.upper.toFixed(4)}`);
console.log(`Middle: ${latest.middle.toFixed(4)}`);
console.log(`Lower: ${latest.lower.toFixed(4)}`);
console.log(`%B: ${latest.percentB.toFixed(4)}`);
console.log(`BandWidth: ${latest.bandwidth.toFixed(4)}`);
// Squeeze 감지
const bandwidths = result.values.map((v) => v.bandwidth);
const squeezeResult = detectSqueeze(bandwidths, 5);
엣지 케이스
| 케이스 | 처리 | 설명 |
|---|---|---|
| 빈 배열 | { values: [] } | 에러 없이 빈 결과 반환 |
| 데이터 < period | { values: [] } | 계산 불가, 빈 결과 |
| 모든 가격 동일 | stdDev=0, %B=0.5, bandwidth=0 | 표준편차 0 -- 밴드 폭 0 -- %B는 정중앙 |
| %B > 1.0 | 정상 동작 (클리핑 안 함) | 가격이 상단밴드 위에 있음. Bollinger도 범위 초과를 신호로 활용 |
| %B < 0.0 | 정상 동작 (클리핑 안 함) | 가격이 하단밴드 아래에 있음 |
라이브러리 비교
| 항목 | 이 구현 | technicalindicators |
|---|---|---|
| 출력 | upper, middle, lower, %B, bandwidth | upper, middle, lower, pb (bandwidth 미포함) |
| Squeeze | detectSqueeze() 제공 | 미제공 |
| 표준편차 | 모집단 (N으로 나눔) | 모집단 (동일) |
| stdDev=0 | %B = 0.5 | pb = 0 또는 NaN |
요약
| 항목 | 내용 |
|---|---|
| 개발자 | John Bollinger (1950~), CFA/CMT |
| 개발 시기 | 1980년대 초, 옵션 트레이딩 과정에서 |
| 원저 | Bollinger on Bollinger Bands (2001), McGraw-Hill |
| 유형 | 변동성 밴드 (가격 오버레이) |
| 구성 | 중심선(SMA), 상단밴드(SMA + kσ), 하단밴드(SMA - kσ) |
| 기본 파라미터 | 기간 20, 배수 2 |
| 파생 지표 | %B (밴드 내 위치), BandWidth (밴드 폭), Squeeze |
| 선행 지표 | Donchian Channels, Keltner Channels, Percentage Envelopes |
| 핵심 혁신 | 표준편차 기반 적응형 밴드 폭 |
| 주요 패턴 | W 바닥 / M 천장, 밴드 걷기, Squeeze -- Expansion |
| 적합한 전략 | Mean Reversion (횡보), Breakout (스퀴즈 후), W/M 패턴 |
| 학술적 유효성 | 선진시장 추세추종: 약함 / 역발상: 유효 / 암호화폐: 높음 |
| 핵심 경고 | 밴드 터치 ≠ 반전 신호, 스퀴즈 ≠ 방향 예측, 단독 사용 비권장 |
| 검증된 참고문헌 | 9개 (book 4, paper 5, 전수 검증) |
Footnotes
-
Bollinger, J. (2001). Bollinger on Bollinger Bands. McGraw-Hill. ISBN 978-0071373685. ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12 ↩13 ↩14 ↩15 ↩16 ↩17 ↩18 ↩19 ↩20 ↩21 ↩22 ↩23 ↩24 ↩25 ↩26
-
Keltner, C.W. (1960). How to Make Money in Commodities. The Keltner Statistical Service. ↩
-
Connors, L.A. & Raschke, L.B. (1996). Street Smarts: High Probability Short-Term Trading Strategies. M. Gordon Publishing Group. ISBN 978-0965046107. ↩ ↩2
-
Carter, J.F. (2019). Mastering the Trade (3rd ed.). McGraw-Hill Education. ISBN 978-1260121599. ↩ ↩2 ↩3 ↩4
-
Day, M., Cheng, Y., Huang, P. & Ni, Y. (2022). The Profitability of Bollinger Bands Trading Bitcoin Futures. Applied Economics Letters, 30(11), 1437-1443. doi:10.1080/13504851.2022.2060494. ↩ ↩2
-
Leung, J.M. & Chong, T.T. (2003). An Empirical Comparison of Moving Average Envelopes and Bollinger Bands. Applied Economics Letters, 10(6), 339-341. doi:10.1080/1350485022000041032. ↩
-
Lento, C., Gradojevic, N. & Wright, C.S. (2007). Investment Information Content in Bollinger Bands? Applied Financial Economics Letters, 3(4), 263-267. doi:10.1080/17446540701206576. ↩ ↩2
-
Fang, J., Jacobsen, B. & Qin, Y. (2017). Popularity versus Profitability: Evidence from Bollinger Bands. The Journal of Portfolio Management, 43(4), 152-159. doi:10.3905/jpm.2017.43.4.152. ↩ ↩2 ↩3
-
Ni, Y., Day, M., Huang, P. & Yu, S. (2020). The Profitability of Bollinger Bands: Evidence from the Constituent Stocks of Taiwan 50. Physica A, 551, 124144. doi:10.1016/j.physa.2020.124144. ↩