카테고리 없음
Python_Colab4주차
Spartan_Races
2023. 3. 27. 09:43
!pip install yfinance pandas-datareader finance-datareader
from pandas_datareader import data as pdr
import yfinance as yf
yf.pdr_override()
import numpy as np
import pandas as pd
import FinanceDataReader as fdr
df = fdr.DataReader('066570','2018')
# 066570LG전자의 종목코드 2018년부터의 자료
df[df['Change']>0.05]
df = fdr.DataReader('066570','2018')
# 066570LG전자의 종목코드 2018년부터의 자료
df.plot(y=['Open','Close'],figsize=[20,10],grid=True) #그래프 그리기
df_2 = fdr.DataReader('066570','2018') #LG 자료
df_1= fdr.DataReader('005930','2018') #삼성 자료
df=pd.DataFrame()
df['Samsung']=df_1['Change']
df['LG']=df_2['Change'] #LG 삼성 변동율 비교 그래프
df.tail(100).plot(figsize=[20,8]) # 최근 100일 동안의 변동율 .tail(100)
df= fdr.DataReader('005930','2018')
df=df[['Close']].copy() #.copy() 중복해서 copy할 때 값이 변동될 수 있으므로 copy임을 확인
df['ma']=df.rolling(3).mean().shift(1) # 3일간 종가의 이동평균값
df
df['action']=np.where(df['Close']>df['ma'],'buy','sell')
#df['action_temp']=df['action'].shift(1)
df.iloc[-1,-1]='sell' #마지막 날엔 반드시 팔아야 수익율을 알 수 있다
cond1=(df['action']=='buy')&(df['action'].shift(1)=='sell')
cond2=(df['action']=='sell')&(df['action'].shift(1)=='buy')
df['real_buy']=np.where(cond1,'buy','') # 사야될 시점
df['real_sell']=np.where(cond2,'sell','') # 팔아야될 시점
df[cond2] # 팔아야될 날짜들만 출력해준다
df_buy=df[cond1].reset_index() # reset_index : 줄 맞춤
df_buy.columns=['날짜','종가(buy)','이평값','선택']
df_sell=df[cond2].reset_index()
df_sell.columns=['날짜','종가(sell)','이평값','선택']
df_result=pd.concat([df_buy,df_sell],axis=1) # axis=1 : buy값에 sell값을 가로로 붙여준다
df_result['수익율']=df_result['종가(sell)']/df_result['종가(buy)']
df_result['수익율cumprod']=df_result[['수익율']].cumprod() # 수익율 누적 곱
df_result[['수익율']].cumprod().iloc[-1,-1]-1 # 누적 곱 최종값 - 1 = 수익율
<단기.장기 이평값>
def get_return_sl(code,short,long):
df= fdr.DataReader(code,'2018')
df=df[['Close']].copy()
df['ma1']=df['Close'].rolling(short).mean().shift(1)
df['ma2']=df['Close'].rolling(long).mean().shift(1)
df['action']=np.where(df['ma1']>df['ma2'],'buy','sell')
df.iloc[-1,-1]='sell'
cond1=(df['action']=='buy')&(df['action'].shift(1)=='sell')
cond2=(df['action']=='sell')&(df['action'].shift(1)=='buy')
df_buy=df[cond1].reset_index()
df_buy.columns=['날짜','종가(buy)','이평값1','이평값2','선택']
df_sell=df[cond2].reset_index()
df_sell.columns=['날짜','종가(sell)','이평값1','이평값2','선택']
df_result=pd.concat([df_buy,df_sell],axis=1)
df_result['수익율']=df_result['종가(sell)']/df_result['종가(buy)']
df_final=(df_result[['수익율']].cumprod().tail(1)-1)*100
df_final['단기']=short
df_final['장기']=long
return df_final
dfs=[]
for short in range(3,11):
for long in range(30,61):
df=get_return_sl('005930',short,long)
dfs.append(df)
df_result=pd.concat(dfs)
df_result.sort_values(by='수익율',ascending=False)
단기 10일 장기 59일로 설정했을 때, 최대수익율 46.97%을 얻었다
for short in range(3,11):
for long in range(30,61):
df=get_return_sl('005930',short,long)
dfs.append(df)
df_result=pd.concat(dfs)
df_result.sort_values(by='수익율',ascending=False)
단기 10일 장기 59일로 설정했을 때, 최대수익율 46.97%을 얻었다