python - 如何使用Python解决风险平价分配

标签 python equation portfolio nonlinear-functions

我想使用python解决风险平价问题。

风险平价是金融投资组合构建的经典方法。基本思想是确保每个 Assets 的风险贡献相等。

例如,假设有 3 个 Assets ,并且 Assets yield 的协方差矩阵是已知的:

(var_11,var_12,var_13

var_12,var_22,var_23

var_13,var_23,var_33) 

我想为这些 Assets (w1,w2,w3) 提出一个投资组合权重,以便:
w1+w2+w3=1

w1>=0
w2>=0
w3>=0

每个 Assets 的风险贡献等于:
w1^2*var_11+w1*w2*var_12+w1*w3*var_13

=w2^2*var_22+w1*w2*var_12+w2*w3*var_23

=w3^2*var_33+w1*w3*var_13+w2*w3*var_23

我不确定如何使用 python 求解这些方程,任何人都可以对此有所了解?

最佳答案

比这晚了一年多,但使用 numpy 和 scipy 求解器。这家伙解释得很好,并在python中做到了。

https://thequantmba.wordpress.com/2016/12/14/risk-parityrisk-budgeting-portfolio-in-python/

所有的功劳都归功于写博客文章的人。这是博客中的代码...

from __future__ import division
import numpy as np
from matplotlib import pyplot as plt
from numpy.linalg import inv,pinv
from scipy.optimize import minimize

 # risk budgeting optimization
def calculate_portfolio_var(w,V):
    # function that calculates portfolio risk
    w = np.matrix(w)
    return (w*V*w.T)[0,0]

def calculate_risk_contribution(w,V):
    # function that calculates asset contribution to total risk
    w = np.matrix(w)
    sigma = np.sqrt(calculate_portfolio_var(w,V))
    # Marginal Risk Contribution
    MRC = V*w.T
    # Risk Contribution
    RC = np.multiply(MRC,w.T)/sigma
    return RC

def risk_budget_objective(x,pars):
    # calculate portfolio risk
    V = pars[0]# covariance table
    x_t = pars[1] # risk target in percent of portfolio risk
    sig_p =  np.sqrt(calculate_portfolio_var(x,V)) # portfolio sigma
    risk_target = np.asmatrix(np.multiply(sig_p,x_t))
    asset_RC = calculate_risk_contribution(x,V)
    J = sum(np.square(asset_RC-risk_target.T))[0,0] # sum of squared error
    return J

def total_weight_constraint(x):
    return np.sum(x)-1.0

def long_only_constraint(x):
    return x

x_t = [0.25, 0.25, 0.25, 0.25] # your risk budget percent of total portfolio risk (equal risk)
cons = ({'type': 'eq', 'fun': total_weight_constraint},
{'type': 'ineq', 'fun': long_only_constraint})
res= minimize(risk_budget_objective, w0, args=[V,x_t], method='SLSQP',constraints=cons, options={'disp': True})
w_rb = np.asmatrix(res.x)

关于python - 如何使用Python解决风险平价分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38218975/

相关文章:

python - Tkinter 破坏 Toplevel 并产生另一个错误

python - 在 Sklearn 管道中使用 VotingClassifier

php - 使用 jQuery 进行 Javascript 分页(下一个项目/上一个项目)?

jquery - Portfolio Grid随机间距@media查询

python - 在 python 中是否有创建 REPEAT_UNTIL 循环的特定方法?

python Spark reducebykey 形成单个列表

当方程不可因式分解时,Java 仅返回 0

python - 将符号方程解析为 Sympy 函数

math - 3d 成像 : defining an ellipsoid based on 3 given ellipses which are parallel to the Cartesian planes

ruby-on-rails - 最适合学生练习和宠物项目的托管服务?应该支持rails