Parar cualquier inversionista es muy importante diferenciar y saber calcular la rentabilidad o rendimiento de una inversión u activo, por lo tanto, en esta entrada comentaré sobre los rendimientos de activos financieros y como no podía ser de otra forma, realizaré los calculos con R.

Además, en muchas de las entradas anteriores aplico rentabilidad logarítmica sin explicar el por qué, y aquí quiero profundizar un poco sobre ello.

Vamos a analizar la acción de Netflix, Inc. (NFLX) y descargaré los precios desde Yahoo Finance con la libreria quantmod:

library(quantmod)

getSymbols("NFLX", from="2015-01-01", to="2019-07-31")
## [1] "NFLX"
head(NFLX)
##            NFLX.Open NFLX.High NFLX.Low NFLX.Close NFLX.Volume
## 2015-01-02  49.15143  50.33143 48.73143   49.84857    13475000
## 2015-01-05  49.25857  49.25857 47.14714   47.31143    18165000
## 2015-01-06  47.34714  47.64000 45.66143   46.50143    16037700
## 2015-01-07  47.34714  47.42143 46.27143   46.74286     9849700
## 2015-01-08  47.12000  47.83571 46.47857   47.78000     9601900
## 2015-01-09  47.63143  48.02000 46.89857   47.04143     9578100
##            NFLX.Adjusted
## 2015-01-02      49.84857
## 2015-01-05      47.31143
## 2015-01-06      46.50143
## 2015-01-07      46.74286
## 2015-01-08      47.78000
## 2015-01-09      47.04143
tail(NFLX)
##            NFLX.Open NFLX.High NFLX.Low NFLX.Close NFLX.Volume
## 2019-07-23    311.44    313.50   306.00     307.30     9171100
## 2019-07-24    310.51    319.99   307.25     317.94    11961800
## 2019-07-25    318.86    327.69   316.30     326.46    10798500
## 2019-07-26    328.79    336.00   327.50     335.78    10847500
## 2019-07-29    335.98    336.40   328.77     332.70     5782800
## 2019-07-30    329.20    329.65   323.23     325.93     6029300
##            NFLX.Adjusted
## 2019-07-23        307.30
## 2019-07-24        317.94
## 2019-07-25        326.46
## 2019-07-26        335.78
## 2019-07-29        332.70
## 2019-07-30        325.93

Selecciono los precios de cierre ajustados:

NFLX <- NFLX[,"NFLX.Adjusted"]

Grafico los precios utilizando la libreria PerformanceAnalytics:

library(PerformanceAnalytics)

chart.TimeSeries(NFLX, col="darkgreen", 
                 legend.loc = "bottomright", 
                 main="Evolucion de la acción de Netflix, Inc. (NFLX)")

plot of chunk unnamed-chunk-167

Rentabiliad aritmética o simple

Si denotamos P_t al precio de un activo al final del período t, el rendimiento simple viene dado por la siguiente expresión:

R_t=\frac{P_{t} - P_{t - 1}}{P_{t - 1}}

Los datos descargados tiene formato de serie temporal, por lo tanto, primero creo un vector con ellos, extrayendo sólo los datos y los índices de las fechas con la función coredata:

NFLX_vector <- coredata(NFLX)

Ahoro aplico la formula:

n <- nrow(NFLX_vector)
NFLX_rend_simple_1 <- (NFLX_vector[2:n, 1] - NFLX_vector[1:(n - 1), 1]) / NFLX_vector[1:(n - 1), 1]
head(NFLX_rend_simple_1)
## [1] -0.050897025 -0.017120620  0.005191927  0.022188202 -0.015457744
## [6] -0.031765320

Estos calculos también se pueden hacer con la función Return.calculate():

NFLX_rend_simple_2 = Return.calculate(NFLX)
head(NFLX_rend_simple_2)
##            NFLX.Adjusted
## 2015-01-02            NA
## 2015-01-05  -0.050897025
## 2015-01-06  -0.017120620
## 2015-01-07   0.005191927
## 2015-01-08   0.022188202
## 2015-01-09  -0.015457744

Rentabilidad logarítmica o rendimientos compuestos continuos

Los rendimientos compuestos en tiempo continuo tienen una relación aditiva entre los períodos, por lo que muchas veces, resulta más útil el calculo de éstos que de los rendimientos simples, donde la relación entre los períodos es multiplicativa.

Con las rentabilidades simples, la rentabiliad anual de una inversión es la media geométrica de los rendimientos mensuales.

En este sentido, se debe tener en cuenta que el producto de variables normalmente distribuidas no es una variable normal, por el contrario, la suma de las variables normales no correlacionadas si es normal.

Por lo anterior, es mejor utilizar la suma de rentabilidades que la multiplicación y con la rentabilidad logarítmica sí se puede sumar la rentabilidad de los diferentes periodos para obtener la rentabilidad total, además se disminuye la complejidad algorítmica, ya que se podría aplicar el teorema central del límite.

La relación aditiva entre los períodos viene denotada por la siguiente expresión:

r_t=ln(1+R_t)

Donde R_t es el rendimiento simple y r_t es rendimiento compuesto en tiempo continuo en el momento t.

Por consiguiente, r_t se puede calcular de la siguiente manera:

r_t=ln(\frac{P_t}{P_{t - 1}})

ln(\frac{P_{t}}{P_{t -1}}) = ln(P_{t}) - ln(P_{t -1})

Por otro lado,  la rentabilidad logarítmica es ampliamente usada en finanzas ya que permite calcular probabilidades que se basan en una distribución normal, teniendo en cuenta que estos rendimientos no pueden ser inferior a -1.

En R, estos se pueden calcular fácilmente: uso la función log() para calcular los logaritmos naturales a los precios y aplico diferencias con la función diff() para así obtener los retornos compuestos en tiempo continuo.

NFLX_rend_cc_1 <- diff(log(NFLX))
head(NFLX_rend_cc_1)
##            NFLX.Adjusted
## 2015-01-02            NA
## 2015-01-05  -0.052237977
## 2015-01-06  -0.017268873
## 2015-01-07   0.005178495
## 2015-01-08   0.021945626
## 2015-01-09  -0.015578461

Y con la función Return.calculate():

NFLX_rend_cc_2 = Return.calculate(NFLX, method="log")
head(NFLX_rend_cc_2)
##            NFLX.Adjusted
## 2015-01-02            NA
## 2015-01-05  -0.052237977
## 2015-01-06  -0.017268873
## 2015-01-07   0.005178495
## 2015-01-08   0.021945626
## 2015-01-09  -0.015578461

Por último, grafico los rendimientos:

dataToPlot <- merge(NFLX_rend_simple_2, NFLX_rend_cc_2)
colnames(dataToPlot) = c("Simple", "CC")
plot.zoo(dataToPlot, main="Simple vs Compuesto Continuo", plot.type="single", 
         ylab="Rendimientos", lwd=2, col=c("black", "red"))
abline(h=0)
legend("bottomleft", legend=colnames(dataToPlot),
       lty="solid", lwd=2, col=c("black", "red"))

plot of chunk unnamed-chunk-173

my.panel <- function(...) {
  lines(...)
  abline(h=0)
}
plot.zoo(dataToPlot, main="Simple vs Compuesto Continuo", plot.type="multiple", 
         panel=my.panel, lwd=2, col=c("black", "red"))

plot of chunk unnamed-chunk-173

Cálculo de rentabilidades con Rhttps://i1.wp.com/finanzaszone.com/wp-content/uploads/2019/08/Rentabilidades.jpg?fit=676%2C428&ssl=1https://i1.wp.com/finanzaszone.com/wp-content/uploads/2019/08/Rentabilidades.jpg?resize=150%2C150&ssl=1Conney Marulanda LópezFinanzas PersonalesMercados FinancierosRActivos financieros,R,RentabilidadesParar cualquier inversionista es muy importante diferenciar y saber calcular la rentabilidad o rendimiento de una inversión u activo, por lo tanto, en esta entrada comentaré sobre los rendimientos de activos financieros y como no podía ser de otra forma, realizaré los calculos con R. Además, en muchas de las...Finanzas, Economía, Trading y R