Optimización de carteras en Python | Teoría moderna de carteras en Python

Contenidos

Introducción

En este artículo, aprenderemos los conceptos de gestión de carteras e implementaremos los mismos mediante el uso de bibliotecas de Python.

El artículo se divide en tres partes con el fin de cubrir los aspectos fundamentales de la gestión de carteras como se muestra a continuación:

1. Rentabilidad de un activo y una cartera

2. Riesgo asociado con un activo y una cartera

3. Teoría moderna de la cartera: encontrar la cartera óptima

Rentabilidad de un activo y una cartera

Antes de sumergirnos en el cálculo de los rendimientos de un activo y una cartera, visitemos brevemente la definición de cartera y rendimientos.

portafolio: Una cartera es una colección de instrumentos financieros como acciones, bonos, materias primas, efectivo y equivalentes de efectivo, así como sus contrapartes de fondos. [Investopedia]

En este artículo, tendremos nuestra cartera que contiene 4 activos (“Cartera centrada en acciones“): Las acciones de Apple Inc., Nike (NKC), Google y Amazon. La vista previa de nuestros datos se muestra a continuación:

23351data-7902264

Devoluciones: Se refiere a la ganancia o pérdida de nuestro activo / cartera durante un período de tiempo fijo. En este análisis, hacemos un retorno como el cambio porcentual en el precio de cierre del activo sobre el precio de cierre del día anterior. Calcularemos los rendimientos usando.pct_change () función en python.

A continuación se muestra el código de Python para hacer lo mismo y las 5 filas superiores (encabezado) de las devoluciones

Nota: la primera fila es Nula si no existe una fila anterior para facilitar el cálculo del cambio porcentual.

98345pct_change-8183113
73404asset20returns20output-8451066

Devolución de una cartera se define como la suma ponderada de los rendimientos de los activos de la cartera.

Para demostrar cómo calcular el rendimiento de la cartera en Python, inicialicemos los pesos de forma aleatoria (que luego optimizaremos). El rendimiento de la cartera se calcula como se muestra en el código a continuación y también se muestra el encabezado de los rendimientos de la cartera:

92818port_return-5452233
78623port_tet_output-9728010

Hemos visto cómo calcular los rendimientos, ahora cambiemos nuestro enfoque a otro concepto: Riesgo

El riesgo asociado con los activos y la cartera

El método para calcular el riesgo de una cartera se escribe a continuación y posteriormente explicamos y damos la formulación matemática para cada uno de los pasos:

  • Calcule la matriz de covarianza en los datos de rendimiento.
  • Anualice la covarianza multiplicando por 252
  • Calcule la varianza de la cartera multiplicándola con vectores de peso.
  • Calcule la raíz cuadrada de la varianza calculada anteriormente para obtener la desviación estándar. Esta desviación estándar se denomina Volatilidad de la cartera.

La fórmula para calcular la covarianza y anualizarla es:

covarianza = devuelve.cov () * 252

como hay 252 días hábiles, multiplicamos la covarianza por 252 para anualizarla.

La variación de la cartera, que se calculará en el paso 3 anterior, depende de los pesos de los activos en la cartera y se define como:

21018port20var20for-8559619

dónde,

  • Covportafolio es la matriz de covarianza de la cartera
  • ponderaciones es el vector de ponderaciones asignadas a cada activo de la cartera

A continuación se muestra el enfoque para calcular el riesgo de activos en Python.

17723var_matrix-4257434

Como se explicó anteriormente, multiplicamos la matriz de covarianza con 252, ya que hay 252 días de negociación en un año.

12834var_output-1090802

Los elementos diagonales de varnce_matrix representan la varianza de cada activo, mientras que los términos fuera de la diagonal representan la covarianza entre los dos activos, por ejemplo: el elemento (1,2) representa la covarianza entre Nike y Apple.

El código para calcular el riesgo de la cartera en python, cuyo método vimos anteriormente, es como se muestra:

37080port_varvol-6643533
85529port_varvoloutput-9210600

Ahora, la tarea para nosotros es optimizar los pesos. ¿Por qué? Para que podamos maximizar nuestro rendimiento o minimizar nuestro riesgo, ¡y eso lo hacemos utilizando la teoría de la cartera moderna!

Teoría moderna de la cartera

La teoría moderna de la cartera sostiene que las características de riesgo y rendimiento de una inversión no deben considerarse solas, sino que deben evaluarse según la forma en que la inversión afecta el riesgo y el rendimiento general de la cartera. MPT muestra que un inversor puede construir una cartera de múltiples activos que maximizará los rendimientos para un nivel de riesgo determinado. Asimismo, dado un nivel deseado de rendimiento esperado, un inversor puede construir una cartera con el menor riesgo posible. Basado en medidas estadísticas como la varianza y la correlación, el desempeño de un inversionista individual es menos importante que cómo impacta a toda la cartera. [Investopedia]

Esta teoría se resume en la siguiente figura. Encontramos la frontera como se muestra a continuación y maximizamos el rendimiento esperado para el nivel de riesgo o minimizamos el riesgo para un nivel de rendimiento esperado determinado.

36018sampef-1787570

Nuestro objetivo es elegir las ponderaciones para cada activo de nuestra cartera de modo que maximicemos el rendimiento esperado dado un nivel de riesgo.

Matemáticamente, la función objetivo se puede definir como se muestra a continuación:

69651img-6724-2025910

Otra forma de ver la Frontera Eficiente y la función objetivo es que podemos minimizar el riesgo dado que el rendimiento esperado es al menos mayor que el valor dado. Matemáticamente, esta función objetivo se puede escribir como:

99523img-6723-5286689

la primera línea representa que el objetivo es minimizar la varianza de la cartera, es decir, a su vez la volatilidad de la cartera y, por tanto, minimizar el riesgo.

El sujeto a restricciones implica que los rendimientos deben ser mayores que un rendimiento objetivo en particular, todas las ponderaciones deben sumar 1 y las ponderaciones no deben ser negativas.

Ahora que conocemos el concepto, ¡pasemos a la parte práctica ahora!

En primer lugar, creamos la frontera eficiente ejecutando un bucle. En cada ciclo, consideramos un conjunto diferente de ponderaciones asignadas aleatoriamente para los activos de nuestra cartera y calculamos el rendimiento y la volatilidad para esa combinación de ponderaciones.

Para ello creamos 3 listas vacías, una para almacenar los rendimientos, otra para almacenar la volatilidad y la última para almacenar los pesos de la cartera.

29899c1-2600534

Una vez que hemos creado las listas, generamos aleatoriamente las ponderaciones de nuestros activos repetidamente, luego normalizamos la ponderación para sumar 1. Luego calculamos los rendimientos de la misma manera que calculamos anteriormente. Posteriormente, calculamos la varianza de la cartera y luego sacamos la raíz cuadrada y luego la anualizamos para obtener la volatilidad, la medida de riesgo para nuestra cartera.

16432c2-6971130

Ahora agregamos los datos en un diccionario y luego creamos un marco de datos para ver la combinación de ponderaciones de los activos y los rendimientos correspondientes y la volatilidad que generan.

51715c3-6913887
62289c4-9105515

Aquí está la vista previa de los datos de rentabilidad, volatilidad y ponderaciones de la cartera.

21078c5-7590957

¡Ahora tenemos todo con nosotros para entrar en la última vuelta de esta carrera y encontrar el juego de pesos óptimo!

Trazamos la Volatilidad contra los rendimientos que calculamos anteriormente, esto nos dará la Frontera Eficiente que queríamos crear al principio de este artículo.

21481c6-7412065

¡¡Y aquí vamos!!

97146c7-6006044

Ahora que tenemos con nosotros la Frontera Eficiente, busquemos los pesos óptimos.

Podemos optimizar el uso de varios métodos como se describe a continuación:

  • Cartera con mínima volatilidad (riesgo)
  • Cartera óptima (relación máxima de Sharpe)
  • Rentabilidad máxima a nivel de riesgo; Riesgo mínimo a un nivel de rendimiento esperado; Cartera con mayor ratio de Sortino

En este artículo optimizaré a través de los dos primeros enfoques. En el tercer segmento, el ‘Rendimiento máximo a un nivel de riesgo’ y el ‘Riesgo mínimo a un nivel de rendimiento esperado’ son bastante sencillos, mientras que el que se basa en el índice de Sortino es similar al índice de Sharpe.

1. Volatilidad mínima

Para encontrar la combinación de volatilidad mínima, seleccionamos la fila en nuestro marco de datos que corresponde a la varianza mínima y encontramos esa fila usando la función .idxmin (). El código para hacer lo mismo se muestra a continuación:

63020c8-3042165

Los pesos que obtenemos de esto son:

69752c9-1175797

Ahora, averigüe dónde se encuentra el punto mínimo de volatilidad en la curva anterior. ¡La respuesta se muestra al final! ¡Pero no hagas trampa!

2. Relación de nitidez más alta

El índice de Sharpe es el rendimiento promedio obtenido en exceso de la tasa libre de riesgo por unidad de volatilidad o riesgo total. La fórmula utilizada para calcular la relación de Sharpe se proporciona a continuación:

Relación de nitidez = (Rpag – RF)/ DAKOTA DEL SURpag

dónde,

  • Rpag es el retorno de la cartera
  • RF es la tasa libre de riesgo
  • Dakota del Surpag es la desviación estándar de los rendimientos de la cartera

El código para calcular la cartera más óptima, es decir, la cartera con el índice de Sharpe más alto, se muestra a continuación:

38331c10-3534930

A continuación, se muestran los pesos de la cartera que dan el índice de Sharpe más alto:

82649c11-1437711

Averigüe dónde se encuentra el punto de relación de Sharpe más alto en la curva anterior. ¡La respuesta se muestra a continuación! Una vez más, ¡no hagas trampa!

91780c13-9005749

¡Como se prometió aquí está la respuesta a las dos preguntas anteriores!

76675c14-3443834

La estrella azul corresponde al punto de relación de Sharpe más alto y la estrella amarilla corresponde al punto de volatilidad mínima.

Ahora, antes de terminar este artículo, le animo a encontrar la cartera de Rentabilidad Máxima a un nivel de riesgo ‘y’ Riesgo Mínimo a un Nivel de Rentabilidad Esperada ‘y marcarlos en el gráfico anterior.

Además de utilizar la relación de Sharpe, también podemos optimizar la cartera utilizando la relación de Sortino.

Dando un breve al respecto:

los Relación de Sortino es una variación del índice de Sharpe que diferencia la volatilidad dañina de la volatilidad general total mediante el uso de la desviación estándar del activo de los rendimientos negativos de la cartera (desviación a la baja) en lugar de la desviación estándar total de los rendimientos de la cartera. La relación de Sortino toma el rendimiento de un activo o cartera y resta la tasa libre de riesgo, y luego divide esa cantidad por la desviación a la baja del activo. [Investopedia]

Relación de Sortino = (Rpag – rF)/ DAKOTA DEL SURD

dónde,

  • Rpag es el retorno de la cartera
  • rF es la tasa libre de riesgo
  • Dakota del SurD es la desviación estándar de la desventaja

En caso de que tenga algún problema para implementar o comprender los 3 métodos de optimización que describí anteriormente, escríbame al [email protected] | [email protected] | o comuníquese con LinkedIn en https://www.linkedin.com/in/parth-tyagi-4b867452/

Nota sobre el autor: Parth Tyagi está actualmente cursando PGDBA de IIM Calcuta, IIT Kharagpur & Indian Statistical Institute-Kolkata y ha completado el B.Tech de IIT Delhi. Tiene ~ 4 años de experiencia laboral en análisis avanzado.

Los medios que se muestran en este artículo sobre la optimización de la cartera en Python no son propiedad de DataPeaker y se utilizan a discreción del autor.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.