1

J'essaie de maximiser le ratio de Sharpe utilisant scipy.minimizeratio de Maximize Sharpe utilisant scipy.minimze

1

Je le fais pour trouver la ligne marché de la sécurité de CAPM

2

Alors J'ai une équation:

3

4

en option (si des positions courtes ne sont pas autorisés):

5

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

+0

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

+0

@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

+0

Ensuite, montrer la sortie, incl. disp. – sascha

Répondre

0

Je ne sais pas pourquoi, mais il fonctionne parfaitement, quand je remplaçant

x = np.zeros(len(profits)) 

Avec

x = np.ones(len(profits)) 
+1

Parce que seule la convergence locale est garantie et qu'un vecteur de ceux-ci semble être un bien meilleur point de départ. – sascha