728x90
OHLC(Open - High - Low - Close)
OHLC는 Open - High - Low - Close를 나타내는 차트로 시가-고가-저가-종가를 의미한다.
우리나라를 포함한 전 세계에서 사용하는 캔들차트는
OHLC에 해당하는 4가지 가격을 이용하여 일정기간 가격변동을 표시한다.
캔들차트는 250여년 전 일본 오사카의 상인이었던 혼마 무네히사가쌀가격의 변동을 파악하기 위한 용도로 고안한 것으로 알려져 있다. 차트에 표시된 바 모양이 양초를 닮았다고 하여 서양권에서는 일본식 캔들차트라고 불린다.
OHLC 차트는 미국에서 BAR 차트라고 불리며 주로 사용되는 차트이다.
반면에 우리나라에서는 캔들차트를 BAR 차트라고 부르며 주로 사용하고 있다.
삼성카드 주식 종가차트
import pandas as pd
import requests
from bs4 import BeautifulSoup
from matplotlib import pyplot as plt
url = 'https://finance.naver.com/item/sise_day.nhn?code=029780&page=1'
html = requests.get(url, headers={'User-agent': 'Mozilla/5.0'}).text
# BeautifulSoup 생성자 첫번째 인수로 HTML/XML 페이지를 넘겨주고, 두번째 인수로 페이지를 파싱할 방식을 넘겨준다.
bs = BeautifulSoup(html, 'lxml')
# find 함수를 통해 'pgRR'인 'td'태그를 찾으면, 결과값은 'bs4.element.Tag'타입으로 pgrr 변수에 반환한다.
# pgRR = Page Right Right 맨 마지막 페이지를 의미한다.
pgrr = bs.find('td', class_='pgRR')
# 삼성카드 전체 페이지 수를 구하려면 pdRR 클래스 속성값으로 <td>하위의 <a> href 속성값을 구한다.
# pfgg.a['href']를 출력하면 href의 속성값인 item/sise.naver?code=029780&page=1 문자열을 얻을 수 있다.
s = str(pgrr.a['href']).split('=')
last_page = s[-1]
# 빈 데이터프레임 생성
df = pd.DataFrame()
sise_url = 'https://finance.naver.com/item/sise_day.nhn?code=029780'
for page in range(1, int(last_page)+1):
url = '{}&page={}'.format(sise_url, page)
html = requests.get(url, headers={'User-agent': 'Mozilla/5.0'}).text
df = df.append(pd.read_html(html, header=0)[0])
df = df.dropna()
# 차트 출력을 위해 데이터프레임 가공하기
df = df.dropna()
df = df.iloc[0:30]
df = df.sort_values(by='날짜')
# 날짜, 종가 컬럼으로 차트 그리기
plt.title('Samsung Card (close)')
plt.xticks(rotation=45)
plt.plot(df['날짜'], df['종가'], 'co-')
plt.grid(color='gray', linestyle='--')
plt.show()
삼성카드 캔들 차트 그리기
원래 캔들차트 기능은 matplotlib.finance 모듈에 포함되어 있는 기능이었으나,
matplotlib에서 제거되면서 mpl_finance 패키지로 이동되었다.
2019년 11월부터 mpl_finance 패키지는 폐기되고, 새롭게 mplfinance 패키지로 새롭게 변경되었다.
# 삼성카드 데이터 프레임 nan 값 제거
df = df.dropna()
# 삼성카드 최근 30영업일 종가 가져오기
df = df.iloc[0:30]
# 컬럼명 변경
df = df.rename(columns={'날짜':'Date', '시가':'Open', '고가':'High', '저가':'Low', '종가':'Close', '거래량':'Volume'})
# 날짜기준으로 sorting
df = df.sort_values(by='Date')
# date 칼럼을 DatatimeIndex 형으로 변경
df.index = pd.to_datetime(df.Date)
# df dataframe에서 OHLC, Volume(거래량) 가져오기
df = df[['Open', 'High', 'Low', 'Close', 'Volume']]
# 캔들차트 그리기
mpf.plot(df, title='Samsung Card candle chart', type='candle')
# OHLC 차트그리기
mpf.plot(df, title='Samsung Card ohlc chart', type='ohlc')
# 삼성카드 캔들차트 & 거래량 그래프 그리기
kwargs = dict(title='Samsung Card customized chart', type='candle',
mav=(2, 4, 6), volume=True, ylabel='ohlc candles')
mc = mpf.make_marketcolors(up='r', down='b', inherit=True)
s = mpf.make_mpf_style(marketcolors=mc)
mpf.plot(df, **kwargs, style=s)
삼성카드 CANDLE 차트
삼성카드 OHLC 차트
삼성카드 CANDLE 차트 & 거래량 차트
참고도서
http://www.yes24.com/Product/Goods/90578506
https://github.com/INVESTAR/StockAnalysisInPython
반응형
'python > 금융데이터분석' 카테고리의 다른 글
python 증권데이터 분석 - DB Updata 모듈만들기#1, krx 종목주식시세 DB로 업데이트하기 (0) | 2022.12.24 |
---|---|
python 증권데이터 분석 - maria DB 설치, 데이터베이스 생성, 확인, 제거하기 (2) | 2022.12.24 |
python 증권데이터 분석 - 네이버 금융 웹 스크래핑(웹 크롤링) (0) | 2022.12.24 |
python 증권데이터 분석 - 웹 스크래핑(웹 크롤링), HTML 예시, 한국거래소 상장법인목록 가져오기 (1) | 2022.12.23 |
python 증권데이터 분석 - 회귀 분석과 상관관계, KOSPI 다우존스 회귀분석 (0) | 2022.12.23 |
댓글