Introducción a la teoría de portafolios

Importar datos.

datos = read.csv("Cuatro acciones 2020.csv", sep = ";", dec = ",", header = T)
head(datos)
tail(datos)
A data.frame: 6 × 5
FechaECOPFAVALISANUTRESA
<fct><int><int><int><int>
126/03/2018277511651308025720
227/03/2018264511551308025700
328/03/2018261511651332025980
42/04/2018 269011651342025920
53/04/2018 273011751366025920
64/04/2018 274011901356025840
A data.frame: 6 × 5
FechaECOPFAVALISANUTRESA
<fct><int><int><int><int>
4953/04/2020 22709061550019700
4966/04/2020 22609551614019720
4977/04/2020 22309321668020020
4988/04/2020 23609361720020700
49913/04/202022509511786021300
50014/04/202022209551800022500

Matriz de precios.

precios = datos[,-1]
precios = ts(precios)

Nombres de las acciones

nombres = colnames(precios)
nombres
  1. 'ECO'
  2. 'PFAVAL'
  3. 'ISA'
  4. 'NUTRESA'

Matriz de rendimientos.

rendimientos = diff(log(precios))

Coeficientes de correlación

correlacion = cor(rendimientos)
print(correlacion)
              ECO    PFAVAL       ISA   NUTRESA
ECO     1.0000000 0.6513161 0.1531317 0.3337626
PFAVAL  0.6513161 1.0000000 0.2308501 0.3305836
ISA     0.1531317 0.2308501 1.0000000 0.4572004
NUTRESA 0.3337626 0.3305836 0.4572004 1.0000000

Rendimientos esperado de cada acción.

rendimientos_esperados = apply(rendimientos, 2, mean)
print(rendimientos_esperados)
          ECO        PFAVAL           ISA       NUTRESA
-0.0004471815 -0.0003983267  0.0006398545 -0.0002680433

Volatilidad de cada acción.

volatilidades = apply(rendimientos, 2, sd)
print(volatilidades)
       ECO     PFAVAL        ISA    NUTRESA
0.03193244 0.02855772 0.02372920 0.01401047

Portafolio N° 1

proporciones = c(0.15, 0.10, 0.50, 0.25)
proporciones
  1. 0.15
  2. 0.1
  3. 0.5
  4. 0.25
sum(proporciones)
1

Rendimientos del portafolio de inversión N° 1

rendimientos_portafolio = vector()

for(i in 1:nrow(rendimientos)){

  rendimientos_portafolio[i] = sum(rendimientos[i,]*proporciones)

}

Rendimiento esperado del portafolio de inversión N° 1

rendimiento_esperado_portafolio = mean(rendimientos_portafolio)
rendimiento_esperado_portafolio
0.00014600655940833

Volatilidad del portafolio de inversión portafolio N° 1

volatilidad_portafolio = sd(rendimientos_portafolio)
volatilidad_portafolio
0.0170532910785492

Indicador de diversificación

3

3

h = 1 - volatilidad_portafolio/sum(volatilidades)
h
0.826393985619325

Gráfico de las acciones riesgo-rendimiento portafolio N° 1

plot(volatilidades, rendimientos_esperados, xlab = " Volatilidad", ylab = "Rendimiento esperado", col = c(1:4), pch = 19, cex = 2)
points(volatilidad_portafolio, rendimiento_esperado_portafolio, pch = 17, cex = 2)
legend("topleft", c(nombres, "Portafolio N°1"), pch = c(rep(19,4), 17), col = c(1:4), bty = "n")
../../../_images/output_29_04.png

Rendimientos del portafolio de inversión N° 2

proporciones = c(0.25, 0.20, 0.45, 0.10)
proporciones
  1. 0.25
  2. 0.2
  3. 0.45
  4. 0.1
sum(proporciones)
1

Rendimientos del portafolio de inversión N° 2

rendimientos_portafolio = vector()

for(i in 1:nrow(rendimientos)){

  rendimientos_portafolio[i] = sum(rendimientos[i,]*proporciones)

}

Rendimiento esperado del portafolio de inversión N° 2

rendimiento_esperado_portafolio = mean(rendimientos_portafolio)
rendimiento_esperado_portafolio
6.966950579545e-05

Volatilidad del portafolio de inversión portafolio N° 2

volatilidad_portafolio = sd(rendimientos_portafolio)
volatilidad_portafolio
0.0187732453389869

Indicador de diversificación

h = 1 - volatilidad_portafolio/sum(volatilidades)
h
0.808884497116707

Gráfico de las acciones riesgo-rendimiento portafolio N° 2

plot(volatilidades, rendimientos_esperados, xlab = " Volatilidad", ylab = "Rendimiento esperado", col = c(1:4), pch = 19, cex = 2)
points(volatilidad_portafolio, rendimiento_esperado_portafolio, pch = 17, cex = 2)
legend("topleft", c(nombres, "Portafolio N°1"), pch = c(rep(19,4), 17), col = c(1:4), bty = "n")
../../../_images/output_42_05.png