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

주식 차트 그리기 #1 : mplfinance

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

이 글은 

2022.07.07 - [파이썬] - 주식 데이터 불러오기(yfinance) #1

 

주식 데이터 불러오기(yfinance) #1

python으로 주식이나 지수 데이터를 불러오는 다양한 방법이 있습니다. 그중 Yahoo Finance의 정보를 제공해 주는 pythion 오픈 소스가 있습니다. 바로 yfinance 입니다. yfinance tool 을 사용하기 위하여 pytho

sine-qua-none.tistory.com

에서 이어집니다. 저번 글에서는 yahoo finance를 이용하여 삼성전자의 주가데이터를 불러오는 방법을 알아봤습니다.

 

 

이번 글에서는 불러온  주가데이터를 가지고 차트를 그리는 방법을 알아보겠습니다.

주가 데이터를 차트로 그리는 여러가지 방법이 있는데, 이번 글에서는 mplfinance라는 pthon package를 사용해보겠습니다.

 

mplfinance는 간단히 말해서 matplotlib 이라는 유명한 라이브러리를 가지고 finance와 관련된 여러 가지 차트를 그리는 기능입니다. 해당 tutorial 에서는

The mplfinance package provides utilities for the visualization, and visual analysis, of financial data

와 같이 소개를 하고 있습니다.

 

많은 사람들이 다음과 같이 mpf라는 별칭으로 import를 하며 코딩을 시작합니다.

 

import mplfinance as mpf

 

삼성전자의 주가 데이터를 dataframe으로 불러옵니다.

 

    name = '005930.KS'
    df = yf.download(name, period='1y')
    print(df)
    print('\n')
    print('type of index ', type(df.index))

○ 최근 일인 오늘부터 1y동안의 삼성전자 데이터를 추출합니다.

○ 확인을 위해 df와 df.index의 변수 형식을 출력해서 알아봅니다.

○ 결과는 아래와 같습니다.  mplfinance를 이용해 차트를 그리기 위해서는 두 가지를 check 해야 합니다.

  -  해당 dataframe이 DatetimeIndex 형식으로 되어 있는지 : type(df.index)로 검사

  -  해당 dateframe에 Open, High, Low, Close 이름의 column이 있는지 : 

[*********************100%***********************]  1 of 1 completed
               Open     High      Low    Close     Adj Close    Volume
Date                                                                  
2021-07-08  81100.0  81200.0  79900.0  79900.0  78757.367188  16660998
2021-07-09  79600.0  79800.0  79000.0  79400.0  78264.515625  22720577
2021-07-12  79900.0  80000.0  79500.0  79700.0  78560.226562   9768108
2021-07-13  80000.0  80200.0  79800.0  79800.0  78658.796875   9863450
2021-07-14  79400.0  79600.0  79100.0  79500.0  78363.085938  11575636
...             ...      ...      ...      ...           ...       ...
2022-07-04  56100.0  57400.0  55700.0  57100.0  57100.000000  17807126
2022-07-05  57600.0  58200.0  57200.0  57200.0  57200.000000  14216539
2022-07-06  57300.0  57300.0  56400.0  56400.0  56400.000000  16820461
2022-07-07  56400.0  58700.0  56300.0  58200.0  58200.000000  21322833
2022-07-08  58600.0  59300.0  58200.0  58900.0  58900.000000  11056964

[245 rows x 6 columns]


type of index  <class 'pandas.core.indexes.datetimes.DatetimeIndex'>

Process finished with exit code 0

 

○ 출력해보니, mplfinance를 써서 차트를 그릴 수 있게 생겼습니다. 

 

 

그럼 본격적으로 차트를 그려보도록 하죠.

 

 


 

1. 기본적인 차트

 

    mpf.plot(df)

 

정말 간단합니다.

df의 index가 DatetimeIndex이고 column 중에 Open, High, Low, Close 만 있으면 차트가 그려집니다. 결과를 볼까요?

 

 

자세히 보니 우리가 익숙한 캔들차트가 아니네요. 이것을 바 차트(bar chart)라 부릅니다. 캔들과 유사하지만, 아래 그림처럼 Low, High로 이루어진 기둥(bar)과 왼팔(Open), 오른팔(Close)로 이루어진 모습입니다. 

 

bar chart,&nbsp; 출처:&nbsp;How to Read Forex Bar Charts? - Forex Education

 

어쨌든, mpf.plot(df)처럼 단순하게 코딩하니 bar chart가 그려지는 걸로 봐서 bar chart가 default option인가 봅니다.

 

 

2. 라인 차트

 

    mpf.plot(df, type='line')

종가(Close price) 하아로 꺾은선 차트를 그리고 싶다면, type = 'line'을 추가합니다.

 

line chart

 

 

3. 봉차트(캔들 차트, Candle Chart)

 

    mpf.plot(df, type='candle')

캔들차트를 그리고 싶을 땐, type = 'candle'로 지정하면 됩니다. 참고로 캔들이란,

 

 

그럼 결과 차트를 볼까요.

 

캔들처럼 보이나요?

 

 

 

4. 스타일 가꿔주기

 

앞서 기본으로 그렸던 차트들이 어찌 보면 밋밋할 수 있습니다. mplfinance에서는 여러 재미있는 이름의 style을 제공해 주고 있는데요. 어떤 것들이 있는고 하니,

mpf.available_styles()
['binance', 'blueskies', 'brasil', 'charles', 'checkers', 'classic', 'default', 'ibd', 'kenan', 'mike', 'nightclouds', 'sas', 'starsandstripes', 'yahoo']

 

와 같은 것들이 있습니다. 위의 style 별로 어떤 그래프를 제공해 주는지 한번 보겠습니다.

 

import yfinance as yf
from datetime import datetime, timedelta
import pandas as pd
import mplfinance as mpf

if __name__ == '__main__':

    name = '005930.KS'
    df = yf.download(name, period='1y')

	styles = ['binance',
              'blueskies',
              'brasil',
              'charles',
              'checkers',
              'classic',
              'default',
              'ibd',
              'kenan',
              'mike',
              'nightclouds',
              'sas',
              'starsandstripes',
              'yahoo']


    fig = mpf.figure(figsize=(50, 20))
    for i in range(len(styles)):
        ax = fig.add_subplot(5, 3, i + 1, style =styles[i])
        ax.xaxis.set_visible(False)
        ax.yaxis.set_visible(False)
        mpf.plot(df, type='candle', ax=ax, axtitle=styles[i])
        print(styles[i])
   
    mpf.show()

○ 5 × 3 그림판 ax를 만들고, 각각의 style을 for문을 돌려 지정합니다.

○ xaxis와 yaxis 축을 안 보이게 숨겨 깔끔한 결과를 얻어 봅니다.

 

아래는 결과입니다.

 

 

 

 

 

다양한 스타일의 차트가 얻어지는군요. 구글링을 좀 해 보니, charles라는 스타일을 많이들 쓰는 것 같습니다. 위의 15개 스타일 중 기호에 맞게 쓰면 될 것 같습니다. brazil 스타일은 진짜 브라질 느낌이 나네요.

 

나랑 닮은 스타일이 있다고?

 

 

 

 

5. 거래량도 함께 보기

거래량(volume) 차트를 같이 보는 방법도 아주 쉽습니다. 바로

 

 

    mpf.plot(df, type='candle', style='charles', volume=True)​

 

이렇게 volume = True 옵션을 넣어주면 되는데, 이를 위해서는  df에 Volume 열이 있어야겠죠. 결과는 아래 그래프입니다.

 

 

 

 

 

6. 이동평균선도 함께 보기

이동평균선 그리는 옵션도 간단하게 제공해 줍니다. 이동평균선은 주가의 평균을 연결한 선으로서 주식 매매자들의 평균 매수 매도 가격을 유추할 수 있고, 지지나 저항을 함축하는 경우가 아주 많죠.

coding은 다음과 같이 하면 됩니다.

 

    mpf.plot(df, type='candle', style='charles', mav=(5,10,60))

mav 즉, moving average value를 5일, 10일, 60일로 세팅하여 세 개의 곡선을 그립니다. 결과는 아래 그림과 같습니다.

 

 

 

 

7. 제목 달기, 축 이름 짓기

차트만 그려서 능사는 아니죠. 어떤 차트인지, 축이 뜻하는 바는 뭔지 명시해야 할 필요가 있습니다. 마지막 예제이니만큼 5,6번에서 본 volume과 mav를 모두 넣어서 그려 보도록 하죠.

 

 

    mpf.plot(df, type='candle', style='charles',
             title='Samsung Electronics',
             ylabel='stock price',
             ylabel_lower='volume',
             volume=True,
             mav=(5, 10, 60)
             )

 

○ 제목은 title로 지정합니다.

○ ylabel 은 주가, ylabel_lower는 그 밑의 차트의 y축, 즉 거래량 차트의 y축 이름입니다.

 

 

결과를 보시죠.

 

 

 

지금까지 mplfinance를 이용하여 간단하게 주식 차트를 그리는 방법을 알아봤습니다. 하지만 아무래도 미국 유럽의 컨벤션을 따르다 보니 빨간색이 하락을, 녹색이 상승을 뜻하는 등 우리의 상식과 맞지 않는 부분이 있죠. 차트를 내 임의대로 바꿀 수 있는 자유도 또한 낮은 편이라 다른 툴이 있는지도 한번 살펴봐야겠습니다. 

 

다음 글에서, 주식 차트를 그리는 또 다른 방법을 한번 알아보겠습니다.

728x90
반응형

댓글