프로그래밍/파이썬

[Python] 파이썬 mplfinance로 캔들차트 그리기 (feat. OHLC)

매 석 2022. 10. 3. 23:44
반응형

 

1. OHLC란?

- Open-High-Low-Close를 나타내며 시가-고가-저가-종가를 의미한다.

- 우리나라 뿐만 아니라 전 세계에서 사용하는 캔들 차트는 OHLC를 이용한다.

+ 캔들차트 : 양초를 닮았다고하여 캔들 차트라고 부른다.

 

2. 캔들차트 특징

- 시가-고가-저가-종가를 이용하여 하루 동안의 가격 변동을 표시한다.
- 시가보다 종가가 높으면 붉은 양봉으로 표시하고, 고가와 저가를 실선으로 연결한다.
- 반대로 시가보다 종가가 낮으면 푸른 음봉으로 표시하고, 고가와 저가를 실선으로 연결한다.

- 경우에 따라서 흰색과 검은색, 녹색과 빨간색으로 봉을 표시한다.

3. 사용한 데이터

 

[Python] 파이썬 Beautiful Soup - 네이버 금융 시세 웹 크롤링(셀트리온)

1. Beautiful Soup 란? - HTML, XML 페이지로부터 데이터를 추출하는 파이썬 라이브러리다. - 흔히 웹 크롤러나 웹 스크레이퍼로 불리기도 한다. - 추가로 항상 스크레이핑할 때는 저작권과 관련 법률을

maeseok.tistory.com

앞 게시물과 연결되는 내용이므로 위 링크를 참조하면 

헤당 게시물을 이해하는데 도움이 된다.

 

4. mplfinance를 사용한 코드

import pandas as pd
from bs4 import BeautifulSoup
from urllib.request import urlopen
import mplfinance as mpf

url = 'https://finance.naver.com/item/sise_day.nhn?code=068270&page=1'
with urlopen(url) as doc:
    html = BeautifulSoup(doc, 'lxml') 
    pgRR = html.find('td', class_='pgRR')
    s = str(pgRR.a['href']).split('=')
    last_page = s[-1]  

df = pd.DataFrame()
url2 = 'https://finance.naver.com/item/sise_day.nhn?code=068270'  
for page in range(1, int(last_page)+1): 
    page_url = '{}&page={}'.format(url2, page)  
    df = df.append(pd.read_html(page_url, header=0)[0])

#빈 데이터 제거
df = df.dropna()
#상위 30항목만 가져옴
df = df.iloc[0:30]
#column 이름을 영어로 바꿔줌
df = df.rename(columns={'날짜':'Date', '시가':'Open', '고가':'High', '저가':'Low', '종가':'Close', '거래량':'Volume'})
#날짜 순으로 오름차순 정렬
df = df.sort_values(by='Date')
#Date 칼럼을 DatetimeIndex형으로 변경한 후 인덱스로 설정
df.index = pd.to_datetime(df.Date)
#특정 컬럼만 데이터프레임으로 저장
df = df[['Open', 'High', 'Low', 'Close', 'Volume']]

#type 값에 따라 차트의 형태가 완전히 달라진다.
mpf.plot(df, title='셀트리온 ohlc 차트', type='ohlc')
mpf.plot(df, title='셀트리온 candle 차트', type='candle')

#keyword arguments로 mpf.plot() 함수를 호출할 때 쓰이는 인수를 담은 딕셔너리
kwargs = dict(title='셀트리온 차트', type='candle',
    mav=(2, 4, 6), volume=True, ylabel='ohlc 캔들')
#marketcolor를 설정하여 style에 적용
Style= mpf.make_marketcolors(up='r', down='b', inherit=True)
s  = mpf.make_mpf_style(marketcolors=Style)
mpf.plot(df, **kwargs, style=s)

 

- 과거 버전은 candlestick_ohlc()함수에서 값을 입력할 때 시간을 float형태로

  변환하여야 하고 출력할 때는 다시 형태를 변환해야돼서 코드가 길어졌다.

 

- 현재 버전은 과거 버전의 형변환 문제는 모두 해결되고, type 값만 변경하면 

  차트의 형태가 바뀔 정도로 많이 개선된 상태이다.