我正在尝试使用scipy
minimize
函数进行以下优化:
V = np.matrix(pd.read_csv('V.csv'))`
R = np.matrix(pd.read_csv('R.csv', index_col = 'Ticker'))`
w0= list()
for i in range(0, 84):
w0.append(1/84)
def calculate_portfolio_var(w,V):
w = np.matrix(w)
return (w*V*w.T)[0,0]
cons = ({'type': 'eq', 'fun': lambda x: np.sum(x)-1.0})
myBound = [(0, 1) for i in range(0, 84)]
res= minimize(calculate_portfolio_var, w0, args=V, method='SLSQP',constraints=cons, bounds = myBound)
其中V
是方差-协方差矩阵,R
是股票的年化收益系列。
除了2个约束(cons
和myBound
)之外,我还希望有一个附加约束,即结果投资组合收益(即结果权重和股票收益的加权平均值)等于一定数量,并且库存数量应小于等于一定数量。.
例如,它应该看起来像:
cons = ({'type': 'eq', 'fun': lambda x: np.sum(x)-1.0},
{'type': 'eq', PortfolioReturn = 10%,
{'type': 'ineq', number of result stocks <= 40)
我对Scipy最小化不是很熟悉,如果有人可以帮助我,我将不胜感激。
答案 0 :(得分:0)
那
constraints=({'type': 'eq', 'fun': lambda x: np.sum(x) - 1.0},
{'type': 'eq', 'fun': calculate_portfolio_var(x, V) - 0.1, 'args':V})
获得投资回报?对于结果库存的数量,您介意解释它与哪个变量相关吗?我的意思是,它看起来像是R,但是R在最小化问题中的任何地方都没有使用。
答案 1 :(得分:0)
限制投资组合中工具数量的约束称为基数约束。这导致具有离散变量的模型。通常使用 MIQP (混合整数二次规划)求解器来解决这类投资组合模型。 MIQP解算器可轻松用于Python,但SciPy没有解算器。