Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from pykrx import stock
- import time
- import numpy as np
- def 변동성수익률(df, k):
- for i in range(3, 21):
- df['MA'+str(i)] = df['종가'].rolling(i).mean().shift(1)
- # 투자 비중 결정
- df['count'] = 0
- for i in range(3, 21):
- 조건 = df['MA'+str(i)] < df['고가']
- df.loc[조건, 'count'] += 1
- df['비중'] = df['count'] * (1/18)
- df['변동폭'] = (df['고가'] - df['저가']).shift(1)
- df['목표가'] = df['시가'] + k * df['변동폭']
- 조건 = (df['목표가'] < df['고가']) & (df['비중'] != 0)
- df['다음날'] = df['시가'].shift(-1)
- 매수가 = df[조건]['목표가']
- 매도가 = df[조건]['다음날']
- # 슬리피지 0.3%
- 수익률 = 1 + ((매도가 - 매수가) * df['비중'])/매수가
- 수익률 = 수익률 - 0.003
- 수익률 = 수익률.dropna().cumprod()
- 투자기간 = (df.index[-1] - df.index[0]).days
- return 수익률.iloc[-1] ** (1/(투자기간/365)) - 1
- def 노이즈계산(df):
- 노이즈 = 1 - (abs(df['시가']-df['종가'])/(df['고가']-df['저가']))
- 노이즈 = 노이즈.rolling(20).mean().shift(1)
- 노이즈 = 노이즈.replace(np.nan, 0.4)
- return 노이즈
- # 백테스팅
- result = []
- ticker_list = stock.get_index_portfolio_deposit_file("20191018", "코스피 200 정보기술")
- for ticker in ticker_list:
- df = stock.get_market_ohlcv_by_date("20190101", "20191020", ticker)
- k = 노이즈계산(df)
- 수익률 = 변동성수익률(df, k)
- print(ticker, 수익률)
- result.append(수익률)
- time.sleep(1)
- # 평균 수익률
- print(sum(result)/len(result))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement