Bollinger Bands는 미 재무분석가인 존 볼린저가 1983년 개발한 기술적 분석(TA) 도구입니다.
이동평균선을 중심으로 주가가 일정한 범위 내에 있다는 가정으로 다음과 같은 공식을 적용합니다.
(1)중간 선 : 20 일 이동 평균
(2)상단 밴드 : 20 일 이동 평균 + (20 일 표준 편차 x2)
(3)하단 밴드 : 20 일 이동 평균- (20 일 표준 편차 x2)
주가는 상단 밴드, 하단 밴드 사이에 있을 확률이 95.4% 이기 때문에 주가가 이선 근처에 있을 때 변동성을 추측해볼 수 있는 도구입니다.
캔들스틱 차트를 그린 상태에서 상단 밴드와 하단 밴드를 추가해보겠습니다.
from mpl_finance import candlestick2_ohlc
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import pandas_datareader.data as web
import datetime
# 차트를 이룰 데이터 가져오기, 2019 1.1 ~ 2019.11.1 기간의 삼성전자 주가 정보 갖고 오기
start = datetime.datetime(2019, 1, 1)
end = datetime.datetime(2019, 11, 1)
ds = web.DataReader("008770.KS", "yahoo", start, end)
index = ds.index.astype('str')
ma20 = ds['Close'].rolling(window=20).mean() # 20일 이동평균값
bol_upper = ma20 + 2 * ds['Close'].rolling(window=20).std() # BB(볼린저밴드) 상단 밴드
bol_down = ma20 - 2 * ds['Close'].rolling(window=20).std() # BB(볼린저밴드) 하단 밴드
# 차트 레이아웃을 설정
fig = plt.figure(figsize=(10,10)) #최초의 창 크기를 10x10으로 설정, 크기를 설정하지 않으면 아무 것도 나오지 않음
#ax_main 실제로 데이터가 그려지는 영역
ax_main = fig.add_subplot(1,1,1) #1,1,1의 의미는 전체 창을 1x1로 쪼개고 ax_main을 생성한다는 뜻
# x축에 쓰일 날짜 값 조정
def x_date(x,pos):
try:
return index[int(x-0.5)][:7] # 0:6까지만 잘라서 2019-01와 같이 표현
except IndexError:
return ''
# x축을 조정
ax_main.xaxis.set_major_locator(ticker.MaxNLocator(10))
ax_main.xaxis.set_major_formatter(ticker.FuncFormatter(x_date))
# 메인차트를 그리기
ax_main.set_xlabel('Date')
ax_main.plot(index, ma20, label='MA20') #20일선 표시
ax_main.plot(index, bol_upper, label='bol_upper') #60일선 표시
ax_main.plot(index, bol_down, label='bol_down') #60일선 표시
ax_main.set_title('HT. S Stock ',fontsize=22) #차트의 Title 설정
ax_main.set_xlabel('Date') #차트의 x축 label을 설정
#캔들 차트를 실제로 구성하는 부분
candlestick2_ohlc(ax_main,ds['Open'],ds['High'],ds['Low'],ds['Close'], width=0.5, colorup='r', colordown='b')
ax_main.legend(loc=5) #차트 범례를 오른쪽에 위치하도록 설정
plt.grid()
plt.show()
원래 그렸던 차트에 표준편차 * 2 값을 더했다 뺀 값을 bol_upper, bol_down 으로 추가해주면 됩니다.
볼린저 밴드의 특성은 현재 주식 가격이 상-하한선에 닿았을 경우 주가가 고/저평가일 확률이 높으므로 추세가 반전된 확률이 높다는 것입니다. (확률이 높다는 것이지 무조건이라는 뜻이 아닙니다.)
위의 코드를 실행한 결과를 보겠습니다.
차트에서 주황색 선이 상단 밴드, 초록샌 선이 하단 밴드입니다. 주가는 약 95%의 확률로 이 안에 있습니다.
그런 점에서 보면 주가가 상단 밴드를 넘어버린 A 지점을 보면 과매수 지점이므로 매도해야할 타이밍이라고 예상해볼 수 있습니다.
마찬가지로 B 지점은 주가가 하단 밴드를 넘어버린 상태에서 다시 밴드안으로 들어오기 위해 가격이 상승할 확률이 높다고 판단하여 매수 타이밍으로 생각할 수 있습니다.
위의 경우는 이론과 일치하는 영역이 있었지만 너무 맹신해서는 안될 것입니다.
볼린저 밴드는 변동성을 잘 나타내는 경향이 있는 도구로써 흐름을 파악하는데 사용하는 것이 좋아 보입니다.
같이 읽어보면 좋은 글
2022.12.27 - [파이썬/가상화폐] - [전자책] 바이낸스 코인선물자동매매 시스템 개발 방법을 담은 책이 출시되었습니다.
2022.11.05 - [파이썬/가상화폐] - [공지] 코인거래소별 프리미엄 체크봇 개발 가이드와 풀소스 전자책 | binance bybit | 업비트 김치프리미엄
'파이썬 > 주식' 카테고리의 다른 글
Python으로 보조지표 MACD 구하기 MACD Oscillator 구하기 (0) | 2019.11.10 |
---|---|
Python으로 RSI(Relative Strength Index) 구하기 (8) | 2019.11.06 |
Python으로 캔들스틱 차트 Candlestick chart 그리기 (5) | 2019.11.02 |
Python으로 주가 이동평균선 그리기 (0) | 2019.10.29 |
Python으로 주가 이동평균 구하기 (0) | 2019.10.29 |
댓글