파이썬 바이낸스 API로 시계열 데이터 분석. 판다스, 볼린저 밴드 (Bollinger Band)
파이썬 바이낸스 API로 시계열 데이터 분석을 계속하고 있습니다. 지금까지 파이썬 판다스로 이동평균선, 스토캐스틱, RSI와 같은 기술적 지표들을 직접 구해봤습니다. 이번에는 사용 빈도가 높은 기술적 지표 중 하나인 볼린저 밴드에 대해 알아보겠습니다.
글의 순서
볼린저 밴드 (Bollinger Band)
볼린저밴드 구하는 방법
파이썬 코드 : 파이썬 바이낸스 API, 판다스로 볼린저밴드 구하기
볼린저 밴드 (Bollinger Band)
주식이나 암호화폐 거래에서 투자자들이 사용하는 보조지표 중 가장 많이 사용하는 것은 이동평균선이고, 그 다음이 일목균형표, 볼린저밴드 순입니다.
볼린저 밴드는 주가의 변동이 표준 정규분포를 따른다는 가정에서 출발한 것입니다. 주식 가격 시계열 그래프에서 주가의 위아래에 밴드를 표시해서 주가가 상대적으로 높은지 낮은지를 알려줍니다.
볼린저 밴드 구하는 방법
볼린저밴드는 3개의 선으로 구성됩니다. 주식 가격으로 예를 들어보자면, 중앙에 있는 선이 주가의 20일 이동평균선이고, 상단에 있는 선이 20일 표준편차를 1배 또는 2배해서 더한 선, 하단에 있는 선이 20일 표준편차를 1배 또는 2배해서 뺀 선입니다.
상단 선과 하단 선을 상단밴드, 하단밴드라고 부릅니다. 현재의 주가가 상단 밴드 근처에 있을수록 상대적인 고점을, 하단 밴드 근처에 있을수록 상대적인 저점을 나타냅니다.
다시 정리해보면,
상단밴드와 하단밴드는 20일 이동평균선을 구하듯, 20일 표준편차를 구한 후, 이 표준편차의 1배, 2배 등으로 나타낼 수 있습니다. 표준편차는 ‘20일’과 같이 이동평균선과 동일한 시간 간격으로 구합니다. 표준편차가 크다는 것은 주가 변동성이 높다는 것을 의미합니다.
볼린저 밴드
중간 볼린저 밴드 = 20일 이동평균선
상단 볼린저밴드 = 중간 볼린저밴드 + (2 × 20일 표준편차)
하단 볼린저밴드 = 중간 볼린저밴드 – (2 × 20일 표준편차)
파이썬 코드 : 파이썬 바이낸스 API, 판다스로 볼린저 밴드 구하기
직접 해보는 것이 가장 빠르게 이해할 수 있는 방법입니다. 볼린저 밴드 구하는 방법을 ‘판다스 데이터프레임을 이용한 볼린저 밴드’ 파이썬 코드에 나타내었습니다.
비트코인 가격 데이터를 파이썬 바이낸스 API로 가져오는 과정은 지난 포스팅과 동일합니다. 볼린저 밴드를 구하기 위해 판다스 rolling() 함수를 사용했습니다. 밴드를 회색으로 보여주기 위한 matplotlib.pyplot의 fill_between 함수도 유심히 봐 주시기 바랍니다. 이 포스팅에서는 그래프가 C:/_python/pandas/technical_analysis/ 라는 폴더에 저장됩니다. 물론 파일이 저장되는 경로는 각자 개인이 원하는 곳으로 지정하시면 되겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
import os import time import pandas as pd from binance.client import Client import datetime from datetime import datetime, timezone, timedelta import matplotlib.pyplot as plt #01) 바이낸스 계정 접속 api_key = os.getenv('Binan_API_KEY') api_secret = os.getenv('Binan_SECRET_KEY') client = Client(api_key, api_secret) print('\n','[ BINANCE ACCOUNT ACCESSED ]') #02) 입력 : 시계열 데이터 수집 구간(tstt~tend), 시간 간격(t_interval) tstt_utc = '2022-12-01 00:00:00' tend_utc = '2023-02-28 23:59:59' t_interval = '4h' #03) 파이썬 바이낸스 API로 비트코인 가격 데이터 가져오기 bars = client.get_historical_klines('BTCUSDT', t_interval, tstt_utc, tend_utc, limit=1000) #03-1) ohlcv 데이터만 추출 for i in bars: del i[6:] #04) 데이터프레임 열 이름 붙여주기 df = pd.DataFrame(bars, columns=['time_open','open','high','low','close','volume']) #05) 데이터프레임 열 type을 실수형으로 변환 df = df.astype({'open' : 'float', 'high' : 'float', 'low' : 'float', 'close' : 'float', 'volume' : 'float'}) print('\n','#05) ---') print(df.head(5)) #06) Date 열의 형태를 epoch에서 Pandas.Timestamp로 변경 df['time_open'] = df['time_open'].apply(lambda date: pd.Timestamp(time.ctime(date/1000.))) print('\n','#06) ---') print(df.head(5)) # ====== 판다스 시계열 데이터 분석 : 볼린저 밴드(Bollinger Band) ====== #07-1) 시간 간격 개수 설정 : 20개 window = 20 #07-2) 20개 시간 간격 기준 이동평균선 df['sma'] = df['close'].rolling(window).mean() #07-3) 20개 시간 간격 기준 표준편차 df['stddev'] = df['close'].rolling(window).std() #07-4) 볼린저 밴드 : 상단(upper) ~ 하단(lower) df['upper'] = df['sma'] + ( 2.0 * df['stddev']) df['lower'] = df['sma'] - ( 2.0 * df['stddev']) print('\n','#07) ---') print(df) #08) 시계열 데이터 가시화 : 비트코인 볼린저 밴드 file_path = 'C:/_python/pandas/technical_analysis/' plt.figure(figsize=(10,9)) plt.plot(df['time_open'],df['close'], label='close') plt.plot(df['time_open'],df['upper'], 'r--', label='upper band') plt.plot(df['time_open'],df['sma'], 'k--', label='SMA20') plt.plot(df['time_open'],df['lower'], 'c--', label='lower band') # #08-1) 비트코인 볼린저 밴드를 회색영역으로 표시 plt.fill_between(df['time_open'],df['upper'],df['lower'], color='0.9') plt.title('BTC Price(4h) & Bollinger Band(20*4h, 2 Std.Dev.)') plt.ylabel('Price (USDT)') plt.legend(loc='best') plt.grid(True) plt.savefig(file_path +'Bollinger_band.png') plt.show() |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
[ BINANCE ACCOUNT ACCESSED ] #05) --- time_open open high low close volume 0 1669852800000 17165.53 17236.29 17088.01 17150.98 38426.27207 1 1669867200000 17150.98 17168.00 17059.58 17070.21 28959.52128 2 1669881600000 17070.21 17137.75 17042.37 17102.47 33637.46765 3 1669896000000 17102.47 17324.00 16895.02 16977.67 72980.67845 4 1669910400000 16977.60 17000.00 16897.15 16951.80 33234.91929 #06) --- time_open open high low close volume 0 2022-12-01 09:00:00 17165.53 17236.29 17088.01 17150.98 38426.27207 1 2022-12-01 13:00:00 17150.98 17168.00 17059.58 17070.21 28959.52128 2 2022-12-01 17:00:00 17070.21 17137.75 17042.37 17102.47 33637.46765 3 2022-12-01 21:00:00 17102.47 17324.00 16895.02 16977.67 72980.67845 4 2022-12-02 01:00:00 16977.60 17000.00 16897.15 16951.80 33234.91929 #07) --- time_open open high low close volume sma stddev upper lower 0 2022-12-01 09:00:00 17165.53 17236.29 17088.01 17150.98 38426.27207 NaN NaN NaN NaN 1 2022-12-01 13:00:00 17150.98 17168.00 17059.58 17070.21 28959.52128 NaN NaN NaN NaN 2 2022-12-01 17:00:00 17070.21 17137.75 17042.37 17102.47 33637.46765 NaN NaN NaN NaN 3 2022-12-01 21:00:00 17102.47 17324.00 16895.02 16977.67 72980.67845 NaN NaN NaN NaN 4 2022-12-02 01:00:00 16977.60 17000.00 16897.15 16951.80 33234.91929 NaN NaN NaN NaN .. ... ... ... ... ... ... ... ... ... ... 535 2023-02-28 13:00:00 23467.01 23470.44 23212.80 23236.68 29133.30210 23284.2370 199.354862 23682.946724 22885.527276 536 2023-02-28 17:00:00 23235.63 23421.98 23200.00 23392.69 33078.50122 23299.9895 194.560472 23689.110444 22910.868556 537 2023-02-28 21:00:00 23391.96 23579.12 23315.42 23518.30 68386.61130 23320.0465 195.395543 23710.837587 22929.255413 538 2023-03-01 01:00:00 23519.08 23600.00 23205.06 23264.36 54116.84831 23334.0720 179.406559 23692.885118 22975.258882 539 2023-03-01 05:00:00 23263.38 23343.55 23020.97 23141.57 53528.62659 23340.8415 168.612744 23678.066988 23003.616012 [540 rows x 10 columns] |
마치며 …
파이썬 바이낸스 API로 시계열 데이터 분석 중입니다. 지금까지 파이썬 판다스로 이동평균선, 스토캐스틱, RSI와 같은 기술적 지표들을 직접 구해봤었는데, 이번 포스팅에서는 여기에 볼린저 밴드를 더했습니다.
주식 가격이나, 코인 가격에 대한 시계열 분석을 위해서는 분석 도구들을 많이 알면 많이 알수록 유리합니다. 다음 포스팅에서는 볼린저 밴드에서 확인할 수 있는 볼린저 밴드 지표에 대해 알아보겠습니다.
함께 참고하면 더 좋은 글 :
1. 바이낸스 코인거래소 API Key로 계좌에 접속하는 파이썬 프로그래밍
2. 파이썬 바이낸스 API로 시계열 데이터를 가져오는 파이썬 프로그래밍
3. 바이낸스 API 보안을 위한 환경 변수 설정 : 윈도우 10
4. 파이썬 바이낸스 API 시계열 데이터분석. 판다스 시간 처리
5. 파이썬 바이낸스 API로 차트 분석 : 판다스 이동평균선
6. 파이썬 바이낸스 API로 차트 분석. 판다스 스토캐스틱
7. 파이썬 바이낸스 API로 차트 분석. 판다스 RSI (상대강도지수)
8. 파이썬 프로그래밍 시작
참고자료
[1] 파이썬 바이낸스 API로 가져오는 ohlcv 데이터 : python-binance Docs >> get_historical_klines
[2] 김황후(2020), 파이썬 증권 데이터 분석, 한빛미디어
쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.