2 votos

Sesgo de supervivencia en el backtesting

He estado haciendo backtesting, y estoy buscando si hay algún fallo en mi programa, ya que parece ser demasiado bueno para ser verdad.

Sobre la base de las acciones con capitalización de mercado de > 10B, retroceder en el tiempo digamos 20 años y backtest. Para cada acción, mira los datos históricos, la característica morfológica del gráfico de la acción, y otras características, hacer un montón de cálculos, asignar una puntuación. En cada período, elegirá las acciones con buenas puntuaciones.

Una de las cosas que veo es que puede haber un sesgo de supervivencia. La lista de valores que selecciono tiene una capitalización de mercado de > 10B HOY. Así que sólo los que sobreviven hoy se incluye. Los que salen del negocio se han ido en secreto sin que yo lo sepa. Aquellos que sobreviven y se vuelven lo suficientemente grandes como para tener una capitalización de 10B están incluidos. Así que eso está lejos de ser ideal.

Si es posible, me gustaría conseguir una lista de acciones con capitalización bursátil > 10B hace 20 años. Pero, ¿dónde puedo conseguir esa lista de acciones? ¿Hay otras formas de evitar ese sesgo?

5voto

jorgemc Puntos 11

Tratar de determinar la capitalización histórica del mercado es difícil (especialmente con las fusiones/adquisiciones/fusiones y las múltiples clases de acciones con diferentes niveles de propiedad/voto). Otro problema que plantea el hecho de fijarse en un nivel de capitalización bursátil fijo es que proporciona una forma de sesgo de selección. Cuanto más se retroceda en el tiempo, menos acciones se incluirán debido a los efectos de la inflación. Se podría ajustar este nivel hacia atrás en el tiempo utilizando un índice de inflación, pero también se podría considerar la capitalización del mercado en relación con el tamaño de la economía en general.

Una estrategia alternativa en este caso es utilizar acciones de un índice concreto que se adapte a sus parámetros de capitalización bursátil. También necesitaría acciones que no cotizan en bolsa y datos de los miembros del índice.

Muchos índices tienen un rango de capitalización de mercado incorporado en su metodología:

  • S&P 100 (top 100)
  • S&P 500 (top 500)
  • S&P MidCap 400 (501-900)
  • S&P SmallCap 600 (901-1500)
  • Russell 1000 (top 1000)
  • Russell 2000 (1001-3000)
  • Russell 3000 (top 3000)

Información: Norgate Data proporciona capacidades en esta área.

2 votos

Busqué seriamente en su servicio. Me tomé la molestia de instalar una máquina virutal, windows 7 (10 no es compatible), instalar python, dot net, y demás. Sólo para descubrir que el soporte de la API de python sólo permite consultar si un símbolo estaba dentro del índice dentro de ese período. No hay ninguna opción para descargar el índice como una serie de tiempo. Probablemente no pagaría 300 dólares por eso. Qué decepción.

0 votos

Por supuesto, puede descargar los precios del índice como serie temporal. Para cada componente del índice (disponible en una lista de vigilancia) puede descargar una serie temporal de cada uno de los miembros del índice, que es lo que la mayoría de los operadores quieren hacer realmente, es decir, probar todo lo que ha estado en el índice y desencadenar sus reglas de negociación basadas en la pertenencia al índice. Nuestros sistemas son compatibles con Windows 7 y 10, así que no estoy muy seguro de dónde viene usted. Creo que realmente necesita ponerse en contacto con nuestro soporte y detallar su problema para que podamos ayudarle mejor, en lugar de utilizar los comentarios aquí.

0 votos

Si hay alguna manera se lo agradeceré mucho. Sólo me interesa obtener una lista de constituyentes en base a una fecha determinada. Esto es lo que dice la API de python: "Para determinar si una acción era un constituyente del índice en una fecha determinada, puede utilizar la función de series temporales de constituyentes del índice. También puede pasar un NumPy ndarray o Pandas Dataframe existente y se añadirá y devolverá una nueva columna". Así que si hay una manera, por favor, muéstrame cómo. En el caso de Windows 10, solo dice que no se puede instalar dot net framework 4.8 y se detiene. Pero no importa , borré la máquina virtual, e instalé Windows 7.

2voto

adam Puntos 10572

No conozco su presupuesto y, lamentablemente, los datos financieros de alta calidad no son gratuitos. Hay varios buenos proveedores de estos datos. Usted está buscando gastar entre 5 y 5 cifras anuales para algo como Bloomberg, Reuters, Factset, S&P Global. Puedes gastar mucho menos por otros proveedores (Quandl puede o no tener lo que buscas), pero tu kilometraje variará.

2voto

BigCanOfTuna Puntos 210

Otros ya han sugerido que una forma práctica es utilizar la composición de un índice adecuado para su universo de inversión (para estar realmente seguro, el índice debería haber estado vivo en el momento histórico correspondiente).

Permítanme añadir dos observaciones. En primer lugar, el sesgo que describes suele ser grande. Se estudia estudiado para las acciones estadounidenses en este documento:

@ARTICLE{Daniel2009,
  author       = {Gilles Daniel and Didier Sornette and Peter W{\"o}hrmann},
  title        = {Look-Ahead Benchmark Bias in Portfolio Performance Evaluation},
  year         = 2009,
  volume       = 36,
  number       = 1,
  journal      = {Journal of Portfolio Management},
  pages        = {121--130}
}

Y los autores encuentran que el sesgo es de hasta un 8% anual. Este sesgo se ha observado en el caso de las acciones alemanas en Riesgo-Recompensa Optimización de la relación (revisada) y hemos comprobado que de una magnitud similar (alrededor del 7% anual).

En segundo lugar, sobre la fijación de un umbral de tamaño absoluto. Mejor sería vincular este umbral a un cuantil de la capitalización del mercado. mercado. Por ejemplo, para la renta variable estadounidense, Kenneth French publica los percentiles de la capitalización de mercado de la Bolsa de Nueva York de la Bolsa de Nueva York. El siguiente gráfico muestra la evolución de esos percentiles.

enter image description here

Sus 10.000 millones (mostrados como línea horizontal) estaría en torno al percentil 75 ahora mismo. Pero si volvieras a los años 90, no tendrías demasiadas acciones entonces. A principios de 1999, por ejemplo, el percentil 75 percentil habría sido más bien de unos 3.000 millones o algo así.

Aquí estaría el código R para reproducir la figura.

library("NMOF")
library("zoo")
bp <- French(dest.dir = "~/Downloads/French",
             dataset = "ME_Breakpoints_CSV.zip")

## make zoo series; scale to millions USD
bp <- zoo(bp[, -c(1, ncol(bp))]/1000000, as.Date(row.names(bp)))

par(mar = c(2,5,1,2), , mgp = c(3.5,0.5,0),
    las = 1, bty = "n", tck = 0.01)
plot(bp,
     plot.type = "single",
     log = "y",
     col = hcl.colors(30, palette = "Grays"),
     ylab = "Market cap in millions USD",
     xaxt = "n",
     yaxt = "n")
mtext(text = colnames(bp),
      side = 4, at = coredata(tail(bp,1)),
      line = -0.7, cex = 0.7)

years <- seq(as.Date("1920-1-1"), as.Date("2020-1-1"), by = "20 year")
bn10 <- 10000000000/1000000
axis(1, at = years, labels = format(years, "%Y"))
axis(2, at = c(axTicks(2), bn10))
abline(h = bn10)

0 votos

Haz que me dé cuenta de que usar el componente del índice como un universo de búsqueda es una mejor idea. gracias

0 votos

Estoy mirando tu artículo, Enrico, ¿dónde se discute el sesgo de supervivencia?

0 votos

@IgorRivin: en el Apéndice A

0voto

zdd Puntos 523

Dependiendo de su estrategia, aunque es algo a tener en cuenta, es probable que el impacto de algo así sea mínimo. Con una capitalización bursátil de 10.000 millones, nos encontramos en el territorio de las empresas de mediana capitalización y las empresas ya llevan varios años en el mercado, por lo que no se trata de una selección de pequeños valores biotecnológicos de alto crecimiento.

Es difícil proporcionar mucho más sin un mayor detalle en cuanto a lo que está haciendo.

0 votos

Estoy pensando si este impacto será significativo o no. Hoy es el año 2019. Digamos que hago un backtest desde 1999. ¿Es posible que haya una empresa que empiece de la nada en 2005 y se convierta en una empresa de 10.000 millones en 2019? Cuando se ejecuta en tiempo real, el entorno es diferente de lo que trato de simular.

0 votos

A finales de 2000 Enron era una empresa de 60.000 millones, un año después la empresa valía 0. Evitar este desastre puede sesgar los resultados de 2001 significativamente al alza.

0 votos

Alex hace un punto válido, pero a mi declaración básica... eso es una sola empresa, dependiendo de su estrategia, para una amplia, no demasiado concentrada, cartera de acciones, no incluirla es poco probable que tenga un impacto drástico en los resultados de rendimiento simulados.

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