[책][파이썬] 파이썬 증권 데이터 분석
[한줄평] 이 책은 주식데이터를 크롤링하고, 분석기법을 적용하여 자동매매까지 학습하는 책이다. [키워드] - 주식 + 파이썬 - 자동매매 |
ㅁ 깃허브_소스코드
https://github.com/Investar/StockAnalysisInPython
ㅁ 목차
1부. 파이썬 데이터 분석 기본
_1장. 증권 데이터 분석에 앞서
증권 투자에 앞서 증권 관련 배경지식을 알아본다. 주식회사가 우리나라에 들어오기까지의 과정부터 가치 투자, 서브프라임 금융 위기, 퀀트 투자를 간단히 짚어본다.
_2장. 파이썬 프로그래밍
파이썬 설치부터 파이썬 문법 및 외부 라이브러리 사용법을 설명한다. 파이썬을 잘하려면 리스트 자료형를 자유자재로 다룰 수 있어야 한다.
_3장. 팬더스를 활용한 데이터 분석
데이터 분석에 필수 라이브러리인 팬더스를 설명한다. 데이터프레임 자료형은 라이브러리 간의 데이터 교환을 담당하는 허브 역할을 하므로 중요하다.
_4장. 웹 스크레이핑 데이터 분석
한국거래소에서 제공하는 상장법인 목록 엑셀 파일을 다운로드하고, 네이버에서 제공하는 주식 일별 시세 페이지를 스크레이핑하는 방법을 설명한다. 웹 스크레이핑 라이브러리 뷰티풀 수프를 설명한다.
2부. 파이썬 데이터 분석 응용
_5장. 시세 DB 구축 및 시세 조회 API 개발
네이버 주식 시세를 웹 페이지에서 읽어 마리아디비에 저장해 나만의 시세 데이터베이스를 구축한다. 이어서 저장된 주식 시세를 조회하는 시세 조회 API를 구현한다.
_6장. 트레이딩 전략과 구현
현대 포트폴리오 이론, 볼린저 밴드, 삼중창 매매 시스템, 듀얼 모멘텀 등 전설적인 트레이딩 전략의 핵심을 이해하고 파이썬으로 구현한다.
_7장. 장고 웹 서버 구축 및 자동화
파이썬 기반 웹 프레임워크인 장고로 주식 잔고를 확인하는 웹 시스템을 구현한다. 백트레이더를 이용한 백테스팅 방법과 슬랙을 이용한 메시지 전송 방법도 소개한다.
_8장. 변동성 돌파 전략과 자동매매
래리 윌리엄스의 변동성 돌파 전략을 국내 증권사 API를 이용하여 구현하고, 거래세 부담이 적은 ETF 종목을 자동으로 매매하는 시스템을 구축한다.
_9장. 딥러닝을 이용한 주가 예측
구글 텐서플로로 구현한 딥러닝 기술로 내일 주가를 예상한다. 딥러닝 기본 개념도 익힌다.
ㅁ 내용 요약
4장. 웹 스크레이핑 데이터 분석
- 일별 시세를 직접 스크레핑하여 원하는 정보를 추출하는 코드를 제공하고 있다.
본 예제는 셀트리온을 스크래핑한 소스코드를 발췌하였다.
import pandas as pd
from urllib.request import urlopen
from bs4 import BeautifulSoup
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()
sise_url = 'https://finance.naver.com/item/sise_day.nhn?code=068270'
for page in range(1, int(last_page)+1):
page_url = '{}&page={}'.format(sise_url, page)
df = df.append(pd.read_html(page_url, header=0)[0])
df = df.dropna()
df = df.iloc[0: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')
mpf.plot(df, title='Celltrion ohlc chart', type='ohlc')
kwargs = dict(title='Celltrion 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)
6장. 트레이딩 전략과 구현
- 샤프지수, 볼린저 밴드, 모멘텀 등의 기법을 학습해본다.
본 예제는 볼린저 밴드를 이용한 추세 추정 매매기법에 대한 소스코드를 발췌하였다.
import matplotlib.pyplot as plt
from Investar import Analyzer
mk = Analyzer.MarketDB()
df = mk.get_daily_price('NAVER', '2019-01-02')
df['MA20'] = df['close'].rolling(window=20).mean()
df['stddev'] = df['close'].rolling(window=20).std()
df['upper'] = df['MA20'] + (df['stddev'] * 2)
df['lower'] = df['MA20'] - (df['stddev'] * 2)
df['PB'] = (df['close'] - df['lower']) / (df['upper'] - df['lower']) # ①
df = df[19:]
plt.figure(figsize=(9, 8))
plt.subplot(2, 1, 1) # ②
plt.plot(df.index, df['close'], color='#0000ff', label='Close')
plt.plot(df.index, df['upper'], 'r--', label = 'Upper band')
plt.plot(df.index, df['MA20'], 'k--', label='Moving average 20')
plt.plot(df.index, df['lower'], 'c--', label = 'Lower band')
plt.fill_between(df.index, df['upper'], df['lower'], color='0.9')
plt.title('NAVER Bollinger Band(20 day, 2 std)')
plt.legend(loc='best')
plt.subplot(2, 1, 2) # ③
plt.plot(df.index, df['PB'], color='b', label='%B') # ④
plt.grid(True)
plt.legend(loc='best')
plt.show()
8장. 변동성 돌파 전략과 자동 매매
- 랠 윌리엄스의 변동성 돌파 전략으로 자동 매매를 하는 방법을 학습한다.
본 예제는 매수/매도 주문확정 로직을 작성 후 윈도우즈에서 작업 스케쥴을 등록하는 방법이다.
"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."