He diseñado grandes almacenes de datos (con un hardware de entre 3 y 10 millones de dólares). Los retos que ha planteado @jharonfe son válidos, pero no me parece que sean los más interesantes en su caso (20 acciones, L1).
Por ejemplo, no hay ninguna razón para que tu sistema, incluso si está diseñado de forma muy ingenua y no está optimizado, se quede atrás con 20 símbolos.
También ha mencionado la falta de datos: es posible que haya visto esta cuestión en algunos de los textos más antiguos, disponibles públicamente, sobre cómo almacenar los datos del mercado. Tenga en cuenta que estos textos se escribieron hace años; hoy en día, cuando las redes de intercambio están muy sobreaprovisionadas, esto no es un problema.
He aquí algunas en las que vale la pena pensar:
- Sesiones comerciales no homogéneas. Por ejemplo, IBM sigue cotizando hoy en día, pero hubo un periodo en el que su ticker dejó de cotizar debido a las investigaciones antimonopolio. La gente que diseña su almacenamiento de datos para gestionar los vencimientos (por ejemplo, las opciones) tiende a pensar más en estos temas, pero la renta variable tiene sus propias peculiaridades. Además, si sus acciones proceden de diferentes bolsas, los distintos mercados tienen diferentes calendarios de vacaciones.
- Sesgo de supervivencia . Esto es bastante obvio. Si hoy sabes que no puedes operar con XYZ y lo dejas fuera de tu universo de símbolos, y sin embargo estabas recogiendo datos para XYZ hace 1 año, estás incurriendo en un sesgo de supervivencia al permitir que tu motor de backtesting sea consciente de esto y no pueda hacer backtest en XYZ hace 1 año o excluir XYZ de tu universo de búsqueda hace 1 año. La razón por la que esto se convierte en un reto es que es fácil de describir, pero implica la interconexión de varias piezas de software, que la gente tiende a evitar en la primera pasada de la arquitectura de su plataforma.
- Rupturas comerciales . En ciertos lugares, se puede obtener información después de la impresión de que un comercio se ha anulado. Esto plantea problemas a la hora de decidir cómo manejar el relleno en su backtest, pero la gente suele ignorar este tipo de caso límite en su diseño de primera pasada.
- Pérdida e historial transaccional. Como puedes ver en un tema común entre mis 3 puntos anteriores, la solución es a menudo simplemente ignorar el problema y preocuparse por él más tarde. Esto está bien siempre y cuando no se pierdan los datos cuando se vuelva a tratar el problema. Esta es una de las razones por las que el uso de un SGBD puede ser superior a un almacén plano, porque muchos SGBD son transaccionales y tienen un historial de confirmaciones.
- Acciones corporativas. Las acciones pasan por fusiones y adquisiciones, desdoblamientos, etc.
2 votos
Los desdoblamientos de acciones (y para la inflación, los reajustes de los índices). Tienes que decidir cómo vas a manejarlos - tienes que decidir si quieres ser capaz de retroceder en el tiempo y utilizar los datos como si hubiera/no hubiera tenido la división, para que puedas replicar con precisión los precios históricos de las operaciones antes de una división, etc.
0 votos
Muy cierto @Will. En lo que respecta a la renta variable, yo diría que es muy importante hacer un seguimiento de las acciones corporativas relevantes (cambio en la estructura de capital y/o distribuciones de capital).
0 votos
Además, mencionas la "limpieza" de los datos. Esto es un gran reto en sí mismo y no lo incluiría en esto. Un consejo no relacionado que te daría (que en realidad es sólo un consejo de programación) es ser ultra consistente. Toma decisiones sobre las convenciones de navegación y apégate a ellas. Tome decisiones sobre el tratamiento de las fechas y cúmplalas. Tenga tablas para cosas como los tenores, y úselas en lugar de cosas como números de días, etc. La coherencia hará que las cosas sean mucho más sanas después.
0 votos
Ah, y también hay que pensar en el concepto de fuente de datos. Es decir, quién generó los datos (de nuevo, ponlos en una base de datos de búsqueda). Esto también le permite tratar el limpiador de datos como una fuente.
0 votos
@will Sólo tengo una fuente de datos. Es una API de corredor.
0 votos
@novice si usted planea en la limpieza de los datos, sin embargo, entonces usted debe tratar que como una fuente diferente (o tal vez varias fuentes para múltiples métodos de limpieza, etc.)