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, я взял эту логику из ограничений на покупку / продажу для затрат на торговлю.

0 ответов

Другие вопросы по тегам