3 votos

¿Existe un buen paquete de backtesting en R?

Mi modelo exporta un vector que tiene para cada día b-compra s-venta o h-retención se ve así:

sig [1] b b s s b b s s b s s s b s s b s s b s s s b b b b b b b b s b b b b b b b b

Quiero hacer un backtest para que compre o venda todo el patrimonio de la cartera al final de cada día y para que no haga nada. ¿Cuál es la mejor manera de backtest en R u otro método esta estrategia?

Gracias

0 votos

Echa un vistazo al paquete quantstrat @alonch7

0 votos

Hola Rime, conozco quanstart pero me resulta difícil utilizarlo con la salida que hace mi modelo.

0 votos

Puedes encontrar mucha información sobre cómo utilizar el paquete. aquí hay un enlace a la página de Guy Yollin donde puedes descargar el código que utiliza para repasar una estrategia en quantstrat: r-programming.org/papers @alonch7 una alternativa sería convertir el b y s señales en 1 por mucho tiempo, -1 para abreviar, y 0 para no hacer nada... y luego multiplicarlos por los rendimientos

3voto

kristianp Puntos 186

Con los siguientes paquetes creo que tienes suficientes herramientas para desarrollar un backtest:

  • quantmod
  • PerformanceAnalytics
  • xts

Prefiero entender lo que está ocurriendo en lugar de abstraer toda la complejidad. Hay múltiples ejemplos en Blog de Joshua Ulrich sobre cómo desarrollar un backtest, eso debería ser suficiente para empezar. Personalmente también he encontrado útil el uso de data.table en combinación con estos paquetes.

3voto

BigCanOfTuna Puntos 210

Para añadir otra posibilidad: A continuación se muestra cómo podría ejecutarse un modelo de este tipo en el PMwR (que yo mantengo). Parece que sig mantiene la posición deseada. Supongamos que tenemos una serie temporal de precios P .

sig <- c("b", "b", "s", "s", "b", "b", "b", "s",
         "s", "b", "s", "b", "s", "s", "b", "s",
         "b", "s", "s", "s", "s", "b", "b", "s",
         "s", "b", "b", "b", "b", "b", "b", "s",
         "b", "b", "b", "b", "b", "b", "b")

P <- cumsum(sample(c(1, -1), replace = TRUE, size = length(sig))) + 100

Entonces con PMwR::btest El backtest podría realizarse de la siguiente manera:

library("PMwR")
signal <- function(sig)
    switch(sig[Time()], "b" = 1, "s" = 0, NULL)

bt <- btest(P, signal, sig = sig)
## initial wealth 0  =>  final wealth  10 

El signal mapas de funciones sig en cada punto del tiempo a una posición de 1 o 0. El resultado, almacenado en bt es una lista que almacena los detalles del backtest.

journal(bt)
##     instrument  timestamp  amount  price
## 1      asset 1          2       1    100
## 2      asset 1          4      -1    100
## 3      asset 1          6       1     98
## 4      asset 1          9      -1    101
## 5      asset 1         11       1    101
## [....]

plot(NAVseries(bt))
## etc.

3voto

ScottyDont Puntos 433
  1. En R, hay básicamente dos paquetes para hacer backtest de su estrategia: SIT y quantstrat . Personalmente, prefiero el primero porque es mucho más rápido y transparente en cuanto a la gestión de sus posiciones. Además, SIT le da más flexibilidad a la hora de formar sus señales de trading.
  2. Si tienes una estrategia muy básica, como long/short/stay on the sidelines, quizás la mejor aproximación para probar rápidamente tu estrategia es tener 2 vectores como @Rime aconsejó arriba: uno para los retornos y el otro para tus posiciones (ya sea 1, -1, o 0), y multiplicarlos para obtener los retornos de tus posiciones cuando estés en el mercado (ya sea corto o largo). Dos consejos si se me permite:

    • Desplace su acción (comprar o vender) un período hacia adelante en relación con la señal.

    • Posición corta. Piense detenidamente en cómo acumularía los beneficios a lo largo de varios periodos. Si por casualidad te pones en corto en una acción que ha perdido un 10% cada día durante 3 días seguidos (es decir, de 100 a 90 el primer día, a 81 el segundo, y a 72,9 el tercer día) eso no te haría más rico en un 33,1% (1,1^3 -1), como si se tratara de rendimientos positivos en el lado largo. Su rentabilidad sería más bien del 27,1%, que no obtendría simplemente multiplicando rendimientos y posiciones... (más en este blogpost en SIT)

0 votos

Hola bushmanov, ¿puedes ser más específico sobre dónde buscar en SIT?

1 votos

@alonch7 Ce site es el repo de github, ce es el blog con ejemplos de uso (continuación) ici )

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