Mosek Markowitz Портфельная стоимость транзакций - Python Fusion
Я пытаюсь лучше понять, как работают различные части оптимизатора mosek, и не совсем понимаю логику следующих ограничений и т. Д.
Это у меня есть следующий код:
n = 3
x0 = [-20.0, -50.0, -10.0]
t = [0.01, 0.01, 0.01]
TC = flattenBook(n, x0, t)
def flattenBook(n, x0, t):
M = Model("Simple Portfolio")
M.setLogHandler(sys.stdout)
## can be long and short
x = M.variable("x", n, Domain.unbounded())
## helper variable for buy/sell positions
z = M.variable("z", n, Domain.unbounded())
## find long positions
l = M.variable("l", n, Domain.greaterThan(0.0))
M.constraint('long1', Expr.sub(l,x0), Domain.greaterThan(0.0))
M.constraint('buy', Expr.sub(z,Expr.sub(x,x0)), Domain.greaterThan(0.0))
M.constraint('sell', Expr.sub(z,Expr.sub(x0,x)), Domain.greaterThan(0.0))
M.constraint("longeqshort", Expr.sum(x), Domain.equalsTo(0.0))
M.objective('obj', ObjectiveSense.Minimize, Expr.dot(z, t))
M.solve()
if True:
print "x:"
print x.level()
Результаты приведены ниже:
[60.0, -50.0, -10.0]
Это верно, но кто-то может подтвердить логику для переменной l. Насколько я понимаю, ограничение long1 заставляет l быть только положительными значениями из массива x0, это правильно? И если так, то почему?
Основываясь на примерах на сайте Mosek, я взял эту логику из ограничений на покупку / продажу для затрат на торговлю.