El Problema
El protocolo BOE (Binary Order Entry) de Cboe es el estándar binario que usan los traders institucionales para enviar órdenes a los exchanges de opciones de EE.UU. No es texto legible: cada mensaje es una secuencia exacta de bytes en Little Endian, con campos de tamaño fijo, precios codificados con 4 decimales implícitos y campos opcionales controlados por bitfields negociados al inicio de la sesión.
Entender cómo funciona por dentro — y poder experimentar con él — es prácticamente imposible sin acceso a sistemas reales de trading.
La Solución
Un simulador completo que habla el mismo lenguaje que Cboe, byte a byte, siguiendo la especificación oficial v2.11.90. Cualquier cliente BOE real puede conectarse como si fuera el exchange.
El sistema incluye:
- Motor de matching con prioridad precio-tiempo — las órdenes se emparejan en orden de precio y, dentro del mismo precio, por orden de llegada (FIFO)
- 3 bots de trading que mantienen actividad constante en el mercado: Market Maker (provee liquidez en ambos lados), Trend Follower (sigue el momentum) y Random Trader (simula ruido de mercado)
- REST API + WebSocket para market data en tiempo real y operaciones desde cualquier cliente HTTP
- Dashboard web (Astro + Tailwind) servido directamente desde el JAR — sin servidor ni build step extra
- CLI interactivo para conectarse, enviar órdenes y monitorear el libro desde la terminal
- Persistencia completa con RocksDB: órdenes, trades y sesiones sobreviven reinicios
Por Dentro
Cada conexión TCP corre en su propio Virtual Thread de Java 21 — el modelo más simple (I/O bloqueante) sin el costo de OS threads reales. Resultado: más de 500 sesiones concurrentes con latencia P99 de Order Acknowledgment por debajo de 5ms.
El matching engine sincroniza por símbolo en lugar de globalmente: AAPL y SPX pueden ejecutar matching en paralelo sin bloquearse entre sí. Las escrituras a RocksDB van a una cola asíncrona — el cliente recibe su confirmación antes de que nada toque disco.
Los mensajes del protocolo están modelados como sealed classes de Java 21, lo que permite un dispatch exhaustivo verificado en tiempo de compilación: agregar un nuevo tipo de mensaje sin manejarlo es un error de compilación, no un bug silencioso.
En Números
- 131 clases Java · 319 tests automatizados
- 11 tipos de mensaje BOE con wire format exacto al spec
- P99 < 5ms de latencia Order Acknowledgment bajo carga sostenida
- 500+ conexiones TCP simultáneas sin drops
- 10 fases de implementación — desde enums tipados hasta negociación de campos opcionales por sesión