¿Por qué se sugiere el uso de árboles negros rojos/árboles binarios equilibrados para los niveles en un libro de órdenes limitadas?
¿Por qué son algorítmicamente ideales?
¿Por qué se sugiere el uso de árboles negros rojos/árboles binarios equilibrados para los niveles en un libro de órdenes limitadas?
¿Por qué son algorítmicamente ideales?
¿Por qué se sugiere el uso de árboles negros rojos/árboles binarios equilibrados para los niveles en un libro de órdenes limitadas?
Porque la gente es poco original y sigue haciendo referencia a la misma entrada del blog.
¿Por qué son algorítmicamente ideales?
No son necesariamente ideales. De hecho, rara vez se utilizan en sistemas comerciales de producción con requisitos de baja latencia. Sin embargo, su fuente probablemente tuvo las siguientes consideraciones:
Debido a (1) y (2), debían tener en cuenta las siguientes propiedades del mercado:
(3) y (4) promoverían un BST desequilibrado y alto, que tiene un tiempo de ejecución amortizado mucho peor que su forma idealizada. Hay varias formas de mitigar esto. El auto-equilibrio es una solución ingenua, ya que los árboles rojo-negro están muy implementados en las bibliotecas de contenedores y una forma sencilla de garantizar $\mathbb{O}\left(\log n\right)$ inserciones y supresiones de niveles de precios.
Al evaluar la estructura de datos óptima, yo tendría en cuenta los tres temas principales siguientes.
Como por ejemplo:
Por ejemplo:
Por ejemplo:
En la práctica, cuando se opera a escalas de tiempo de acceso a la memoria o a la caché, o cuando se trata de un pequeño número de eventos en relación con el tamaño de la caché, la complejidad temporal asintótica suele desaparecer y es más importante observar la implementación real y los puntos de referencia reales, y codiseño su cartera de pedidos para la arquitectura en la que se está ejecutando.
En estos casos, una matriz simple o un vector con patrones de acceso lineales a menudo superará a cualquier estructura de datos compleja con un mejor tiempo de ejecución asintótico porque una matriz simple facilita la explotación de las optimizaciones de hardware que son más importantes:
¿Cómo se traduce esto en el diseño de libros de pedidos? Por ejemplo:
unordered_map
suele tener peor rendimiento que map
para la búsqueda de ID de órdenes de instrumentos con un número reducido de órdenes.En muchas de las situaciones que he descrito anteriormente, un lista enlazada de matrices o un matriz de matrices superará a un diseño de propósito general con árboles rojo-negro de listas intrusivas doblemente enlazadas.
Hay una diferencia entre comprender la dinámica de la LOB y utilizar una solución algorítmica para captar esta dinámica.
Cómo evoluciona la LOB. Hace tiempo que comprendimos (véase los artículos de Jeremy Large) que una cadena de Markov sobre "imágenes" de la LOB sería un modelo interesante. Después de algunos años de modelar la dinámica de la LOB con procesos de Hawkes (véase, por ejemplo, el artículo de Emmanuel Bacry y sus coautores), y gracias al interesante impulso de Rama Cont y Adrien de Larrard, llegamos a la idea de que los procesos de Poisson heterogéneos para modelar cada evento (inserción, cancelación, mercado) eran realmente buenos. Sobre todo si las intensidades de estos procesos son funciones del estado del libro de órdenes (es decir, de las "imágenes" a las que me refería). Véase el Modelo de cola reactiva . Esto incorpora el poder de predicción del desequilibrio de la cartera de pedidos.
Cómo comprimir la dinámica. Creo que las intensidades son una buena manera de seguir la dinámica. Sólo si se quiere asociar la la mejor acción siguiente (entre insertar/cancelar/permanecer/comercializar) que de alguna manera un árbol de decisión, es decir, un árbol binario. Puede ser útil. Pero yo sugeriría apoyarse en el aprendizaje por refuerzo (ver los ejemplos de este documento ) para elegir las ramas de su árbol.
[EDITAR] Si su objetivo es implementar un motor correspondiente Pero esto es otra historia. Es algo que tuve que hacer para depurar o backtestar algoritmos de trading. Yo diría que en teoría sólo se necesita algo equivalente a una lógica de búsqueda rápida, y sí leer-árbol negro es una solución que para. Lo importante es no rehacer la búsqueda cada vez que se quiera insertar un pedido en la lista de niveles de precios, puesto que ya está ordenada. La mayoría de los lenguajes de programación ya tienen una solución para eso (en python, por qué no usar simplemente un diccionario), pero si quieres hacerlo desde cero porque realmente te preocupa la velocidad de implementación, entonces podría ser una buena idea empezar a buscar en el precio medio (y no al precio más bajo o más alto), porque tiene más inserciones y actualizaciones de pedidos alrededor de la mitad.
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.