Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mosek-Markowitz投资组合交易成本-Python Fusion_Python_Portfolio_Fusion_Mosek - Fatal编程技术网

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

Mosek-Markowitz投资组合交易成本-Python Fusion,python,portfolio,fusion,mosek,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

我试图更好地理解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网站上的示例,我从交易成本的买入/卖出约束中得出了这个逻辑。

不要在第1行定义n$n$就是len(x0)。你的逻辑很难理解。你似乎有一个初始位置x0,并试图从那里移动到x。这个新的位置应该是中性的(总和x=0),并且您尝试以尽可能便宜的方式(最小z'*t)到达那里。您已经定义了z=abs(x-x0)。变量l在这里有点奇怪。您可以注释掉这两行,而无需更改任何内容。还请注意,您的问题没有唯一的解决方案。你需要买80才能得到总和(x)=0。目前,您在第一个资产中从-20变为+60。但是你也可以在第三个资产中从-10增加到+70,或者在第一个资产中增加+40,在第三个资产中增加+40,等等。。。。。在移动过程中,您必须修改t或实施一些平衡