4 votos

ROC: ¿diferencia entre discreto y continuo?

Al utilizar la función ROC en el paquete TTR de R, se puede elegir entre continuo (el valor predeterminado) y discreto, pero sin ninguna orientación sobre qué elegir cuando. En el código la diferencia es:

roc <- x/lag(x) - 1

contra:

roc <- diff(log(x))

Reconozco que mis matemáticas son débiles, pero ¿no son lo mismo?

cbind(ROC(x,type='continuous'),ROC(x,type='discrete'),log(x))

da:

2012-08-16 19:00:00             NA             NA 8.673855
2012-08-17 07:00:00  0.00008549566  0.00008549932 8.673940
2012-08-17 08:00:00  0.00000000000  0.00000000000 8.673940
2012-08-17 09:00:00 -0.00085528572 -0.00085492006 8.673085
2012-08-17 10:00:00  0.00034220207  0.00034226063 8.673427
2012-08-17 11:00:00 -0.00102695773 -0.00102643059 8.672400

Hay una sutil diferencia, pero ¿es una diferencia real o un artefacto del cálculo en coma flotante?

Parece que Quantmod: ¿cuál es la diferencia entre ROC(Cl(SPY)) y ClCl(SPY)? es casi pedir lo mismo. Pero las respuestas parecen decir que con una se suman los rendimientos y con la otra se multiplican. Está claro que no va a ser el caso de los números anteriores.

(Por cierto, nadie ha respondido a su pregunta (en los comentarios) sobre qué formulario espera el paquete PerformanceAnalytics, lo que podría haber dado una pista sobre cuál elegir cuando).

Aquí están los datos de la prueba para lo anterior:

structure(c(5848, 5848.5, 5848.5, 5843.5, 5845.5, 5839.5), class = c("xts", 
"zoo"), .indexCLASS = c("POSIXct", "POSIXt"), .indexTZ = "", tclass = c("POSIXct", 
"POSIXt"), tzone = "", index = structure(c(1345143600, 1345186800, 
1345190400, 1345194000, 1345197600, 1345201200), tzone = "", tclass = c("POSIXct", 
"POSIXt")), .Dim = c(6L, 1L), .Dimnames = list(NULL, "Close"))

6voto

doekman Puntos 5187

La diferencia no es un artefacto de la aritmética de punto flotante; es una diferencia en la frecuencia de composición. Los rendimientos en su ejemplo son bastante cercanos a cero, por lo que no parecen tan diferentes. Los cambios más grandes en el precio causarán mayores diferencias entre los dos métodos de cálculo.

Pat Burns escribió una bonita entrada en su blog sobre la diferencia entre los retornos aritméticos y los logarítmicos llamada, Una historia de dos retornos . Te sugiero que lo leas entero, pero las partes relevantes son:

  • los rendimientos logarítmicos son siempre menores que los rendimientos simples
  • los rendimientos simples se agregan a los activos
  • los rendimientos de los logaritmos se agregan a través del tiempo
  • La rentabilidad logarítmica de una posición corta es el negativo de la rentabilidad logarítmica de la posición larga. La relación de la rentabilidad simple de una posición corta con respecto a la de la posición larga es un poco más complicada: $-R / (R + 1)$

Así, la diferencia entre sumar y multiplicar los rendimientos claramente es una gran diferencia entre los dos métodos. En cuanto a PerformanceAnalytics, parece que la mayoría de las funciones asumen retornos aritméticos. Recuerda que tienes el código fuente, así que siempre puedes ver los cálculos exactos que se utilizan para generar los resultados de cada función.

2voto

JeanLaurent Puntos 327

La diferencia es real, aunque es muy pequeña si el rendimiento del capital es pequeño. Digamos que el valor de tu activo ha subido de 10,03 a 10,05:

Aquí está mi código python:

>>> from math import log
>>> 10.05 / 10.03 - 1
0.001994017946161719
>>> log(10.05) - log(10.03)
0.001992032531240806

El ROC es pequeño, y la diferencia entre los dos métodos es pequeña. Pero si el precio de sus acciones subió de 100 a 500

>>> 500.0/100.0 - 1
4.0
>>> log(500) - log(100)
1.6094379124340996

ROC es grande, y la diferencia entre los métodos es grande.

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