본문 바로가기

Little Investment/Study investing

주식 볼린저 밴드에 대해 알아보기

반응형

주식 볼린저밴드에 대해 알아보기

이번 포스트에서는 주식 투자 기술적 분석에서 사용되는 보조 지표 중 하나인 볼린저 밴드에 대해서 알아보고자 한다.
볼린저 밴드가 무엇인지, HTS/MTS에서의 설정법, 활용 방법 등에 대해서 알아보자.
또한 Python을 사용해 볼린저 밴드를 계산하고 시각화 자료를 생성하는 방법도 간단하게 함께 알아보겠다.

목차

볼린저 밴드(Bollinger Bands)란?

볼린저 밴드는 존 볼린저가 개발한 투자 전략으로, 주식의 변동성을 이용해 상대적으로 저가 또는 고가를 판단하고 투자 기회를 찾는데 사용된다.
볼린저 밴드는 주가의 표준편차를 기준으로 한 '밴드' 라는 것을 그리는데 이 밴드는 주가의 상대적인 '높음'과 '낮음'을 보여준다.


존 볼린저가 이러한 도구를 개발한 배경에는, 주식시장에서 주가의 변동성이 시간에 따라 일정하지 않고 변화한다는 점을 관찰하였기 때문이다.
주가의 변동성은 주식시장의 불확실성, 투자자들의 감정, 경제적 또는 정치적 사건 등 다양한 요인에 의해 영향을 받는다.
이러한 변동성을 측정하고 이해하는 것은 주식 투자에 있어 중요한 요소이다.


볼린저 밴드는 주식의 단기적인 가격 변동을 잡아내는데 특히 유용하며, 주가의 상대적인 고점과 저점을 판단하는데 도움을 준다.
이 도구는 특정 주식이 과거에 비해 현재 과열되었는지, 아니면 과도하게 저평가되었는지를 판단하는데 사용된다.

✔ 볼린저 밴드의 구성

  • 중심선 : 주가의 단순 이동평균(일반적으로 20일 이동평균)이다.
    \( = \text{N}-\text{일 이동평균 (MA)} \)

  • 상단 밴드(상단선) : 중심선에서 주가의 표준편차를 일정 배수(일반적으로 2배)만큼 더한 선. 이는 주가의 상대적인 '높음'을 표현한다.
    \( = \text{중심선} + (\text{K}*\text{표준편차}) \)

  • 하단 밴드(하단선) : 중심선에서 주가의 표준편차를 일정 배수(일반적으로 2배)만큼 뺀 선. 이는 주가의 상대적인 '낮음'을 표현한다.
    \( = \text{중심선} - (\text{K}*\text{표준편차}) \)


볼린저 밴드

볼린저 밴드 설정 방법

설정 방법은 키움증권 영웅문의 HTS/MTS 기준으로만 확인해보겠다.


✔ 영웅문 HTS 볼린저 밴드 적용 및 설정

영웅문 HTS 볼린저 밴드 적용


영웅문 HTS에서는 종합차트 화면에서 '메뉴항목검색'에서 'Bollinger'를 검색하면 쉽게 찾을 수 있다.
그리고 차트에 생성된 볼린저 밴드 차트 항목을 더블 클릭하면 볼린저 밴드의 수치 및 라인 색상 등을 설정할 수 있다.


영웅문 HTS 볼린저 밴드 설정창


✔ 영웅문 MTS 볼린저 밴드 적용 및 설정


영웅문 MTS 볼린저 밴드 적용


영웅문 MTS에서는 종목차트 화면에 설정(톱니바퀴)을 클릭하면 지표설정 창에 검색창이 나온다.
검색창에 'Bollinger'를 검색하면 쉽게 찾을 수 있고 Bollinger Bands를 클릭하면
보조지표 탭에서 Bollinger Bands의 좌측에 체크를 활성화하면 볼린저 밴드가 적용된다.

그리고 검색해서 Bollinger Bands 항목을 찾은 화면에서 Bollinger Bands 우측에 설정(톱니바퀴)를 클릭하면 수치 및 라인 색상 등을 설정할 수 있다.


영웅문 MTS 볼린저 밴드 설정창



✔ 볼린저 밴드의 파라미터

볼린저 밴드의 HTS/MTS 각 설청창에는 Period와 D1라는 파라미터가 있다.
각 파라미터의 의미는 아래와 같다.

  • Period : 이것은 중심선을 계산하는 데 사용되는 이동평균의 기간을 나타낸다. 이는 보통 20일로 설정되지만, 사용자가 조정하여 다른 기간을 선택할 수도 있다. 이 기간은 볼린저 밴드가 얼마나 빠르게 시장의 변동성에 반응할 것인지를 결정한다. 더 짧은 기간은 더 빠른 반응성을, 더 긴 기간은 더 느린 반응성을 의미한다.
  • D1 (Standard Deviations) : 이것은 표준 편차의 배수를 나타낸다. 이는 일반적으로 2로 설정되며, 상단 밴드와 하단 밴드를 중심선으로부터 얼마나 멀게 그릴 것인지를 결정한다. 이 값을 늘리면 밴드는 넓어지고, 줄이면 밴드는 좁아진다. 이 값은 주가의 변동성이 클수록 밴드가 넓어지고, 변동성이 작을수록 밴드가 좁아지는 특성을 반영한다.

여기서 D1이 기본적으로 2로 설정되는 이유는 통계학에서의 표준 정규 분포에 의한 것이다.
통계학에서는 정규 분포에서 약 95%의 데이터가 평균 주위 1.96(반올림 해서 2) 표준 편차 안에 위치하는 것으로 알려져 있다.
즉, 볼린저 밴드에서 D1 값을 2로 설정하면, 이는 주가가 약 95%의 시간 동안은 상단 밴드와 하단 밴드 사이에서 움직일 것이라는 기대를 반영하는 것이다.
다시 말해, 주가가 밴드를 벗어나는 것은 비정상적인 상황으로 간주되는 것이다.

볼린저 밴드 활용법/매매법

볼린저 밴드는 주가의 상대적인 높음과 낮음을 나타내는 기술적 지표로 다음과 같은 방법으로 활용할 수 있다.

✔ 밴드의 폭 활용

밴드의 폭(상단 밴드와 하단 밴드의 거리)이 줄어드는 것은 변동성이 줄어들고 있음을 나타내며, 이는 종종 큰 움직임의 전조일 수 있다.
이런 상황에서는 준비를 하고, 밴드의 폭이 다시 넓어질 때의 움직임을 추적한다.

✔ 주가의 밴드 이탈

주가가 밴드를 상당 밴드를 벗어나는 것은 매우 강력한 추세를 나타내며, 이는 종종 계속되는 것이 아니라 반전의 신호일 수 있다.
이런 경우, 이탈의 정도와 지속 기간, 다른 지표의 신호 등을 함께 고려하여 매매 결정을 내린다.



✔ 밴드 터치 (볼린저 밴드 매매법)

주가가 상단 밴드에 닿을 때 과열되었다고 판단하여 매도를 고려하고, 주가가 하단 밴드에 닿을 때 과도하게 저평가되었다고 판단하여 매수를 고려하는 방법이다.


밴드 터치 전략


주의할 점은 밴드에 닿은 것만으로는 주가가 반드시 반전할 것이라는 보장이 없으므로, 추가적인 시그널이 필요하다.
또한 중심선은 20일 이동평균선으로 한달간 주가의 경향을 나타낸다.
주가가 상승 추세였다가 중심선의 방향이 변했고 하한선을 터치했을 때는 매수하지 않는다.
주가가 내려오고 완만해지는 구간에서 공략하는 것이 확률적으로 좋다.

볼린저 밴드의 한계점

볼린저 밴드는 매우 유용한 기술적 지표지만, 그렇다고 해서 모든 상황에 완벽하게 작동하는 것은 아니다.


  1. 볼린저 밴드는 추세를 따르는 지표(trend-following indicator)이다.
    즉, 상승 추세나 하락 추세에서는 잘 작동하지만, 시장이 범위 내에서 움직일 때는 효과적이지 않을 수 있다.

  2. 이동 평균에 기반을 두고 있으므로, 지연 지표(lagging indicator) 이다.
    즉, 주가의 변화를 빠르게 포착하는 데 한계가 있을 수 있다.

  3. 단독 사용이 어렵다.
    단독으로 사용할 경우, 신호의 해석이 모호할 수 있으며, 거짓 매매 신호를 제공할 수도 있다.
    예를 들어, 주가가 상단 밴드를 터치했다고 해서 반드시 주가가 떨어질 것이라는 보장은 없다.
Python으로 볼린저 밴드 계산 및 차트 생성

마지막으로, Python으로 볼린저 밴드를 계산해보고 계산 결과를 활용해서 차트를 생성해보겠다.
우선 pandas와 차트를 위해 matplotlib를 사용할 것이며, 샘플 데이터는 아래와 같다.
샘플 데이터에서 Close가 종가이다.


샘플 데이터


각 코드에 대한 설명은 아래 포스트에 더 자세하게 작성해두었으니 참고하면 좋을 것 같다.


전체 코드는 아래와 같다.

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

# 데이터 불러오기 및 데이터 프레임 생성
df = pd.read_csv('../TEST.csv')
df['date'] = pd.to_datetime(df['date'])
df = df.set_index('date')

# Bollinger Bands 계산
window = 20 # Period
# 20일 이동평균 계산
df['MA20'] = df['close'].rolling(window).mean()
# 상단 밴드 계산
df['upper'] = df['MA20'] + 2 * df['close'].rolling(window).std()
# 하단 밴드 계산
df['lower'] = df['MA20'] - 2 * df['close'].rolling(window).std()
    # 상단/하단 밴드에서 2는 D1 파라미터

# 차트 생성
fig, ax = plt.subplots(figsize=(14,7))
ax.plot(df.index, df['close'], color='#1f77b4', label='Close Price')
ax.plot(df.index, df['MA20'], color='#ff7f0e', label='Moving Average (20 days)')
ax.plot(df.index, df['upper'], color='#2ca02c', label='Upper Bollinger Band')
ax.plot(df.index, df['lower'], color='#2ca02c', label='Lower Bollinger Band')

ax.fill_between(df.index, df['lower'], df['upper'], color='#2ca02c', alpha=0.1)
 
ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b %Y'))

plt.title('Bollinger Bands')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.grid(True)
plt.show()

위 코드를 실행하면 아래와 같은 차트를 출력할 수 있다.
(종가선 차트와 볼린저 밴드 차트)


Python으로 볼린저 밴드 차트 생성

오늘은 주식 투자 기술적 분석에 사용되는 보조 지표 중 하나인 볼린저 밴드에 대해서 알아보는 시간을 가졌다.
정리하자면 볼린저 밴드는 주가의 상대적인 높음과 낮음을 판단하고, 변동성을 측정하는 데 유용한 도구이지만 볼린저 밴드만을 사용하여 매매 결정을 내리는 것은 권장되지 않는다. 항상 다른 기술적 지표와 함께 사용하고, 자신의 전략과 목표에 따라 볼린저 밴드의 신호를 해석해야 한다.

커피 한 잔으로
저를 응원해주세요!
반응형

loading