#경제/이슈

기술적지표 파헤치기 #4: Bollinger Bands

SUNGWOO BAE
PRO

2023-02-02 · 8 MIN READ

BB의 수식, 엑셀과 트레이딩뷰로 구현해보기

*2021-10-11 글


Bollinger Bands란, 주가의 표준편차를 이용해 변동성을 나타낸 Envelope형 지표입니다.

변동성을 나타냈기에, 주가의 상대적 위치를 알 수 있게 해 주는 것이 Bollinger Bands의 장점입니다.




또한, 단기적인 과매도 구간을 확인해 볼 수 있습니다.




그러나 Bollinger Bands는 표준편차를 나타낸 것에 불과하기에,

주가의 변동성이 급증하는 시장 상황에서의 주가 상태를 설명하기 어렵다는 한계가 존재합니다.




위 자료와 같이, "저평가 된 구간"을 특정해서 진입하게되는 경우,

패닉셀과 같은 변동성이 급증하는 구간은 그저 "더 저평가" 되었다며 시장 상황을 부정할 수 밖에 없습니다.



Bollinger Bands 는 하나의 중앙선과, 중앙선을 기준으로 한 상단선, 하단선으로 구성되어 있습니다.

중앙선 = N일 간의 이동평균선

상단선 = 중앙선 + N일 간의 표준편차 * multiple(임의숫자)

하단선 = 중앙선 - N일 간의 표준편차 * multiple(임의숫자)



Backtest


카카오를 대상으로, 2000년 3월부터 2021년 10월까지 Bollinger Bands를 사용한 "Long Only" 백테스팅 결과입니다.

모든 백테스트는 리스크 관리를 따로 하지 않았으며, 조건에 따라 자산의 100%를 전부 운용했을 때의 결과입니다.

Bollinger Bands 설정 값은 20(이동평균값), 2(multiple) 기준입니다.


1.

매수 조건: 종가가 밴드 하단을 이탈했을 때

매도 조건: 종가가 밴드 상단을 이탈했을 때




Sharpe Ratio = 0.11

Sortino Ratio = 0.174


단순히 밴드만으로 거래했을 때의 결과입니다.

생각보다 높은 승률은, 거래 횟수가 적어서 높게 나오는 듯 합니다.

카카오의 상승세 덕에 전략 또한 우상향하는 모습이 확인됩니다.


2.

매수 조건: 종가가 밴드 하단을 이탈했을 때

매도 조건: 전일 종가가 밴드 상단을 이탈했으며, 금일 종가보다 높을 때




Sharpe Ratio = 0.099

Sortino Ratio = 0.182


MDD(최대손실폭)을 낮추고 성과지표(Sharpe Ratio, Sortino Ratio)의 수치를 높이기 위해, 매도 조건을 더 상세히 바꾸어 보았습니다.

밴드를 이탈했음에도 지속적으로 주가가 상승하는 경우를 고려하여, "밴드를 이탈하고 나서 주가가 하락하는 경우" 를 매도 조건으로 바꾸었습니다.


3.

매수 조건: 전일 종가가 밴드 하단을 이탈했으며, 금일 종가보다 낮을 때

매도 조건: 전일 종가가 밴드 상단을 이탈했으며, 금일 종가보다 높을 때




Sharpe Ratio = 0.112

Sortino Ratio = 0.229


매수 조건 또한 매도 조건과 같이 바꾸어 보았습니다.

"주가가 하단밴드를 이탈하고 나서 상승할 때 진입하여, 주가가 상단밴드를 이탈하고 나서 하락할 때 exit"한다는 뜻입니다.

밴드의 이탈 여부만을 기준으로 잡았을 때 보다 훨씬 안정적인 결과로 바뀐 모습을 확인할 수 있습니다.


Bollinger Bands 사용 시, 밴드에서 이탈하자마자 투자 결정을 내리기보다 이탈 이후의 추세를 관찰하는 것이 더 효율적임을 볼 수 있습니다.



Excel


1. 중앙선




기준이 되는 중앙선을 먼저 만들어줍니다.

AVERAGE 함수를 사용해서 이동평균선을 만들어주시면 됩니다. 보편적으로 사용되는 기본값은 "20"이기에 20일 이동평균선을 만들었습니다.

"=AVERAGE(B2:B21)"


2. Multiple




상하단선에 사용되는 Multiple을 미리 입력해줍니다. 보편적으로 사용되는 수치는 "2"입니다.


3. 상단선




상단선입니다.

중앙선 + N일치 표준편차 * Multiple

20일 이동평균값을 사용했기에 표준편차도 동일하게 20일 표준편차값을 사용합니다.

마지막에 Multiple을 곱해주시는데 Multiple은 이동하면 안되는 값이기에 $로 고정시켜주시면 됩니다.

"=C21+STDEV(B2:B21)*$G$14"


4. 하단선




상단선은 중앙선에서 표준편차*Multiple을 더해주었는데, 하단선에서는 빼주시면 됩니다.

"=C21-STDEV(B2:B21)*$G$14"




TradingView


TradingView에서도 동일하게 중앙선, 상단선, 하단선을 각각 만들어주시면 됩니다.

기간과 Multiple은 변동 가능한 값으로, input으로 미리 지정해주시면 이후 사용하실 때 편리합니다.


//@version=4


study("Bollinger Bands", overlay=true)


length = input(title="Length", defval=20, type = input.integer)
mult = input(title="Multiple", defval=2, minval= 0.001, maxval=50, type = input.integer)


base = sma(close, length)
dev = mult * stdev(close, length)
upper = base + dev
lower = base - dev


plot(base, color=base>base[1]?color.green:color.red)
U=plot(upper, color=color.black)
L=plot(lower, color=color.black)


fill(U,L,color=color.black, transp=90)