Trading technology

Trading technology

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.

The loop every strategy shares

  • Turn each exchange's market and account messages into one normalized view.
  • Give every market a stable identity with its precision, size and notional limits.
  • Decide quotes and hedges from that shared state.
  • Reconcile desired quotes with live and in-flight orders, then send venue-specific requests.
  • Measure, monitor and archive what happened.

How the system evolved

Hummingbot, to 2021

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.

Python runtime, 2021-2022

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.

Java engine on Chronicle, 2022-2024

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.

How the parts fit together

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

Performance

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.

Articles

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.

Inside the Chronicle trading engine: queues, orders and latency

Our Java engine records order intent before anything leaves the process and times each leg of an order separately.

Trading data infrastructure: normalization, instruments and observability

A research library for normalized history, an instrument service for current market rules, and model output stored beside market and account data.