Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def neg_sharpe_ratio_m(weights, mean_returns, cov_matrix, risk_free_rate, alpha):
- p_var, p_ret = portfolio_annualised_performance(weights, mean_returns, cov_matrix)
- m_risk = equal_risk_contributon(weights, cov_matrix)
- return -(p_ret - risk_free_rate)/p_var*alpha + (1-alpha)*m_risk
- def max_sharpe_ratio_m(mean_returns, cov_matrix, risk_free_rate, alpha):
- num_assets = mean_returns.shape[0]
- args = (mean_returns, cov_matrix, risk_free_rate, alpha)
- constraints = ({'type': 'eq', 'fun': lambda x: np.sum(x) - 1})
- bound = (0.0,1.0)
- bounds = tuple(bound for asset in range(num_assets))
- result = minimize(neg_sharpe_ratio_m, num_assets*[1./num_assets,], args=args,
- method='SLSQP', bounds=bounds, constraints=constraints)
- return result.x
- weights_alpha =[]
- blended_list = []
- length = etf_return.shape[0]//66
- for alpha in 1/np.exp2(np.arange(0,10,1)):
- i= 0
- risk_free_rate =0.0
- weights = np.empty([0,6])
- while i<length:
- distance = min(66,etf_return.shape[0]-i*66)
- cov_matrix = np.cov(etf_return.iloc[i*66: (i+1)*min(distance, 66) , :].values,
- rowvar = False)
- rt = np.mean(etf_return.iloc[i*66: (i+1)*min(distance, 66) , :].values, axis=0)
- result = np.around(max_sharpe_ratio_m(rt, cov_matrix, risk_free_rate, alpha), 3)
- weights = np.vstack((weights, result))
- i+=1
- weights_alpha.append(weights)
- blended = portfolio_performance(weights)
- blended_list.append(blended)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement