[파이썬] 백테스팅 최종 및 강의종료
2023. 1. 14. 11:47ㆍ자격증(다다익선)/파이썬
728x90
https://chanytv.tistory.com/137
https://chanytv.tistory.com/138
https://chanytv.tistory.com/139
https://chanytv.tistory.com/142
https://chanytv.tistory.com/143
https://chanytv.tistory.com/148
[파이썬] 백테스팅 최종 및 강의종료
백테스팅 최종본
마지막 강의는 변동성 돌파 전략을 공부한다고 한다. 즉 주식이 오르고 내려감을 기존의 흐름을 기준으로 판매시점과 구매시점을 파악해보는 환경을 구성해보는 것이다.
당연히 주가 정보를 먼저 가져오게끔 환경 구성을 하면 된다. 이부분은 너무 많이 했기에 생략한다.
그 다음은 기존 주가변동을 기준으로 사고 파는 날을 구해야 한다. 전날보다 높으면 사고 전날보다 낮으면 팔면 되니 아래처럼 하면 된다. 단타로 보면 당연히 의미가 없다. 3일, 5일, 7일 등 특정 기간동안 변동을 파악하는 것이 중요하다.
수익률도 정해줘야한다.
최종 완성본을 보면 이해가 쉬울 것이니 아래 최종 완성본을 확인해보자.
def get_return(code,k):
df = fdr.DataReader(code,'2018')
df['buy_at'] = (df['High'].shift(1) - df['Low'].shift(1))*k + df['Open']
df['is_buy'] = np.where(df['buy_at'] < df['High'],'buy','')
df['sell_at'] = df['Open'].shift(-1)
df = df[df['is_buy'] == 'buy']
df = df[['buy_at','sell_at']]
df['return'] = df['sell_at']/df['buy_at']
return df[['return']].cumprod().iloc[-1,-1] -1
get_return('005930',0.4)
for k in np.arange(0.4,0.6,0.01):
print(round(k,2))
df = pd.DataFrame()
for k in np.arange(0.4,0.6,0.01):
doc = {
'k':k,
'return':get_return('005930',k)
}
df = df.append(doc,ignore_index=True)
df.sort_values(by='return',ascending=False)
월요일에 사서 금요일에 판매 할 가장 적합한 종목 찾기
def get_return_mf(code):
df = fdr.DataReader(code,'2018')
df = df.reset_index()
df = df[['Date','Open']]
df['Day'] = pd.to_datetime(df['Date']).dt.day_name()
cond = (df['Day'] == 'Friday') | (df['Day'] == 'Monday')
df = df[cond]
if df.iloc[0,2] == 'Friday':
df = df.drop(index = df.index[0])
if df.iloc[-1,2] == 'Monday':
df = df.drop(index = df.index[-1])
cond = (df['Day'] == 'Monday') & (df['Day'].shift(-1) == 'Monday')
df = df.drop(index = df[cond].index)
cond = (df['Day'] == 'Friday') & (df['Day'].shift(1) == 'Friday')
df = df.drop(index = df[cond].index)
df['Open_fri'] = df['Open'].shift(-1)
df = df[df['Day']=='Monday']
df = df[['Open','Open_fri']]
df.columns = ['buy_at','sell_at']
df['return'] = df['sell_at'] / df['buy_at']
cond = (df['sell_at'] != 0) & (df['buy_at'] != 0)
df = df[cond]
return df[['return']].cumprod().iloc[-1,-1] - 1
!pip install dart-fss
import dart_fss as dart_fss
import pandas as pd
api_key = 'API키 입력하기'
dart_fss.set_api_key(api_key=api_key)
all = dart_fss.api.filings.get_corp_code()
df = pd.DataFrame()
for row in df_listed.sample(10)[['stock_code','corp_name']].itertuples():
try:
doc = {
'name' : row[2],
'return' : get_return_mf(row[1])
}
df = df.append(doc, ignore_index = True)
except:
print(f'error - {row[2]}')
df.sort_values(by='return', ascending=False)
728x90
'자격증(다다익선) > 파이썬' 카테고리의 다른 글
[파이썬] 백테스팅(Back-testing) (0) | 2023.01.04 |
---|---|
[파이썬] Open API (0) | 2022.12.28 |
[파이썬] yfinance을 이용한 해외 주식 정보 분석 (0) | 2022.12.24 |
[파이썬] Pandas와 DataFrame (1) | 2022.12.23 |
[파이썬] openpyxl / 파일 업로드, 다운로드 (0) | 2022.12.16 |