From Hummingbot to our own Python trading system
External fair prices, reactions to individual book changes and hedges on other exchanges led us to an event-driven runtime on asyncio and CCXT Pro.
We started on Hummingbot, moved quoting into our own Python runtime and then built a Java trading engine on Chronicle Services. The loop joining market data, account state and orders is the part we own.
We began market making on Hummingbot's pure market-making strategy, then fed it our own price models. We needed faster updates and hedges on other exchanges, so we moved to our own code.
An event-driven runtime on asyncio and CCXT Pro, with external fair-price quoting and adapters for Binance spot and futures, Binance Swap, Ascendex, Kraken and Bybit.
Chronicle supplies the runtime, queues and event loops. We built the exchange model, adapters, quote reconciliation, strategies and hedging on top, adding a FIX route through OnixS and hedge-aware market making.
market data ───────► normalization ──┐
reference data ────► mappings ───────┤
account & execution reports ─────────┴──► shared trackers ──► strategy runner ──► strategies
│ │
└──► exposure & hedger ───────────────┤
▼
venues ◄── execution adapters ◄── order manager (quote reconciliation)
│
└──► account & execution reports, back into the trackers
The hot path runs at 120 microseconds at the 99.99th percentile. For every order we time three intervals separately: transmission, REST acknowledgement and private-stream confirmation.
External fair prices, reactions to individual book changes and hedges on other exchanges led us to an event-driven runtime on asyncio and CCXT Pro.
Our Java engine records order intent before anything leaves the process and times each leg of an order separately.
A research library for normalized history, an instrument service for current market rules, and model output stored beside market and account data.