Ejemplo de cartera de fondo de inversión en R

Autor: | Última modificación: 19 de octubre de 2022 | Tiempo de Lectura: 3 minutos
Temas en este post:

En este artículo te mostraremos un ejemplo de cartera de fondo de inversión en R para minimizar la varianza.

Cartera de fondo de inversión en R

Partimos de varios fondos de inversión y queremos una cartera que nos maximice el retorno medio en un año mientras minimiza la varianza. Para ello, buscamos calcular unos coeficientes que nos digan qué porcentaje de nuestra cartera corresponde a cada fondo de inversión en R.

Ejemplo de cartera de fondo de inversión en R 1

Cargamos la cartera de fondo de inversión en R con la rentabilidad a un año vista:

In [132]: funds <- read.csv ('data/fondos_inversion.csv')
funds$date <- as.Date(funds$date)

In [133]: head (funds)
datefondo.1fondo.2fondo.3fondo.4fondo.5fondo.6fondo.7fondo.8fondo.9fondo.22fondo.23fondo.24fondo.25
<date><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl>
12015-04-171.2426261.4504981.2838211.2837201.5216071.5216401.3510851.2420521.2138781.4400021.3421621.8287621.348290
22015-04-181.242626
1.4504981.2838211.2837201.5216071.5216401.3510851.2420521.2138781.2138781.3421621.8287621.348290
32015-04-191.242626
1.4504981.2838211.2837201.5216071.5216401.3510851.2420521.2138781.2138781.3421621.8287621.348290
42015-04-201.2532861.4666061.2659391.2688151.5166621.5166961.3515251.2526151.2263821.4552061.3266551.7822501.339593
52015-04-211.2594901.4574081.2780231.2780351.5360471.5360771.3478791.2588991.2316481.4542981.3390611.8294591.348979
62015-04-221.2428911.4604471.2698611.2697871.5576591.5576591.3441931.2422871.2125251.4481071.3352521.8611521.357175

Esto lo podemos pintar así:

In [135]: library (ggplot2)
ggplot (funds, aes(x = date)) + geom_line (aes (y = fondo.1.color = "fondo1")) + geom_line (aes (y = fondo.2, color = "fondo2"))
fondo de inversión en R
In [136] : df_subset <- funds
df_subset$date <- NULL

Queremos optimizar un retorno máximo y una varianza mínima de nuestro portafolio:

Ejemplo de cartera de fondo de inversión en R 2

Dadas las variables:

Ejemplo de cartera de fondo de inversión en R 3

Queremos encontrar los coeficientes c1, de forma que la siguiente función sea mínima:

Ejemplo de cartera de fondo de inversión en R 4

Debe cumplir las siguientes limitaciones:

Ejemplo de cartera de fondo de inversión en R 5
In [137]: library(pracma)
variance_importance <- 100

roi_optim <- function (coefs) {
mn <- mean (rowSums (repmat (coefs, nrow(df_subset),1) * df_subset))
vr <- var (rowSums (repmat (coefs, nrow(df_subset), 1) * df_subset)) 
return (-mn/exp (1 + variance_importance * vr))
#return (mn)
}
constrain_func <- function (coefs) {
sum(coefs)
}
In 11: x0 <- rep(1/ncol (df_subset), ncol (df_subset)) #Valor inicial de los coeficientes
lx <- rep (0, lenght (x0)) #Valor mínimo de los coeficientes
ux <- rep (1, lenght (x0)) #Valor máximo de los coeficientes
soll <- Rsolnp :: solnp (x0, fun = roi_optim, eqfun = constrain_func, eqB = 1, LB = lx, UB = ux)

Ejemplo de cartera de fondo de inversión en R 6
In [139] : lx

0- 0- 0- 0- 0- 0- 0- 0- 0- 0- 0- 0- 0- 0- 0- 0- 0- 0- 0- 0- 0- 0- 0- 0- 0- 0- 0- 0- 0- 0- 0-

In [140]: ux

1- 1- 1- 1- 1- 1- 1- 1- 1- 1- 1- 1- 1- 1- 1- 1- 1- 1- 1- 1- 1- 1- 1- 1- 1- 1- 1- 1- 1- 1- 1-

In [141] : soll$pars

8.51600458131105e-08 – 2.37396166066272e-08 – 9.80498626556178e-09 – 9.79624168211611e-09 – 7.55872530855147e-08 – 3.81844795504704e-05 – 0.115153571187694 – 2.37490219608833e-08 – 3.36953190604144e-08 – 2.84152953887565e-08 – 8.55404748007717e-08 – 2.99134401863966e-08 – 3.60547670800086e-08 1.76651394740702e-08 – 2.42111850443934e-08 – 2.8458842850002e-08 – 3.00636014668393e-08 – 0.357986118890563 – 0.329013969300045 – 3.4446595251685e-08 – 3.44991721343077e-08 – 7.15215851504688e-08 – 2.6623767557937e-08 – 1.10224127479035e-06 – 2.45417759315134e-08 – 1.9613507034608e-11 – 0.197804682962264 – 155764146919459e-06 – 3.54567273528448e-08 – 3.53159129983526e-08 – 9.01675885049376e-09

In [ ]: coefs <- soll$pars
names (coefs) <- colnames (df_subset)
coefs <- round (coefs [coefs > 1e - 2], 4)
coefs <- coefs/sum (coefs)

In [ ] : coefs

Para calcular el fondo de inversión en R agregado resultante sería:

In [142]: coefs <- soll$pars
names (coefs) <- colnames (df_subset)
coefs <- round (coefs [coefs > le-2], 4)
coefs <- coefs/sum (coefs)

In [143]: coefs

fondo.10: 0 1152

fondo.15: 0.329

fondo.19: 0.358

fondo.20: 0.1978

Ejemplo de cartera de fondo de inversión en R 7
In [144] : funds ["portfolio"] <- as.matrix (funds [names (coefs) ] ) %*% coefs

In [145] : head (funds)
Ejemplo de cartera de fondo de inversión en R 8
In [146] : ggplot (funds, aes(x=date)) + geom_line (aes (y = portfolio, color = "minima varianza")) +
geom_line (aes (y = fondo.10, color = "fondo 10"))+
geom Line (aes (y-fondo.15.color="fondo.15"))+
geom_line (aes (y = fondo.19, color = "fondo, 19))+
geom line (aesty-fondo.28.color" fondo.20"))
Ejemplo de cartera de fondo de inversión en R 9
In [147]: 10 ^ (colMeans (log10 (funds [c ("portfolio", names (coefs)) ] ) ))

portfolio: 1.0577233152499

fondo.10: 1.04435252394117

fondo.15: 1.07308781575452

fondo. 19: 1.04087504856109

fondo.20: 1.03798441709755

In 1: apply (funds [c ("portfolio", names (coefs))], 2, var)

portfolio: 0.00439885329302952

fondo.10: 0.0192770515898909

fondo.15: 0.0106828702655021

fondo. 19: 0.00767870804654685

fondo.20: 0.015899536378032

¿Quieres seguir formándote?

En este artículo hemos visto un ejemplo de cartera de fondo de inversión en R para minimizar la varianza. Para ello, juntamos varios fondos de inversión. Lo que buscamos con ellos es una cartera que nos maximice el retorno medio a un año mientras minimiza la varianza del mismo.

Hemos calculado los coeficientes que nos muestran el porcentaje de nuestra cartera que corresponde a cada fondo de inversión en R.

Recuerda que este tema y muchos otros forman parte de nuestro Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, una formación intensiva en la que podrás aprender, en tan solo 8 meses, todo lo necesario para incursionar en el prolífico mercado laboral del Big Data. ¡Anímate a preguntar para obtener más información, te esperamos!

👉 Descubre más del Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp ¡Descarga el temario!

👉 Prueba el Bootcamp Gratis por una Semana ¡Empieza ahora mismo!

👉 Conoce nuestros otros Bootcamps en Programación y Tecnología

[email protected]

¿Trabajo? Aprende a programar y consíguelo.

¡No te pierdas la próxima edición del Aprende a Programar desde Cero Full Stack Jr. Bootcamp!

 

Prepárate en 4 meses, aprende las últimas tecnologías y consigue trabajo desde ya. 

 

Solo en España hay más de 120.400 puestos tech sin cubrir, y con un sueldo 11.000€ por encima de la media nacional. ¡Es tu momento!

 

🗓️ Próxima edición: 13 de febrero

 

Reserva tu plaza descubre las becas disponibles.