Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 코딩테스트
- docker
- ADP
- sarima
- 파트5
- 데이터분석전문가
- 파이썬 주식
- GridSearchCV
- PolynomialFeatures
- 볼린저밴드
- backtest
- hackerrank
- 백테스트
- 빅데이터분석기사
- SQL
- Quant
- Python
- 변동성돌파전략
- Crawling
- 실기
- 프로그래머스
- 파이썬
- TimeSeries
- randomforest
- 비트코인
- Programmers
- 토익스피킹
- lstm
- 데이터분석
- 주식
Archives
- Today
- Total
데이터 공부를 기록하는 공간
[파이썬 주식] 변동성돌파전략 - 5.백테스트 결과 시각화 해보기 본문
## 1. 라이브러리 임포트
from pandas_datareader import data as pdr
import pandas as pd
import yfinance as yf
import matplotlib.pyplot as plt
import numpy as np
import time
from pykrx import stock
# matplotlib 한글 폰트 출력코드
import matplotlib
from matplotlib import font_manager, rc
import platform
try :
if platform.system() == 'Windows':
# 윈도우인 경우
font_name = font_manager.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name()
rc('font', family=font_name)
else:
# Mac 인 경우
rc('font', family='AppleGothic')
except :
pass
matplotlib.rcParams['axes.unicode_minus'] = False
## 2. 자동거래 감시중인 종목 불러오기
codes = ['A204320', 'A028050', 'A035150', 'A011210', 'A131390', 'A006360', 'A005070', 'A005380', 'A001510', 'A001140', 'A068270', 'A004020', 'A032560', 'A200130', 'A039490',
'A079430', 'A000990', 'A011790', 'A210980', 'A002840', 'A035510', 'A029460', 'A086280', 'A005940', 'A006800', 'A020760', 'A011760', 'A069260']
codes = [ code[1:] for code in codes ]
## 3. 백테스트 함수 정의
수익률을 반환
def backtest(code, k, start):
code = str(code)+".KS"
df=pd.DataFrame()
df = pdr.get_data_yahoo(code, start)
df['변동폭'] = df['High']-df['Low']
df['목표가'] = df['Open'] + df['변동폭'].shift(1)*k
df['MA3_yes'] = df.Close.rolling(window=3).mean().shift(1)
df['내일시가'] = df.Open.shift(-1)
cond = ( df['High'] > df['목표가'] ) & ( df['목표가'] > df['MA3_yes'] )
df.loc[cond,'수익률'] = df.loc[cond,'내일시가']/df.loc[cond,'목표가']-0.0032
return df['수익률']
## 4. 수익률 데이터프레임 만들기
종목은 2에서 정의한 29가지
k=0.5
start='2020-01-01'
returns = pd.DataFrame()
for code in codes:
df = backtest(code,k=0.5,start='2020-01-01')
returns[code] = df
time.sleep(0.01)
returns.set_index(returns.index.strftime("%Y-%m-%d"),inplace=True)
## 5. 시각화
① 누적수익률 graph
plt.figure(figsize=(12,8))
returns.mean(axis=1).cumprod().plot()
② cmap 직접 설정하기
# cmap 직접 세팅
import numpy as np; np.random.seed(0)
import seaborn as sns; sns.set()
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap, LinearSegmentedColormap
def create_color(r, g, b):
return [r/256, g/256, b/256]
def get_custom_color_palette():
return LinearSegmentedColormap.from_list("", [
create_color(227, 101, 33), create_color(246, 145, 53), create_color(251, 168, 74),
create_color(218, 212, 200),
create_color(141, 193, 223), create_color(114, 167, 208), create_color(43, 92, 138)
])
#low, high = -5, 15
#data = np.random.uniform(low, high, (10, 15))
cmap = get_custom_color_palette()
#sns.heatmap(data, cmap=cmap, center=0);
#출처 : https://richardhildebrand.wordpress.com/2019/09/18/create-a-custom-color-palette-with-matplotlib-and-seaborn/
③ heatmap
plt.figure(figsize=(20,50))
sns.heatmap(data=returns, cmap=cmap,center=1,annot=True,fmt=".2f")
'STOCK > 변동성돌파전략' 카테고리의 다른 글
[파이썬 주식] 변동성돌파전략 - 7. kospi와 수익률 관계? (0) | 2021.01.30 |
---|---|
[파이썬 주식] 변동성돌파전략 - 6. 종목 개수와 수익률의 관계? (0) | 2021.01.26 |
[파이썬 주식] 변동성돌파전략 - 4. 적정 k값은? (0) | 2021.01.24 |
[파이썬 주식] 변동성돌파전략 - 3. 종목/조건 3개월 백테스트 (0) | 2021.01.23 |
[파이썬 주식] 변동성돌파전략 - 2. 적정 종목 선정하기 (1) | 2021.01.23 |
Comments