J'essaie de maximiser le ratio de Sharpe utilisant scipy.minimizeratio de Maximize Sharpe utilisant scipy.minimze
Je le fais pour trouver la ligne marché de la sécurité de CAPM
Alors J'ai une équation:
en option (si des positions courtes ne sont pas autorisés):
Je suis en train de résoudre ceci:
def target_func(x, cov_matix, mean_vector, virtual_mean):
f = float(-(x.dot(mean_vector) - virtual_mean)/np.sqrt(x.dot(cov_matix).dot(x.T)))
return f
def optimal_portfolio_with_virtual_mean(profits, virtual_mean, allow_short=False):
x = np.zeros(len(profits))
mean_vector = np.mean(profits, axis=1)
cov_matrix = np.cov(profits)
cons = ({'type': 'eq',
'fun': lambda x: np.sum(x) - 1})
if not allow_short:
bounds = [(0, None,) for i in range(len(x))]
else:
bounds = None
minimize = optimize.minimize(target_func, x, args=(cov_matrix, mean_vector, virtual_mean,), bounds=bounds,
constraints=cons)
return minimize
mais je reçois toujours le succès: Faux (limite d'itération dépassée). J'ai essayé de définir l'option maxiter = 10000, mais cela n'a pas aidé.
Je serai reconnaissant pour toute aide
post-scriptum J'utilise Python 2.7
En tant que première étape pour le débogage: ajoutez '' 'options = { » disp ': True} '' 'à la fonction' 'optimize.minimize''' et affiche toute la sortie. A propos: Avez-vous défini la variable maxiter comme entrée dict comme l'exemple disp-ci-dessus? C'est la façon de faire! – sascha
@sascha Oui, je l'ai fait. Mes options dict est comme options = {'maxiter': 10000}. Et scipy.optimize sortie approuver que maxiter a été réglé correctement – Gcinbax
Ensuite, montrer la sortie, incl. disp. – sascha