python - 同等风险贡献投资组合 scipy 优化不起作用
问题描述
我正在尝试为等风险贡献投资组合创建一个工具,基本上遵循这篇文章(https://quantdare.com/risk-parity-in-python/),但它在最后一步(def risk_parity_weights)失败了scipy 优化器不工作。它一直给我初始权重作为优化权重,我知道它们不是优化权重,因为即使 Excel Solver 也能够优化它。所有其他功能均已检查并且正确。不知道我做错了什么 - 请帮忙!
#Calculate portfolio st.dev
portfolio_stdev = np.sqrt(weights*covariances*weights.T)[0,0]
#Calculate Marginal Risk Contribution of each asset
MRC = covariances*weights.T/portfolio_stdev
#Calculate Risk Contribution of each asset
RC = np.multiply(MRC,weights.T)
return RC
def risk_budget_objective_error(weights,*args):
#Covariance table occupies the first position in args variable
covariances = args[0]
#State risk budgets
assets_risk_budget = args[1]
#Convert weights array to numpy matrix
weights = np.matrix(weights)
#Calculate portfolio st_dev
portfolio_stdev = calculate_portfolio_stdev(ca_begweights,ca_cov)
#Calculate risk contributions
assets_risk_contribution = calculate_risk_contribution(ca_begweights,ca_cov)
#Calculate desired risk contribution of each asset
assets_risk_target = np.asmatrix(np.multiply(portfolio_stdev,assets_risk_budget))
#Calculate error between desired contribution and calculated distribution of each asset
error = sum(np.square(assets_risk_contribution - assets_risk_target.T))[0,0]
return error
def risk_parity_weights(covariances,assets_risk_budget, initial_weights):
#Constraints to optimization
#sum equals 100%
cons = ({'type':'eq','fun':lambda x: np.sum(x) - 1.0},
{'type':'ineq','fun':lambda x: x})
#Optimization in scipy
optimize_result = minimize(risk_budget_objective_error,
x0 = initial_weights,
args = (covariances, assets_risk_budget),
method = 'SLSQP',
constraints = cons,
tol = Tolerance,
options = {'disp':True})
#Get optimized weights
weights = optimize_result.x
return weights
risk_parity_weights(ca_cov,risk_budget_all, ca_begweights)
给我
Optimization terminated successfully. (Exit mode 0)
Current function value: 9.54000328523598e-07
Iterations: 1
Function evaluations: 5
Gradient evaluations: 1
请参阅下面的变量数据
ca_cov = array([[ 5.28024463e-06, 3.29734889e-07, -7.04781216e-08], [ 3.29734889e-07, 1.32373854e-05, 3.71807979e-08], [-7.04781216e-08, 3.71807979e-08, 3.50845569e-05]])
risk_budget_all = Unnamed: 1 0.333333 Unnamed: 2 0.333333 Unnamed: 3 0.333333 Name: Risk Budget, dtype: object
ca_begweights = array([0.33333333, 0.33333333, 0.33333333])
解决方案
推荐阅读
- node.js - sh: 1: cucumber.js: 未找到
- java - iTextPDF 到 OpenPDF 集成
- flutter - 打印时主键为空,并检索结果,但打印时 ID 仍为空
- verilog - 在嵌套分配中没有分配 HiZ 的双向信号
- excel - “重定向”后 Excel VBA 网站登录停止
- jquery - POST Json 到剃刀页面
- visual-studio - Wix“无法从路径加载工具”
- python - 如何将我的scrapy从打开star_url的每个链接更改为打开我的csv
- sql - 多个事件名称
- java - 使用 Java 共享 Google Drive 链接