【发布时间】:2016-10-11 13:21:25
【问题描述】:
我正在解决一个投资组合优化问题,我需要以这样一种方式分配权重(资本),以使最终投资组合具有尽可能低的历史波动率。目前,我对每只股票的权重总和及其平方权重有两个限制。每只股票的分配范围为 (0.00, 0,02)。
目前我的代码如下所示:
def portfolio_vol(w):
#compute porfolio volatility
portfolio_volatility = np.sqrt(w.T.dot(cov_matrix).dot(w))
return portfolio_volatility
w 是一个等权向量,计算为w = 1.0/len(composition)
def find_optimal_allocations():
bnds = tuple((0.00, 0.02) for x in weights)
cons = ({'type': 'eq', 'fun': lambda x: 1 - sum(x)}, {'type': 'ineq', 'fun': lambda x: -sum(x**2) + 0.02})
result = spo.minimize(portfolio_vol, weights, method='SLSQP', bounds = bnds, constraints = cons)
return result.x
我将我的权重存储在 MultIndex pandas Series 中,其中股票按国家/地区分组并且最初是等权重的:
Country Ticker
AS OMV AV Equity 0.020000
BE SOLB BB Equity 0.020000
FI NESTE FH Equity 0.020000
FR FP FP Equity 0.020000
GB LAND LN Equity 0.020000
GE BAS GR Equity 0.020000
HEI GR Equity 0.020000
GR TITK GA Equity 0.020000
IR CRH ID Equity 0.020000
RYA ID Equity 0.020000
...
US AMAT US Equity 0.020000
AMGN US Equity 0.020000
APA US Equity 0.020000
我想在find_optimal_allocations() 中加入额外的限制,以便为每个国家/地区的最大权重设置限制:s.groupby(level=0,axis=0).sum()
Country
AS 0.020000
BE 0.020000
FI 0.020000
FR 0.020000
GB 0.020000
GE 0.040000
GR 0.020000
IR 0.040000
US 0.400000
例如在这些范围内:
[(.05,.10), (.05,.10), (.05,.10), (.05,.10), (.05,.10), (.05,.10), (.05,.10), (.05,.10), (.05,.20)]
如何将这些界限包含在我的优化函数中,以便同时考虑国家权重约束和单个库存约束?
【问题讨论】:
标签: python scipy mathematical-optimization finance