5 votos

Cómo derivar las ponderaciones de la cartera a partir del presupuesto de riesgo

Objetivo : Intento enmarcar las inversiones de volatilidad objetivo teniendo en cuenta alguna visión sobre qué activo sobreponderar. Por ejemplo, partiendo de una asignación de paridad de riesgo, ajustar la contribución marginal al riesgo de cada activo (todos iguales en paridad de riesgo) y derivar las correspondientes ponderaciones objetivo de la cartera.

Ejemplo La pregunta es: ¿quieres invertir en 3 activos? Se le da el presupuesto de riesgo para cada acción [0,5, 0,3, 0,2]. El objetivo es obtener las ponderaciones de la cartera de forma que la contribución marginal de cada activo a la varianza de la cartera se explique en un 50%, 30% y 20% respectivamente para cada activo. El objetivo es encontrar las ponderaciones de la cartera $\mathbf{w} \in \mathbb{R}^3$ tal que el vol objetivo de la cartera es $v \in \mathbb{R}^+$ .

Pregunta ¿Cuál es la literatura relevante sobre la construcción de carteras a partir de la presupuestación del riesgo? Una condición necesaria para la respuesta es proporcionar referencias. Se apreciaría algún código de python que resuelva el ejemplo anterior para una matriz de correlación dada.

0 votos

Véase el documento de Roncalli Gestión de las exposiciones al riesgo mediante el enfoque de presupuestación del riesgo . Con sólo 3 acciones ni siquiera necesitas Python, puedes hacerlo en Excel en 15 minutos de principio a fin.

0 votos

Vea también las respuestas a esto quant.stackexchange.com/questions/3114/

4voto

Tim Puntos 11

Lo que usted quiere es diseñar una cartera con presupuesto de riesgo. Si sus limitaciones son sólo $\mathbf{1}^T\mathbf{w}=1$ y $\mathbf{w} \geq \mathbf{0}$ entonces la forma correcta de hacerlo es utilizar la formulación propuesta por Spinu [1]: $$\begin{array}{ll} \underset{\mathbf{w}}{\textsf{minimize}} & \frac{1}{2}\mathbf{w}^{T}\Sigma\mathbf{w} - \sum_{i=1}^{N}b_i\log(w_i)\\ \textsf{subject to} & \mathbf{1}^T\mathbf{w}=1. \end{array}$$ donde $\mathbf{w}$ es el vector de pesos de la cartera, $\Sigma$ es la matriz de covarianza, y $b_i, i = 1, 2, ..., N,$ son los presupuestos de riesgo.

He implementado un solucionador para ese problema de optimización tanto en R como en Python. El código es de código abierto, puedes consultar la documentación en: https://github.com/dppalomar/riskParityPortfolio (versión R) y https://github.com/dppalomar/riskparity.py (versión Python).

Como fragmento de código, puedes hacerlo en una línea de código Python:

import riskparityportfolio as rp
optimum_weights = rp.vanilla.design(cov, np.array([0.5, 0.3, 0.2]))

donde cov es la matriz de covarianza de sus activos.

[1] Florin Spinu, An Algorithm for Computing Risk Parity Weights, 2013. https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2297383

2voto

btelles Puntos 153

PyFENG implementa un método mejorado de descenso cíclico de coordenadas (CCD) basado en Choi & Chen (2022) :

  • Choi J, Chen R (2022) Métodos iterativos mejorados para resolver la cartera de paridad de riesgo. Revista de Derivados y Estudios Cuantitativos 30. https://doi.org/10.1108/JDQS-12-2021-0031 (Acceso abierto)

A continuación se muestra un ejemplo de 5 activos. Después de instalar PyFENG ( pip install pyfeng ), ejecute

import numpy as np
import pyfeng as pf
cov = np.array([
        [ 94.868, 33.750, 12.325, -1.178, 8.778 ],
        [ 33.750, 445.642, 98.955, -7.901, 84.954 ],
        [ 12.325, 98.955, 117.265, 0.503, 45.184 ],
        [ -1.178, -7.901, 0.503, 5.460, 1.057 ],
        [ 8.778, 84.954, 45.184, 1.057, 34.126 ]
    ])/10000

m = pf.RiskParity(cov=cov, budget=[0.1, 0.1, 0.2, 0.3, 0.3])
m.weight()

La salida:

array([0.077, 0.025, 0.074, 0.648, 0.176])

Ver el Documentación de PyFENG para más opciones.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X