2011-10-31 21 views
5

El OrderBook está lleno de órdenes de compra y venta. Actualizaciones, nuevas órdenes pueden ejecutar intercambios.OrderBook DB Design

Parece que no puedo encontrar ningún ejemplo de implementación.

Podríamos dar a cada orden una identificación y verificar las órdenes de ejecución una por una. Pero queremos algo que se escale a miles de órdenes activas.

Podemos ordenar los precios para obtener los pedidos que se ejecutarán (porque se superponen). Pero tenemos que tener cuidado y ejecutar solo en el orden en que se recibieron los pedidos :)

¿Pensamientos?

Respuesta

2
  • tenemos que tener cuidado y ejecutar sólo en el orden en que se recibieron las órdenes

Los datos del mercado suele seguir el patrón de una forma de series de tiempo, por lo que es, naturalmente, ordenado por una marca de tiempo que llega hasta una precisión de un picosegundo en este momento.

Dependiendo de la tecnología en la que confíe, si no tiene inconveniente en pagarla, iría con OneTick, que es un DB de serie temporal que ya tiene una cartera de pedidos incorporada con un libro de niveles de profundidad/precio , CEP y mucho más.

En caso de que quiera construirlo usted mismo (o confiar en productos gratuitos), eche un vistazo a OpenTSDB que es un código abierto de serie de tiempo DB con una licencia LGPLv3 +. Sería más lento que OneTick, por supuesto, pero como solo necesitas miles (OneTick maneja miles de millones) dependiendo de tus requisitos de velocidad, puede funcionar.

En cuanto al modelo de datos de OrderBook, dependerá de cómo exactamente va a utilizar el libro: p. Ej. ¿te importan los múltiples niveles de precios? ¿Arriba del libro? ¿Es necesario para que coincida con las ofertas/pide a las órdenes reales, etc ..

Pero se puede comenzar con el diseño de un esquema que grabaría eventos cartera de pedidos como:

enter image description here

El ejemplo es de LMAX Protocol Reference Guide

2

Python's OrderedDict puede servir como base para un OrderBook escalable. Querrá un diccionario ordenado para cada nivel de precio para que las órdenes coincidan de acuerdo con la prioridad de precio/tiempo.