지난 블로그에서는 업비트 API를 이용한 거래량 급등 코인 알리미, 텔레그램 알림 봇 등을 다루었는데요. 이번에는 파이썬으로 주어진 캔들 데이터를 이용해 캔들차트를 그리는 법을 다루어 봅니다.
예제로 쓸 데이터는 삼성전자의 2020년 6월 9일부터 1년간의 일봉 데이터인데, 해당 데이터를 먼저 pandas_datareader로 가져옵니다. 데이터 소스는 Naver Finance를 사용했습니다.
from pandas_datareader import data as web
import datetime
start = datetime.datetime(2020, 6, 9)
end = datetime.datetime(2021, 6, 9)
Stock = namedtuple('Stock', ['ticker', 'name'])
stock = Stock(ticker='005930', name='삼성전자')
data_source = 'naver' # 네이버
df = web.DataReader(stock.ticker, data_source, start=start, end=end)
pandas_datareader는 Naver Finance 이외에도 St.Louis FED, OEDC, World Bank 등등 다양한 데이터 소스를 제공하고 있습니다.
다운로드한 캔들 데이터의 형식 구간 별로 [시가, 고가, 저가, 종가, 거래량]으로 다음과 같습니다.
Open High Low Close Volume
Date
2020-06-09 55800 56500 54400 55500 23998831
2020-06-10 55100 55900 54900 55400 16742493
2020-06-11 54500 55100 53200 54300 33815123
2020-06-12 52100 52800 51500 52300 26976019
2020-06-15 51400 52000 49900 49900 28772921
... ... ... ... ... ...
2021-06-03 81300 83000 81100 82800 29546007
2021-06-04 82700 82700 81500 82200 18112259
2021-06-07 82700 82800 81600 81900 16496197
2021-06-08 82300 82600 81800 81900 12781226
2021-06-09 81500 82000 81100 81100 14908823
[249 rows x 5 columns]
이제 plotly를 이용해 캔들차트를 생성할 텐데, 한국의 경우 양/음봉의 채워지는 색상이 다르기 때문에 약간의 조정이 필요합니다. 추가로, 한국에서 주로 쓰이는 5, 20, 60, 120 이동평균선도 같이 추가해봅니다.
data = [{
'type': 'candlestick',
'x': df.index,
'open': df.Open,
'close': df.Close,
'high': df.High,
'low': df.Low,
'name': stock.name,
'increasing_line_color': 'red', # 양봉 색상
'decreasing_line_color': '#398bff', # 음봉 색상
'showlegend': True
}, ]
# 5, 20, 60, 120 이동평균선
for (window, color) in [(5, '#00c50d'), (20, '#ff333a'), (60, '#f48416'),
(120, '#892dff')]:
MA = df.Close.rolling(window=window, min_periods=1).mean()
trace = {
'x': df.index,
'y': MA,
'type': 'scatter',
'mode': 'lines',
'line': {
'width': 1,
'color': color
},
'name': '{} 이동평균선'.format(window)
}
data.append(trace)
마지막으로, 해당 데이터를 html 형태로 출력해봅니다.
title = '{} 차트'.format(stock.name)
layout = go.Layout({
'title': {
'text': title,
'font': {
'size': 12
}
}
})
fig = go.Figure(data=data, layout=layout)
fig.write_html('{}.html'.format(title))
fig.show()
프로그램 수행 시 '삼성전자 차트.html' 파일이 생성되며, 다음과 같은 화면을 보실 수 있습니다.
plotly는 다양한 커스터마이징 옵션을 제공하고 있고, Dash Platform을 통해 적은 노력으로 차트 서비스를 제공할 수도 있습니다.
'코인 > 코인 개발' 카테고리의 다른 글
업비트 API와 Python TA-lib를 이용한 스토캐스틱, RSI 등 보조 지표 활용 (0) | 2021.07.15 |
---|---|
업비트 API를 이용한 코인 RSI 알리미 프로그램 (0) | 2021.07.14 |
업비트(Upbit) API를 이용해 프로그램 개발 시 주의 사항 (1) | 2021.07.09 |
코인 거래량 급등 텔레그램(Telegram) 알림 봇 파이썬(Python)으로 만들기 (7) | 2021.07.08 |
업비트 API를 이용한 코인 거래량 급등 알리미 프로그램 (7) | 2021.07.07 |