Я использую CVXOPT для выполнения квадратичного программирования для вычисления оптимальных весов портфолио с использованием оптимизации средней дисперсии. Отличный пример можно найти на http://abel.ee.ucla.edu/cvxopt/userguide/coneprog.html#quadratic-programming. Однако аргументы в регуляризованной форме (по мнению автора). Пример - базовая версия. Я хочу сделать немного более сложную проблему, где:
min:
x'Sx
s.t.:
x'a >= g
x'1 = 0
x >= -Wb
x <= c1 - Wb
where:
x: active weights of assets (active weight = portfolio weight - benchmark weight)
S: covariance matrix of asset returns
a: expected stock excess returns
g: target gain
Wb: weights of assets in the benchmark
c: upper limit (weight) of any asset in the portfolio
Предположим, что все переменные вычислены или известны.
Базовый пример, представленный в документации:
min:
x'Sx
s.t.
p'x >= g
1'x = 1
Где p — доходность активов.
Чего я не знаю (ссылаясь на код на http://abel.ee.ucla.edu/cvxopt/examples/book/portfolio.html и проблему оптимизации выше):
1. Я думаю, что эти аргументы устанавливают ограничения, но я не совсем уверен:
G = matrix(0.0, (n,n))
G[::n+1] = -1.0
h = matrix(0.0, (n,1))
A = matrix(1.0, (1,n))
b = matrix(1.0)
2. Я считаю, что это часть проблемы минимизации в «регулируемой форме», что я не уверен, что означает:
mus = [ 10**(5.0*t/N-1.0) for t in xrange(N) ]
3.Каковы аргументы для qp (solver.qp — квадратичный оптимизатор):
xs = [ qp(mu*S, -pbar, G, h, A, b)['x'] for mu in mus ]
Глядя на документацию, я почти уверен, что mu*S (первый аргумент) — это целевая функция, которую нужно минимизировать, а -pbar — это возвращаемые значения. Однако это похоже на проблему максимизации (максимизация отрицательной доходности).
Я не знаю, однако, как используются другие аргументы.
Я ищу помощь в использовании оптимизатора, учитывая мою проблему минимизации и ограничения выше.