Я использую Excel, чтобы минимизировать переменную, и я недавно начал использовать cvxopt
.Я пытаюсь выяснить, как минимизировать значение с учетом двух ограничений.У меня есть два фрейма данных с возвратами и взятия весов w1
и w2
, умноженных на возвраты и вычитающих их.Я нахожу, чтобы минимизировать коэффициент Шарпа для разности доходностей путем изменения весов.Ограничения здесь представляют собой сумму w1 = 1
и sum of w2= 1
. В Excel я использую solver
, добавить и добавить ограничения $S$4 = 1
и $s$5= 1
.Я пытаюсь понять, как это сделать в python cvxopt
.Ниже приведен код, который я написал для cvxopt
при создании эффективной границы.Я был бы очень признателен за любую помощь.
'import numpy as np
import matplotlib.pyplot as plt
import cvxopt as opt
from cvxopt import blas, solvers
import pandas as pd'
`
def random_portfolio(returns1, returns2):
#Returns the mean and standard deviation of returns for a random portfolio
p1 = np.asmatrix(np.nanmean(returns1, axis=1))
w1 = np.asmatrix(rand_weights(returns1.shape[0]))
mu1 = w 1* p1.T
p2 = np.asmatrix(np.nanmean(returns2, axis=1))
w2 = np.asmatrix(rand_weights(returns2.shape[0]))
mu2 = w 1* p1.T
final = mu1- mu2
mean_ret = mean(final)
voltality = std(final)
sharpe = mean_ret/voltality
n = len(returns1)
G = -opt.matrix(np.eye(n)) # negative n x n identity matrix
h = opt.matrix(0.0, (n ,1))
A = opt.matrix(1.0, (1, n))
b = opt.matrix(1.0)
portfolios = solvers.qp(-sharpe, G, h, A, b)['x']
returns = [blas.dot(mu, x) for x in portfolios]
risks = [np.sqrt(blas.dot(x, C*x)) for x in portfolios]
return mean_ret, voltality, sharpe
`