我正在尝试使用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 最小化不太熟悉,如果有人可以帮助我,我将不胜感激。