mmyjh86

[YouTube] 벡테스팅 - 원숭이매매법 : 백테스팅

Sep 26th, 2020 (edited)
101
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. from pykrx import stock
  2. import numpy as np
  3. import pandas as pd
  4. from pandas import Series
  5. import seaborn as sns
  6. import matplotlib.pyplot as plt
  7.  
  8.  
  9. class 원숭이:
  10.     def __init__(self, ticker_list, num):
  11.         self.ticker_list = ticker_list
  12.         self.num = num        
  13.         self.임의종목수익률()
  14.    
  15.     def 보유수익률(self, df):
  16.         기간수익률 = df['종가'][-1]/df['종가'][0]
  17.         N = (df.index[-1] - df.index[0]).days / 365
  18.         return (기간수익률 ** (1/N)) - 1
  19.  
  20.     def 임의종목수익률(self):
  21.         target = np.random.choice(self.ticker_list, self.num)
  22.         self.투자종목 = target
  23.    
  24.         result = [ ]
  25.         for ticker in target:
  26.             df = pd.read_excel(f"kospi-market/{ticker}.xlsx", index_col=0)
  27.             if len(df) > 1 :
  28.                 CAGR = self.보유수익률(df)
  29.                 result.append(CAGR)  
  30.  
  31.         self.수익률 = np.mean(result)
  32.        
  33.  
  34. # 원숭이 100마리 생성 후 수익률 계산
  35. ticker_list = stock.get_market_ticker_list()
  36. result = [ 원숭이(ticker_list, 3) for x in range(100)]
  37. 수익률 = [ x.수익률 for x in result ]
  38.  
  39. # 4분위수 출력
  40. print(np.percentile(수익률, 25))
  41. print(np.percentile(수익률, 50))
  42. print(np.percentile(수익률, 75))
  43.  
  44. # 시각화
  45. result = sorted(수익률)
  46. sns.barplot(x=np.arange(len(result)), y=result)
  47. plt.show()
  48. sns.distplot(수익률)
  49. plt.show()
  50.  
  51. # 10% 이상의 수익을 얻은 원숭이의 수 출력
  52. s = Series(result)
  53. print(len(s[s > 0.1]))
RAW Paste Data