python으로 주가정보 캔들차트 그리기(ft. mplfinance)

2022. 12. 17. 18:11IT

728x90
반응형

 

python으로 주가정보 캔들차트 그리기(ft. mplfinance)

 

오늘은 스크래핑하여 얻은 정보를 토대로 캔들차트를 그리는 데까지 나가보려 합니다.

 

 

이 블로그는  '파이썬 증권데이터 분석<한빛미디어>' 이라는 책을 토대로 작성해 가고 있습니다.

주식자동매매를 하는 것을 목표로 써진 책입니다.

그 책을 따라가고 있습니다.

관심이 있으신 분은 이 책을 사서 읽어보시기 바랍니다. 

 

    
from bs4 import BeautifulSoup
from urllib.request import urlopen
import pandas as pd
import requests
from matplotlib import pyplot as plt
from matplotlib import dates as mdates
import mplfinance as mpf
from datetime import datetime  

 

 

#종목정보를 토대로 해서 네이버에서 해당종목정보의 일별주가정보를 가져오는 부분 

url = "http://finance.naver.com/item/sise_day.nhn?code=035720&page=1"

with urlopen(url) as doc:
    html = BeautifulSoup(requests.get(url, headers={'User-agent': 'Mozilla/5.0'}).text,'lxml')
    pgrr = html.find('td',class_='pgRR')
    s=str(pgrr.a['href']).split('=')
    last_page = s[-1]

 

    
print (last_page) #마지막 페이지의 숫자를  인쇄

 

#첫페이지부터 마지막 페이지까지의 데이터를 가져오는 부분

df = pd.DataFrame()
price_url = 'http://finance.naver.com/item/sise_day.nhn?code=035720'

for page in range(1, int(last_page) + 1):
    page_url = '{}&page={}'.format(price_url,page)
    df = df.append(pd.read_html(requests.get(page_url,headers={'User-agent': 'Mozilla/5.0'}).text)[0])
    


#차트 출력을 위해서 데이터프레임 가공하기
    
df=df.dropna()   #빈 공백줄 제거
df=df.iloc[0:30]  # 30개의 기록만 가져오기

df=df.rename(columns={'날짜':'Date','시가':'Open','고가':'High','저가':'Low','종가':'Close','거래량':'Volume'})  #한글명을 영문명으로 변경
df=df.sort_values(by='Date')  #날자별로 소트
df.index = pd.to_datetime(df.Date) #날자를 인덱스로 지정
df = df[['Open','High','Low',"Close",'Volume']]  # 다섯개의 열만 추려냄

#엠피엘_파이낸스로 캔들 차트 그리기

mpf.plot(df, title='Celltrion candle chart', type='candle', mav=(3,6,9))   

 

 

아래는 실행과정을 기록한 것입니다. 

아래는 파이썬에서 그린 그래프입니다.

 

엠피엘파이낸스 라이브러리를 사용했습니다.

 https://github.com/matplotlib/mplfinance

다음은 옵션을 바꾸어가며 그려본 주가입니다.

 

 

주가차트와 함께 이동평균선을 표시해 보았습니다.

 

mdf.plot(df, title='Celltrion candle chart', type='candle', mav=(3,6,9))

거래량을 추가해 보았습니다.

 

mdf.plot(df, title='Celltrion candle chart', type='candle', mav=(3,6,9), volume=True)

거래가 없는 날은 표시되지 않도록 하는 기능을 추가해 보았습니다.

 

mdf.plot(df, title='Celltrion candle chart', type='candle', mav=(3,6,9), volume=True,show_nontrading = True)

 

엠피엘파이낸스 라이브러리를 사용했습니다.

더욱 많은 기능이 있습니다.

728x90
반응형