Выпуклая оптимизация и в питоне - PullRequest
0 голосов
/ 21 сентября 2018

Я использую 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

`

...