Привет всем, мне нужна помощь с приведенным ниже кодом. Извините, но я думаю, что я изменю вопрос -
приведенный ниже код работает, но я пытался сделать его более эффективным -
import yfinance as yf
data = yf.download("SPY AAPL IOO IXJ", start="2015-01-01", end="2019-04-30")
data
df=data['Adj Close']
returns=data['Adj Close'].pct_change().dropna()
roll_profits = rolling_profits(returns, window).fillna(method='ffill')
list_dict=[]
for column in returns:
grit = grit_index(returns[column], minperiods)
ulcer=ulcer_index(returns[column], minperiods)
row = {'name' : column,
'score': grit[-1],
'ulcer' : ulcer[-1]
}
list_dict.append(row)
print(list_dict)
scoreboard = pd.DataFrame.from_dict(list_dict)
print(scoreboard)
Примечания-
grit index
# Define a function 'grit_index'
def grit_index(returns, minperiods):
cum_rets = cumulative_returns(returns, minperiods).fillna(method='ffill')
peak_rets = cum_rets.cummax()
dd = np.log((cum_rets/peak_rets)) ** 2
ulcer = np.sqrt(dd.expanding(min_periods=minperiods).sum())
grit = cum_rets * ulcer ** -1
return grit
input:
AAPL IOO IXJ SPY
Date
2015-01-02 -0.009513 -0.002099 0.002712 -0.000535
2015-01-05 -0.028172 -0.022745 -0.005009 -0.018060
2015-01-06 0.000094 -0.008745 -0.004732 -0.009419
2015-01-07 0.014022 0.008551 0.016184 0.012461
2015-01-08 0.038423 0.019513 0.020904 0.017745
l
, где возврат - это pandas фрейм данных с биржевым возвратом в виде столбцов.
Мне было интересно, есть ли у кого-нибудь какие-либо идеи для того, чтобы улучшить код выше
большое спасибо,
Андрей