728x90
반응형
이번 글은
2022.07.08 - [파이썬] - 주식 차트 그리기 #1 : mplfinance
에서 이어집니다.
mplfinance에서는 candlestick_ohlc라는 캔들 차트, 또는 봉차트 그리는 함수를 제공합니다.
mplfinance.candlestick_ohlc(ax, quotes, width=0.2, colorup=’k’, colordown=’r’, alpha=1.0)
파라미터:
○ ax: 차트를 그리는 영역
○ quotes: 시점과 4개의 가격(시가, 고가, 저가, 종가)로 이루어진 배열
- 중요한 점은 시점 역시 숫자 형식이어야 한다는 점입니다.
○ width: 캔들봉의 폭
○ colorup: 양봉(종가>=시가) 의 색, 우리나라는 빨간색이죠.
○ colordown: 음봉(종가<시가)의 색. 우리나라는 파란색입니다.
○ alpha: 캔들봉의 투명도를 뜻합니다. 1이면 완전 불투명, 0이면 완전 투명을 뜻하고 값은 0과 1 사이입니다.
아래는 candlestick_ohlc를 써서 차트를 그리는 예제입니다.
import yfinance as yf
import pandas as pd
import matplotlib.dates as mpdates
import matplotlib.pyplot as plt
from mplfinance.original_flavor import candlestick_ohlc
if __name__ == '__main__':
name = '005930.KS'
df = yf.download(name, period='3y')
df_show = df.copy()
df_show['Date'] = df_show.index
df_show.info()
df_show['Date'] = df_show['Date'].map(mpdates.date2num)
df_show.info()
df_show = df_show[['Date', 'Open', 'High', 'Low','Close']]
fig, ax = plt.subplots()
candlestick_ohlc(ax, df_show.values, width=0.6, colordown='b', colorup='r', alpha=1)
ax.grid(True)
date_format = mpdates.DateFormatter('%Y/%m/%d')
years = mpdates.YearLocator()
ax.xaxis.set_major_locator(years)
ax.xaxis.set_major_formatter(date_format)
# fig.autofmt_xdate()
fig.tight_layout()
plt.show()
코드를 간략 분석해 보면 아래와 같습니다.
name = '005930.KS' #삼성전자 ticker를 설정하고
df = yf.download(name, period='3y') # 현재에서 과거3년 기간의 삼성전자 정보를 불러옵니다.
df_show = df.copy() #df의 복사본을 만듭니다.
df_show['Date'] = df_show.index #index와 같은 값의 column을 Date라는 이름으로 만듬
df_show.info() #데이터 형식을 알아보기 위해 information을 출력
○ 위 결과를 보면
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 741 entries, 2019-07-15 to 2022-07-15
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Open 741 non-null float64
1 High 741 non-null float64
2 Low 741 non-null float64
3 Close 741 non-null float64
4 Adj Close 741 non-null float64
5 Volume 741 non-null int64
6 Date 741 non-null datetime64[ns]
dtypes: datetime64[ns](1), float64(5), int64(1)
memory usage: 46.3 KB
즉 Date 형식이 datetime64라는 것을 알 수 있죠. candlestick_ohlc을
df_show['Date'] = df_show['Date'].map(mpdates.date2num)
#date2num 함수로 Date column의 data형식을 숫자형으로 바꿈
df_show.info() #information을 출력하여 확인
○ date2 num 함수는 다음과 같습니다.
matplotlib.dates.date2num(d) datetime objects 를 Matplotlib dates로 변환해 주는 함수 Parameters d: datetime.datetime or numpy.datetime64 Returns float or sequence of floatsNumber of days since the epoch. (epoch의 default sms'1970-01-01T00:00:00') 에졔) 1970년 1월1일 정오 ("1970-01-01T12:00:00") 는 0.5. |
○ 결과는 아래와 같습니다.
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 741 entries, 2019-07-15 to 2022-07-15
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Open 741 non-null float64
1 High 741 non-null float64
2 Low 741 non-null float64
3 Close 741 non-null float64
4 Adj Close 741 non-null float64
5 Volume 741 non-null int64
6 Date 741 non-null float64
dtypes: float64(6), int64(1)
memory usage: 46.3 KB
Date 형식이 float64로 변경되었습니다.
df_show = df_show[['Date', 'Open', 'High', 'Low','Close']]
이제 Date, Open, High, Low, Close 열만 선택하여 candlestick_OHLC 가 받을 수 있는 형식의 df_show를 만듭니다.
fig, ax = plt.subplots() # 차트 그릴 세팅을 합니다.
candlestick_ohlc(ax, df_show.values, width=0.6, colordown='b', colorup='r', alpha=1)
# ax에 차트를 그림
# data는 df_show에 있는 값이므로 df_show.values
# candle의 폭은 0.6으로 설정
# 음봉의 색깔 colordown 는 blue, 양봉의 색깔 colorup은 red
# alpha=1 이어서 불투명한 색으로 봉을 설정
ax.grid(True)
# ax에 격자를 보여준다.
date_format = mpdates.DateFormatter('%Y/%m/%d')
# Date 쓰는 형식을 YYYY/mm/dd 로 설정한다.
years = mpdates.YearLocator()
#Locator를 YearLocator를 설정 default는 1월 1일
ax.xaxis.set_major_locator(years)
# x축에 몇년 1월1일 tick을 display 함
ax.xaxis.set_major_formatter(date_format)
# dateformat은 date_format 즉, 위에서 정의한 YYYY/mm/dd 형태로 출력
# fig.autofmt_xdate()
# x축의 날짜 tick을 예쁘게 회전시켜준다든지 하는 함수인데, 넘어가도 됨
fig.tight_layout()
이제 code를 실행시키면 다음과 같습니다.
이렇게 멋있는 캔들 차트를 그릴 수 있게 됩니다.
728x90
반응형
'주식분석 > Quant 분석(프로그래밍)' 카테고리의 다른 글
기술적 지표 #1. AB Ratio (0) | 2023.03.08 |
---|---|
지지선과 저항선 (0) | 2023.03.05 |
주식 데이터 불러오기 : FinanceDataReader 라이브러리 (0) | 2023.03.02 |
주식 차트 그리기 #1 : mplfinance (0) | 2022.07.08 |
주식 데이터 불러오기(yfinance) #1 (0) | 2022.07.07 |
댓글