23 votos

optimización de la cartera con las limitaciones del VaR (o CVaR)

Me gustaría optimizar la asignación de una cartera (maximizando la exposición o el rendimiento esperado), pero con las restricciones del VaR o el CVaR. (algunas partes de mi cartera no pueden exceder un cierto VaR)

¿Cómo puedo lograrlo? ¿Hay alguna manera de convertir el problema en un problema de programación lineal? o de aproximar los resultados?

Cualquier enlace o idea es bienvenida.

0 votos

Para el VaR: creo que se puede convertir en un problema de media-varianza y elegir la cartera con la mayor rentabilidad esperada en la frontera para la que se cumple la restricción del VaR.

0 votos

@BobJansen Tengo varias restricciones de VaR en varios grupos de activos de mi cartera. No puedo ajustar manualmente cada día las rentabilidades esperadas de todos mis activos para asegurar las restricciones de VaR. Lo ideal sería modelar la restricción en el problema de optimización.

11voto

Brendan Puntos 150

En mi experiencia, un problema de optimización de la cartera de VaR o CVaR suele especificarse mejor como la minimización del VaR o CVaR y, a continuación, se utiliza una restricción para el rendimiento esperado. Como señala Alexey, es mucho mejor utilizar el CVaR que el VaR. La principal ventaja de una optimización del CVaR es que puede implementarse como un problema de programación lineal. Otra opción que he probado es la técnica de este documento:

http://www.math.uwaterloo.ca/~tfcolema/artículos/artículo_del_banco.pdf

Otra opción es la heurística de dos pasos en la que primero se encuentra la frontera eficiente de la media-varianza y luego se podrían calcular las estadísticas relevantes de la cartera sólo en las carteras eficientes de la media-varianza. De este modo, se podrían excluir las carteras que tengan un VaR o CVaR (o una desviación mixta del CVaR) demasiado alto para su consideración.

Sin embargo, como usted dice, le preocupa especialmente el VaR o el CVaR de ciertas partes de su cartera. Como se ha señalado anteriormente, las restricciones de VaR para diferentes grupos de activos requerirían restricciones no lineales. Sin embargo, las restricciones de CVaR para diferentes activos podrían calcularse utilizando restricciones lineales (aunque también sería posible aplicar una metodología relativamente más lenta utilizando restricciones no lineales). Para orientarse sobre cómo implementar esto como una restricción lineal, podría ser útil seguir

http://www.soa.org/library/proceedings/arch/2008/arch-2008-iss1-cox-lin.aspx

con la única diferencia de que usted querría calcular el CVaR sobre los grupos de valores pertinentes.

0 votos

El segundo enlace me parece muy interesante, gracias. Sin embargo, me cuesta entender cómo sustituyen la esperanza que aparece en la fórmula (9) de la página 8, por una suma sobre $j$ . ¿Qué son estos $r_{ij}$ y lo que es $m$ ? Aparte de eso, la solución es bastante elegante... Se puede resolver con un optimizador muy estándar.

0 votos

Si no me equivoco estos $m$ son las simulaciones de Monte Carlo que @David Nehme menciona en su respuesta. Supongo que $m$ tiene que ser lo suficientemente alto. 1000? 2000? ¿Tienes una idea?

0 votos

Tendría que ver con la incertidumbre en sus estimaciones del déficit esperado. Normalmente utilizo 10.000, pero no me centro en los extremos de las colas (como el 1% o menos), en cuyo caso podrías necesitar más simulaciones para obtener estimaciones razonables de las colas.

9voto

David DelMonte Puntos 121

La restricción del VaR es convexa y cuadrática y puede manejarse con cualquier solucionador que soporte restricciones cuadráticas, como Guribi , cplex (de IBM) o xpress (de FICO).

El CVaR puede formularse como un programa lineal si es capaz de realizar simulaciones monte-carlo sobre los rendimientos. Brevemente, el modelo LP es

\begin{eqnarray*} c &\ge& \alpha + {1 \over (1-\beta)|J|} \sum_{j\in J} z_j \\ z_j &\ge& \sum_{i \in I} r_{ij} x_i - \alpha \hspace{0.2in} \forall j \in J \end{eqnarray*} Donde c es la cvar en $\beta$ confianza, $I$ es el conjunto de inversiones, $x_i$ es el nivel de inversión en $i$ , $J$ es el conjunto de escenarios monte-carlo, $r_{ij}$ es la pérdida inesperada de la inversión $i$ en la simulación $j$ . $\alpha$ es la pérdida de la $100 \cdot \beta$ escenario percentil, y ${1 \over (1-\beta)|J|} \sum_j z_j$ es la pérdida media inesperada (en exceso de alfa) del peor $(1-\beta)|J|$ escenarios.

Las instancias de LP resultantes son muy densas y grandes, por lo que requiere retrasar la generación de columnas y restricciones para los problemas no triviales.

0 votos

Esta debería ser la respuesta aceptada. ¡La respuesta elegida arriba es la respuesta correcta a una pregunta diferente!

5 votos

¡Ahhh!. Sólo una cosa @David. El VaR NO es convexo. Esta es la principal motivación para tener restricciones de CVaR en absoluto. El VaR es más intuitivo pero no es convexo... ese es el principal problema.

4voto

realcals Puntos 597

Creo que lo que buscas es un tipo de solucionador llamado programa cónico de segundo orden ( SOCP ). Es como un solucionador de programas cuadráticos (QP), salvo que las restricciones pueden ser cuadráticas, así como la función objetivo. Existe una implementación de código abierto en python a través de la aplicación CVXOPT módulo.

0 votos

De hecho. Necesito restricciones cuadráticas. La función objetivo es lineal pero la restricción del VaR es definitivamente cuadrática. Echaré un vistazo a tu enlace. Gracias

0 votos

Parece que aunque CVXOPT es de código abierto, sólo contiene interfaces a los solucionadores de MOSEK, que no es de código abierto.

0 votos

No, eso no es correcto. Tiene sus propios solucionadores, además de la opción de usar MOSEK si lo tienes instalado. No es una dependencia.

4voto

DShook Puntos 5361

Puede encontrar un buen ejemplo sobre la optimización del CVaR en el libro " Optimización de la cartera con R/Rmetrics " Por Diethelm Wuertz, Yohan Chalabi, William Chen, Andrew Ellis.

#load library fPortfolio
library(fPortfolio)

#use indicies LPP2005, see http://www.pictet.com/en/home/lpp_indices.html
lppData  <-  100*LPP2005.RET[,1:6]

#create portfolio specification
frontierSpec  <- portfolioSpec();

#optimization criteria - CVaR
setType(frontierSpec)  <- "CVAR"

#set optimization algorithm
setSolver(frontierSpec)  <- "solveRglpk"

#set confidence level CVaR
setAlpha(frontierSpec)  <- 0.05

#number of portfolios in efficient frontier
setNFrontierPoints(frontierSpec)  <- 25

#optimize, without shortselling
frontier <- portfolioFrontier(data = lppData, spec = frontierSpec, constraints="LongOnly");

#build efficient frontier graph
tailoredFrontierPlot(object=frontier,mText="Mean-CVaR Frontier (Long only)",risk="CVaR");
weightedReturnsPlot(frontier)

No le recomiendo que utilice la optimización del VaR por dos razones:

  1. El VaR no es una medida de riesgo subbadicional, por lo que su cartera podría estar muy poco diversificada.
  2. Es más desafiante computacionalmente que el CVaR optimización

0 votos

Es posible que desee ajustar este código, si es posible, para incorporar las restricciones de CVaR en un grupo de activos, en lugar de sólo minimizar el CVaR.

1 votos

+Alexey, ¿tienes este ebook "Portfolio Optimization with R/Rmetrics"? En la vista previa de google en la página 333 me parece leer que las restricciones cuadráticas se tratan en el otro ebook "Advanced Portfolio Optimization with R/Rmetrics" Si tienes el libro, ¿puedes confirmar si hay esos ejemplos? books.google.com.sg/

3voto

user2792 Puntos 18

Usted podría definir su problema de optimización como un típico problema de optimización lineal de riesgo/rendimiento(1), y luego utilizar algún rendimiento previsto como el componente de rendimiento y VaR o cVaR como el componente de riesgo. Esto no será lineal, sin embargo se puede utilizar un algoritmo evolutivo, o algún otro algoritmo de búsqueda exótica, para maximizar para el retorno dado un límite en VaR o cVar. La parte difícil es hacer una buena función de utilidad/adecuación, es decir, una función suave.

En esencia, lo que vas a hacer es generar un montón de carteras factibles al azar, asegurándote de descartar cualquiera que tenga un VaR demasiado grande. Las carteras factibles restantes se clasifican según la función de utilidad/adecuación. Se conservan algunas de las mejores una vez (supervivencia del más apto) y en base a ellas se hacen pequeñas alteraciones aleatorias en las carteras (mutaciones). A continuación, vuelva a clasificar las carteras. Vuelva a hacer esto durante varias generaciones. Al final deberías optimizar en base al VaR. Hay muchas herramientas y marcos que pueden hacer esto por ti. Yo usé Encog la última vez que hice algo así.

(1) Utility(portfolio) = PredictedReturn(portoflio) - VaR(portoflio)

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