2016-07-06 40 views
1

파이썬을 사용하여 위험 패리티 문제를 해결하고 싶습니다.파이썬을 사용하여 위험 패리티 할당을 해결하는 방법

위험 패리티는 금융 포트폴리오 구축을위한 고전적인 접근 방식입니다. 기본 아이디어는 각 자산에 대한 위험 기여도가 동일한 지 확인하는 것입니다.

예를 들어, 거기 3 개 자산을 가정하고, 자산 수익률에 대한 공동 분산 행렬은 알려져

(var_11,var_12,var_13 

var_12,var_22,var_23 

var_13,var_23,var_33) 

내가 이러한 자산에 대한 포트폴리오 구성 비중 (W1을 마련하고 싶습니다 , W2, W3)되도록 :

w1+w2+w3=1 

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

및 각 자산에 대한 위험 기여도 같음 :

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 

I을 파이썬을 사용하여 이러한 방정식을 해결하는 방법을 잘 모르겠습니까?

+0

이 내용은 프로그래밍 질문으로 보지 않습니다. 아마도 더 많은 수학 중심의 다른 StackExchange 사이트에 더 적합할까요? – EdChum

답변

0

numpy와 scipy solver를 사용하십시오. 이 사람은 그것을 잘 설명하고 파이썬으로합니다.

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)