TitaniumBOE-Sim

Simulador del protocolo binario BOE de Cboe con matching engine, bots de trading, REST API, WebSocket y dashboard — todo en un único JAR deployable.

  • Java 21
  • Virtual Threads
  • Javalin
  • RocksDB
  • Docker
  • JUnit 5

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.

Ti
TitaniumBOE-Sim · Arquitectura
Cboe Titanium U.S. Options BOE v2.11.90 · Java 21 · Virtual Threads
▶ Pruébalo — arrastra nodos · click para inspeccionar
clienteedgecoredatasim
HTTP / WSTCP binarydispatchprocessOrder()saveAsync()tradesREST looptrade eventsBrowser / DashboardAstro 5 · TailwindCLI · BOE Client SDKexternal integrationsRestApiServerJavalin 6.7 · :9091RESTWS /ws/feedScalar UICboeServerNIO · TCP :8081VThread/connLoginHeartbeatClientConnectionHandler1 sesión = 1 VThreadOrderManagervalida · enruta · respondeOrderValidatorack/rejectMatchingEnginelock por símbolo · FIFOOrderBook<sym>TreeMap<BigDecimal,List<Order>>price-time priorityPersistence LayerRocksDB 9.11 · write-behindOrderRepositoryTradeRepository6 column familiesBotManagerVThreads paralelosMarketMakerTrendFollowerRandomTrader
lanza hasta 50 órdenes BOE concurrentes recorriendo el sistema
Diagrama de TitaniumBOE-Sim

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
Diagrama de TitaniumBOE-Sim