[파이썬] 백테스팅 최종 및 강의종료

2023. 1. 14. 11:47자격증(다다익선)/파이썬

728x90

https://chanytv.tistory.com/137

 

[파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문

[파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 파이썬 기초를 시작하면서.... 크롤링 한 번 해보자고 시작한 파이썬 공부다. 모든 공부는 기초가 중요한 법!! 이 번 공부로 파

chanytv.tistory.com

https://chanytv.tistory.com/138

 

[파이썬] 스크래핑(크롤링)

https://chanytv.tistory.com/137 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 파이썬 기초를 시작하면서.... 크

chanytv.tistory.com

https://chanytv.tistory.com/139

 

[파이썬] openpyxl / 파일 업로드, 다운로드

https://chanytv.tistory.com/137 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 파이썬 기초를 시작하면서.... 크

chanytv.tistory.com

https://chanytv.tistory.com/142

 

[파이썬] Pandas와 DataFrame

https://chanytv.tistory.com/137 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 파이썬 기초를 시작하면서.... 크

chanytv.tistory.com

https://chanytv.tistory.com/143

 

[파이썬] yfinance을 이용한 해외 주식 정보 분석

https://chanytv.tistory.com/137 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 파이썬 기초를 시작하면서.... 크

chanytv.tistory.com

https://chanytv.tistory.com/148

 

[파이썬] Open API

https://chanytv.tistory.com/137 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 파이썬 기초를 시작하면서.... 크

chanytv.tistory.com

[파이썬] 백테스팅 최종 및 강의종료


백테스팅 최종본

 

마지막 강의는 변동성 돌파 전략을 공부한다고 한다. 즉 주식이 오르고 내려감을 기존의 흐름을 기준으로 판매시점과 구매시점을 파악해보는 환경을 구성해보는 것이다.

 

당연히 주가 정보를 먼저 가져오게끔 환경 구성을 하면 된다. 이부분은 너무 많이 했기에 생략한다.

그 다음은 기존 주가변동을 기준으로 사고 파는 날을 구해야 한다. 전날보다 높으면 사고 전날보다 낮으면 팔면 되니 아래처럼 하면 된다. 단타로 보면 당연히 의미가 없다. 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