본문 바로가기
주식분석/Quant 분석(프로그래밍)

주식 차트 그리기 #2: candlestick_ohlc 시고저종 봉차트

by hustler78 2022. 7. 16.
728x90
반응형

이번 글은 

2022.07.08 - [파이썬] - 주식 차트 그리기 #1 : mplfinance

 

주식 차트 그리기 #1 : mplfinance

이 글은 2022.07.07 - [파이썬] - 주식 데이터 불러오기(yfinance) #1 주식 데이터 불러오기(yfinance) #1 python으로 주식이나 지수 데이터를 불러오는 다양한 방법이 있습니다. 그중 Yahoo Finance의 정보를 제..

sine-qua-none.tistory.com

에서 이어집니다.

 

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
반응형

댓글