import yfinance as yf
import pandas as pd
def get_returns():
returns_list = []
for i in range(len(stock_data)-1):
today_close = stock_data.iloc[i+1]['Close']
yesterday_close = stock_data.iloc[i]['Close']
returns = (today_close - yesterday_close) / yesterday_close * 100
returns_list.append(returns)
returns_list.insert(0,0) # 첫번째 자리에 0 넣어주기
return returns_list
def get_max_drawdown():
mdd = (max(stock_data['Close'])-min(stock_data['Close']))/max(stock_data['Close']) * 100
return mdd
def get_risk_free_rate():
rf = []
ten_years_government_bond = 0.0164
inflation_rate = 0.042
rfr = (1+ten_years_government_bond)/(1+inflation_rate)-1 #risk free rate
for i in range(len(stock_data)):
rf.append(rfr*100)
return rf
def get_sharp_ratio(stock_data):
stock_data['returns'] = get_returns()
stock_data['risk free rate'] = get_risk_free_rate()
stock_data['excess return'] = stock_data['returns'] - stock_data['risk free rate']
mean_er = stock_data['excess return']. mean()
std_er = stock_data['excess return'].std()
sharp_ratio = mean_er / std_er
return sharp_ratio
Ticker, duration = list(map(str, input("Enter Ticker: ").split())), int(input('Enter Duration(month): '))
# print(Ticker)
# Ticker = 'TSLA'
for i in range(len(Ticker)):
company = yf.Ticker(Ticker[i])
stock_data = company.history(period="{}mo".format(duration))
# print(AAL)
## 유동비율 , 당좌비율 100%이상 준수
cpb = company.balance_sheet
mdd = get_max_drawdown()
유동비율 = cpb.loc['Total Assets']/cpb.loc['Total Current Liabilities'] *100
당좌비율 = (cpb.loc['Total Assets']-cpb.loc['Inventory'])/cpb.loc['Total Current Liabilities'] *100
##부채비율 200 미만 준수 400 이상 위험
부채비율 = cpb.loc['Total Current Liabilities']/cpb.loc['Total Stockholder Equity']*100
print("\n{}\n\nMDD: {}\n\n유동비율:(100%이상 준수) {}\n\n 당좌비율:(100%이상 준수) {}\n\n 부채비율:(200미만 준수, 400 이상 위험) {}".format(Ticker[i], mdd, 유동비율, 당좌비율, 부채비율))
if get_sharp_ratio(stock_data) <= 1:
print(get_sharp_ratio(stock_data), ' sharp ratio is sub-optimal.')
elif 1 < get_sharp_ratio(stock_data) <=2:
print(get_sharp_ratio(stock_data), ' sharp ratio is optimal.')
elif 2 < get_sharp_ratio(stock_data) <=3:
print(get_sharp_ratio(stock_data), ' sharp ratio is very-good.')
else:
print(get_sharp_ratio(stock_data), ' sharp ratio is excellent.')
반응형
'2. Data Science Basics > Python' 카테고리의 다른 글
Dynamic Time Warping을 이용하여 비슷한 주식 clustering 하기 (1) | 2022.03.03 |
---|---|
Dynamic Time Warping (DTW) (0) | 2022.03.02 |
Data Science 인터뷰 질문 및 답변 (작성중) (0) | 2022.01.03 |
Reddit에서 코인뉴스 API로 크롤링하기 (0) | 2021.12.28 |
A/B Testing 란? (0) | 2021.08.24 |
댓글