Mosek Markowitz投资组合交易成本 - Python Fusion

时间:2016-06-02 08:30:37

标签: python portfolio fusion mosek

我试图更好地理解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 个答案:

没有答案