본문 바로가기
파이썬/주식

Python으로 볼린저밴드 Bollinger Bands 보조지표 계산

by 행복론자 2019. 11. 3.

 

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 - [파이썬/가상화폐] - [전자책] 바이낸스 코인선물자동매매 시스템 개발 방법을 담은 책이 출시되었습니다.

 

[전자책] 바이낸스 코인선물자동매매 시스템 개발 방법을 담은 책이 출시되었습니다.

🎁 바이낸스 자동매매 시스템 개발 방법을 담은 책이 출시되었습니다. "나 대신 일해주는 코인선물자동매매 프로그램 개발, 노하우 및 소스를 모두 공개합니다" ✔️ Q: 무슨 내용인가요? Python

jsp-dev.tistory.com

 

2022.11.05 - [파이썬/가상화폐] - [공지] 코인거래소별 프리미엄 체크봇 개발 가이드와 풀소스 전자책 | binance bybit | 업비트 김치프리미엄

 

[공지] 코인거래소별 프리미엄 체크봇 개발 가이드와 풀소스 전자책 | binance bybit | 업비트 김치프

https://kmong.com/gig/417785 거래소별 코인 프리미엄 알림봇 개발 가이드를 드립니다 | 36000원부터 시작 가능한 총 평점 5점의 3개 총 작업 개수 완료한 총 평점 5점인 JSDEV의 전자책, 투잡·재테크 전자

jsp-dev.tistory.com

반응형
이 포스팅은 쿠팡파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

댓글