Python에는 주식차트를 표현하기 위한 많은 라이브러리들이 존재한다. 그 중 대표적인 것은 mplfinance, Plotly, Bokeh 등이 있는데 mplfinance 와 Plotly 를 사용하여 캔들차트를 만들어 본다.
OHLC VS Candle stick
OHLC는 Open(시가), High(고가), Low(저가), Close(종가) 의 합성어이다. 서양에서는 아래 그림의 왼쪽과 같은 바 형태의 차트를 사용하고 한국과 일본은 우측과 같은 캔들차트를 사용한다.
라이브러리 설치
pip install pandas-datareader # 주식 데이터 조회
pip install mplfinance # 금융차트only 라이브러리
pip install plotly # 차트 라이브러리
주식 데이터 조회
pandas_datareader 라이브러리의 네이버금융(Naver finance) api를 사용하여 삼성전자 주식 데이터를 조회한다.
>>> import mplfinance as mpf
>>> import pandas_datareader as web
# 005930 삼성전자
>>> df = web.naver.NaverDailyReader('005930', start='20201201' , end='20210119').read()
>>> df
Open High Low Close Volume
Date
2020-12-01 67100 68300 67100 67800 22327173
2020-12-02 68400 69900 68300 69500 29703942
2020-12-03 70100 70500 69300 69700 23677989
2020-12-04 70400 72100 70100 71500 28130533
2020-12-07 72400 73500 71900 72900 28490496
2020-12-08 72200 72900 71600 71700 25000338
2020-12-09 72100 73900 72000 73900 24077996
2020-12-10 72700 73800 72500 72900 39882928
2020-12-11 73500 73800 73100 73400 18486672
2020-12-14 73600 74500 73200 73800 21510415
2020-12-15 73800 74100 73300 73800 20863671
2020-12-16 74100 74500 73400 73800 17512081
2020-12-17 73400 73700 72600 73300 24293214
2020-12-18 73300 73700 73000 73000 17613029
2020-12-21 73100 73400 72000 73000 20367355
2020-12-22 72500 73200 72100 72300 16304910
2020-12-23 72400 74000 72300 73900 19411326
2020-12-24 74100 78800 74000 77800 32502870
2020-12-28 79000 80100 78200 78700 40085044
2020-12-29 78800 78900 77300 78300 30339449
2020-12-30 77400 81300 77300 81000 29417421
2021-01-04 81000 84400 80200 83000 38655276
2021-01-05 81600 83900 81600 83900 35335669
2021-01-06 83300 84500 82100 82200 42089013
2021-01-07 82800 84200 82700 82900 32644642
2021-01-08 83300 90000 83000 88800 59013307
2021-01-11 90000 96800 89500 91000 90306177
2021-01-12 90300 91400 87800 90600 48682416
2021-01-13 89800 91200 89100 89700 36068848
2021-01-14 88700 90000 88700 89700 26393970
2021-01-15 89800 91800 88000 88000 33431809
2021-01-18 86600 87300 84100 85000 43227951
2021-01-19 84500 88000 83600 87000 39895044
mplfinance
pandas_datareader api를 사용하여 조회된 dataframe은 Open, High, Low, Close 이름의 컬럼명을 갖는다. mplfinance는 위 컬럼명을 default로 인식한다. 따라서 컬럼명을 수정할 필요 없이 아래와 같이 차트를 호출할 수 있다.
>>> mpf.plot(df, type='candle')
type 미지정 시 OHLC 형태의 차트가 출력된다.
위 코드 호출 후 아래와 같은 오류가 발생한 경우 dataframe의 형태를 int형으로 변환한다.
>>> mpf.plot(df, type='candle')
Traceback (most recent call last):
File "<pyshell#26>", line 1, in <module>
mpf.plot(df, type='candle')
File "C:\Users\KUH\AppData\Local\Programs\Python\Python39\lib\site-packages\mplfinance\plotting.py", line 281, in plot
dates,opens,highs,lows,closes,volumes = _check_and_prepare_data(data, config)
File "C:\Users\KUH\AppData\Local\Programs\Python\Python39\lib\site-packages\mplfinance\_arg_validators.py", line 59, in _check_and_prepare_data
raise ValueError('Data for column "'+str(col)+'" must be ALL float or int.')
ValueError: Data for column "Open" must be ALL float or int.
현재 dataframe 컬럼타입 확인.
>>> df.dtypes
Open object
High object
Low object
Close object
Volume object
dtype: object
>>> df = df.astype(int)
>>> df.dtypes
Open int32
High int32
Low int32
Close int32
Volume int32
dtype: object
matplotlib 차트 스타일링
make_marketcolors를 사용해서 차트의 세부 컬러 설정을 할 수 있다. 설정한 컬러 셋팅을 make_mpf_style 함수에 인자로 전달하여 스타일 객체를 만들고 해당 객체를 plot 에 전달하면 지정한 스타일링으로 차트가 출력된다.
>>> colorset = mpf.make_marketcolors(up='tab:red', down='tab:blue', volume='tab:blue')
>>> s = mpf.make_mpf_style(marketcolors=colorset)
>>> mpf.plot(df[:60], type='candle', volume=True, style=s) # 최근 60 row data 출력
volume 옵션으로 거래량을 출력할 수 있다. ( dataframe에 volume컬럼 참조 )
Plotly
Plotly는 데이터 시각화를 위한 다양한 차트를 제공한다. 캔들차트 생성을 위해서 Candlestick 함수를 호출한다. mplfinance와 다르게 인덱스 및 open, high, low, close 인자를 설정해야 한다.
import plotly.graph_objects as go
>>> candle = go.Candlestick(x=df.index)
>>> candle = go.Candlestick(
x=df.index,
open=df['Open'],
high=df['High'],
low=df['Low'],
close=df['Close'])
>>> fig = go.Figure(data=candle)
>>> fig.show()
go.Figure는 Figure 객체를 리턴한다. Figure 객체를 사용하여 show() 출력하고 add_
default로 하단에 slider가 위치한다. slider를 조정하여 데이터를 확대/축소할 수 있다. 차트 봉에 마우스오버 시값 수치가 박스로 표시된다.
다음과 같이 slider를 옵션으로 제거할 수 있다.
ch.update_layout(xaxis_rangeslider_visible=False)
Plotly 차트 스타일링
>>> candle = go.Candlestick(
x=df.index,
open=df['Open'],
high=df['High'],
low=df['Low'],
close=df['Close'],
increasing_line_color='red', # 상승봉
decreasing_line_color='blue' # 하락봉
)
>>> ch = go.Figure(data=candle)
>>> ch.show()
increasing_line_color, decreasing_line_color로 상승/하락 봉의 스타일링을 지정한다.
마무리하며..
기본적으로 많이 사용되는 파이썬 차트 라이브러리를 사용하여 캔들차트를 출력하는 간단한 예제를 살펴보았다. 2편에서는 Plotly를 사용하여 캔들차트와 거래량 차트를 동시에 출력하는 기능을 알아본다.
'python > 주식' 카테고리의 다른 글
3. Python - Plotly 캔들차트 + 이동평균선 ( feat. rolling API 사용법 ) (4) | 2021.01.27 |
---|---|
2. Python - Plotly 캔들 + 거래량 차트 만들기 ( 복수 차트 생성 ) (1) | 2021.01.26 |
전자공시 Open API 활용(6), pandas 기초 - 재무제표 json 데이터를 pandas DataFrame으로 변환 (4) | 2020.03.29 |
전자공시 Open API 활용(5), 기업 재무제표 조회 API ( 분기/반기/사업보고서 - 재무상태표, 손익계산서 ) (4) | 2020.03.28 |
python - 다트.전자공시 Open API 활용(4), 공시대상회사 조회 - 대화형 콘솔 만들기 (0) | 2020.03.07 |