파이썬 바이낸스 API, mplfinance로 캔들 차트 파라미터 연습
시계열 데이터를 한눈에 확인하면서, 1시간, 4시간, 하루 등의 시간 동안 가격의 변동까지 확인할 수 있는 그래프가 캔들 차트입니다. 이번 포스팅을 통해 matplotlib의 mplfinance 패키지를 적용한 캔들 차트가 익숙해지실 것입니다. 파이썬 바이낸스 API로 데이터를 가져온 후, 캔들 차트의 의미부터 차트 파라미터 활용법까지 익혀 보겠습니다.
글의 순서
ohlc 차트 vs. 캔들 차트
파이썬 파이낸스 API, mplfinance로 캔들 스틱 차트 그리기 과정
캔들 차트 파라미터 연습
파이썬 코드 : 캔들 차트 파라미터 연습
ohlc 차트 vs. 캔들 차트
ohlc 차트나, 캔들 차트(또는 캔들 스틱 차트)는 주식, 선물, 외환과 같은 자산의 변동을 한눈에 파악할 수 있도록 만든 그래프입니다. ohlc 차트는 미국에서 주로 사용하고 있으며, 일본에서 개발된 캔들 차트틑 전 세계에서 널리 사용되고 있습니다. ohlc 차트나 캔들 차트로부터 특정 시간 구간에서 가격이 어떻게 변화했는지를 알 수 있습니다.
ohlc 차트에서 ohlc는 시작가, 최고가, 최저가, 종료가를 의미합니다. 구체적으로 o는 시작가(open), h는 최고가(high), l은 최저가(low), c는 종료가(close)입니다. 바(bar) 차트라고도 부르며, 막대기 안에 시가, 고가, 저가, 종가를 모두 나타냅니다. 시가를 막대이의 왼쪽에, 종가를 막대의 오른쪽에 표시하기 때문에, 색깔을 표시하지 않더라도, 그 구간에서 가격이 상승했었는지, 하락했었는지 알 수 있습니다.
캔들차트는 굵은 막대기와 가는 선으로 구성되어 있습니다. 굵은 막대기는 시가와 종가를 표시해주며, 가는 선은 그날의 최고가와 최저가를 표시해줍니다. 시작과 종료를 표시할 수 없기 때문에 캔들차트에는 색깔도 함께 표시해줘야 그날이 상승했었는지, 하락했었는지를 알 수 있습니다.
파이썬 파이낸스 API, mplfinance로 캔들 스틱 차트 그리기 과정
(1) 바이낸스 계정에 접속
(2) 데이터 수집 구간과 시간 간격 설정
파이썬 바이낸스에서는 우리가 원하는 구간과 시간 간격으로 데이터를 가져올 수 있습니다. 이 포스팅에서는 비트코인에 대한 시계열 데이터를 2023년 1월 1일부터 1월28일까지, 12시간 간격으로 가져옵니다.
(3) ohlcv 데이터 가져온 후 판다스 데이터프레임에 저장
ohlc 뒤에 있는 v는 거래량(volume)을 나타냅니다. 파이썬 바이낸스 API의 get_historical_klines() 함수로 코인 가격을 시계열 데이터로 쉽게 가져올 수 있습니다. 이 함수의 출력값으로부터 ohlcv 데이터만 발라냅니다.
(4) 판다스 데이터프레임 열 이름 붙이고, 데이터 타입을 실수형으로 바꿔주기
각 데이터의 열 이름을 Date, Open, High, Low, Close, Volume으로 정해준 후, 데이터 type을 실수형으로 바꿉니다.
(5) Date 열의 형태를 epoch에서 Pandas.Timestamp로 변경 후 Date열을 인덱스로 설정
파이썬 바이낸스 API의 get_historical_klines() 함수로 코인 가격을 가져오면, 시작 시각이 epoch 형태입니다. mplfinance로 캔들 차트를 그리려면 이 시각을 UTC 형태로 바꿔야 합니다. 이때 판다스의 Timestamp 함수를 사용합니다.
이 5단계가 파이썬 파이낸스 API로 가져온 시계열 데이터를 캔들 차트로 그리는데 필요한 핵심 부분입니다. epoch를 UTC로 바꾸는 과정은 아래의 두 포스팅에서 확인해주세요.
파이썬 바이낸스 API 시계열 데이터분석. 판다스 시간 처리
파이썬 프로그래밍 time 이해 : timestamp, UTC, KST
(6) mplfinance의 plot 함수로 캔들 차트 그리기
ohlcv 데이터를 판다스 데이터프레임 변수인 df에 넣어 뒀다고 가정할 때, mplfinance.plot(df)라는 한 줄의 명령어로 ohlc 스틱 차트가 그려집니다. 캔들 차트로 바꾸고 싶다면, type=‘candle’처럼 type이라는 인자를 추가합니다.
캔들 차트 파라미터 적용 연습
matplotlib의 mplfinance 패키지로는 mpf.plot(df, type=’candle’)라는 한 줄로 캔들차트를 만들 수 있습니다. mpf.plot(df)처럼 type=’candle’을 생략하면 ohlc 차트가 그려집니다. mpf.plot(df)를 기본으로 type, volume, mav, title, tight_layout, figration 등, 인자를 추가하는 대로 캔들 차트에서 더 많은 정보를 확인할 수 있습니다.
직접 해보는 것이 가장 빠르게 배울 수 있는 방법입니다. 아래 ohlc 차트, 캔들 차트를 위한 파라미터를 파이썬 코드 안에 넣어서 하나씩 확인해 보시기 바랍니다. mpf.plot(df)로 ohlc 차트를 그린 후 이 차트를 닫지 않으면 코드의 그 다음 줄로 진행되지 않습니다. 기본값이 차트를 그린 후 그 다음 줄로 가는 것을 막기 때문인데, 그 다음 줄로 넘어가게 하려면 mpf.plot(df, block=False)에서 처럼 block=False라는 인자를 추가해줘야 합니다.
mpf.plot(df)
mpf.plot(df, type=’candle’)
mpf.plot(df, type=’candle’, volume=True)
mpf.plot(df, type=’candle’, volume=True, mav=(3,6,9)
mpf.plot(df, type=’candle’, volume=True, mav=(3,6,9), title=’BTC’)
mpf.plot(df, type=’candle’, volume=True, mav=(3,6,9), title=’BTC’, tight_layout=True)
mpf.plot(df, type=’candle’, volume=True, mav=(3,6,9), title=’BTC’, tight_layout=True, figratio=(10,5))
파이썬 코드 : 캔들 차트 파라미터 연습
matplotlib의 mplfinance 패키지로 캔들 차트 그리는 과정을 아래의 실습코드에 구현하였습니다. matplotlib의 mplfinance 패키지를 이용하면 단 한줄로 캔들 차트를 그릴 수 있는데, 물론 판다스 데이터프레임에 캔들차트로 그리고자 하는 ohlcv 데이터가 저장되어 있어야 합니다.
코드를 실행하면 #01)~#06) 까지의 결과가 콘솔에 출력되며, savefig라는 인자로 넘겨준 캔들 차트 그림 파일이 저장됩니다. 먼저 위의 ‘캔들 차트 파라미터 연습’ 절에서 보여드린 명령어를 한 줄씩 확인해 보실 것을 추천합니다. 그 다음에는 savefig를 이용하여 차트를 그림 파일로 저장한 후 비교해 보시면 되겠습니다. 절대 경로를 표시하기 위해서 file_path라는 변수를 만들었습니다. file_path + 를 붙이면 파일의 절대 경로와 파일 이름이 완성됩니다. 예를 들어
savefig=file_path + ’01_btc_ohlc.png’
는
C:/_python/pandas/candle/01_btc_ohlc.png
라는 경로에 저장됩니다.
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 import numpy as np from binance.client import Client import datetime from datetime import datetime, timezone, timedelta import mplfinance as mpf #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) 입력 : 시계열 데이터 수집 구간, 시간 간격, K tstt_utc = '2023-01-01 00:00:00' tend_utc = '2023-01-28 23:59:59' t_interval = '12h' bars = client.get_historical_klines('BTCUSDT', t_interval, tstt_utc, tend_utc, limit=1000) #03) ohlcv 데이터를 판다스 데이터프레임에 저장 후 ohlcv 데이터만 추출 df = pd.DataFrame(bars) #03-1) ohlcv 데이터만 추출 for i in bars: del i[6:] df = pd.DataFrame(bars) print('\n', '#03-1)') print(df.head(3)) #04) 데이터프레임 열 이름 붙여주기 df = pd.DataFrame(bars, columns=['Date','Open','High','Low','Close','Volume']) print('\n','#04) ---') print(df.head(3)) #05) 데이터프레임 열 type을 실수형으로 변환 df = df.astype({'Open' : 'float', 'High' : 'float', 'Low' : 'float', 'Close' : 'float', 'Volume' : 'float'}) print('\n','#05) ---') print(df.head(3)) #06) Date 열의 형태를 epoch에서 Pandas.Timestamp로 변경 후 Date 열을 index로 설정 df['Date'] = df['Date'].apply(lambda date: pd.Timestamp(time.ctime(date/1000.))) df.set_index('Date', inplace=True) print('\n','#06) ---') print(df.head(3)) file_path = 'C:/_python/pandas/candle/' # mpf.plot(df, block=False) # mpf.plot(df) mpf.plot(df, block=False, savefig=file_path + '01_btc_ohlc.png') mpf.plot(df, block=False, type='candle', savefig=file_path + '02_btc_candle.png') mpf.plot(df, block=False, type='candle', volume=True, savefig=file_path + '03_btc_candle_volume.png') mpf.plot(df, block=False, type='candle', volume=True, mav=(3,6,9), savefig=file_path + '04_btc_candle_volume_mav.png') mpf.plot(df, block=False, type='candle', volume=True, mav=(3,6,9), title='BTC', savefig=file_path + '05_btc_candle_volume_mav_title.png') mpf.plot(df, block=False, type='candle', volume=True, mav=(3,6,9), title='BTC', tight_layout=True, savefig=file_path + '06_btc_candle_volume_mav_title_layout.png') mpf.plot(df, block=False, type='candle', volume=True, mav=(3,6,9), title='BTC', tight_layout=True, figratio=(10,5), savefig=file_path + '07_btc_candle_volume_mav_title_layout_ratio.png') |
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 |
[ BINANCE ACCOUNT ACCESSED ] #03-1) 0 1 ... 4 5 0 1672531200000 16541.77000000 ... 16556.66000000 47964.03143000 1 1672574400000 16556.66000000 ... 16616.75000000 48961.38231000 2 1672617600000 16617.17000000 ... 16735.11000000 68758.29807000 [3 rows x 6 columns] #04) --- Date Open ... Close Volume 0 1672531200000 16541.77000000 ... 16556.66000000 47964.03143000 1 1672574400000 16556.66000000 ... 16616.75000000 48961.38231000 2 1672617600000 16617.17000000 ... 16735.11000000 68758.29807000 [3 rows x 6 columns] #05) --- Date Open High Low Close Volume 0 1672531200000 16541.77 16559.77 16499.01 16556.66 47964.03143 1 1672574400000 16556.66 16628.00 16533.68 16616.75 48961.38231 2 1672617600000 16617.17 16772.01 16548.70 16735.11 68758.29807 #06) --- Open High ... Close Volume Date ... 2023-01-01 09:00:00 16541.77 16559.77 ... 16556.66 47964.03143 2023-01-01 21:00:00 16556.66 16628.00 ... 16616.75 48961.38231 2023-01-02 09:00:00 16617.17 16772.01 ... 16735.11 68758.29807 |
마치며 …
파이썬 바이낸스 API로 가져온 비트코인 가격 변동을 한 눈에 확인하기 위해 캔들 차트 그리는 법을 정리하였습니다. 파이썬 판다스 mplfinance 패키지의 plot 함수를 이용하면 손쉽게 캔들 차트를 그릴 수 있습니다. 이번 포스팅에서는 파이썬 판다스 mplfinance 패키지의 plot 함수 파라미터를 추가하고, 바꿔가며 캔들 차트를 만들어보았습니다.
함께 참고하면 더 좋은 글 :
1. 파이썬 바이낸스 API와 판다스 캔들 스틱 차트로 시계열 데이터 분석
2. mplfinance 캔들 차트 스타일
3. 캔들 차트 스타일 변경 (mplfinance, customization)
4. 파이썬 데이터 분석 : 판다스 데이터프레임 통계량, 그래프
5. 파이썬 바이낸스 API 시계열 데이터분석. 판다스 시간 처리
6. 바이낸스 코인거래소 API Key로 계좌에 접속하는 파이썬 프로그래밍
7. 파이썬 바이낸스 API로 시계열 데이터를 가져오는 파이썬 프로그래밍
8. 파이썬 데이터 분석 : 판다스 데이터프레임 통계량, 그래프
9. 파이썬 프로그래밍 시작
참고자료
Financial Markets Data Visualization using Matplotlib