
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)