Skip to content
Case study · Real-time terminal

Epic Trading: a private trading terminal watching nine exchanges at once

The most demanding thing I run in production. Epic Trading connects to nine crypto exchanges simultaneously, records every trade and every order-book change they publish, and paints it all live in the browser: who is buying, who is selling, where the large orders sit, and when they get pulled. It currently processes around ten million trades an hour, with far more order-book updates on top.

One workspace of many: order-book monitor, charts, and a scanner that ranks symbols by confluence of signals.
One workspace of many: order-book monitor, charts, and a scanner that ranks symbols by confluence of signals.
What's inside

Every trade, live, from nine venues

Nine exchanges, one screen

Binance, Bybit, OKX, Coinbase and five more, streamed into one dashboard instead of nine browser tabs. Every venue speaks a different protocol; the terminal makes them one language.

Built for bursts

Markets idle for minutes, then explode. The pipeline was measured absorbing 22,876 trades in a single second, a genuine market-wide burst across all venues, while the server loafed at 11% CPU.

Audited against lost data

The fast display path is allowed to drop under pressure, so instead of assuming, I measured: on the majority of streams, the ground-truth count matched exactly. Zero missing trades.

Smooth under fire

A custom paint scheduler keeps 25 panels sharing one screen fairly: heavy panels slow themselves down, hidden panels cost nothing, and no panel can freeze out another.

Your workspace, your rules

Dockable panels you drag, resize, group and save as presets. Every layout in these screenshots is just one arrangement among many.

Connections that heal themselves

Exchanges disconnect constantly. Every socket reconnects with randomised backoff and a watchdog, so one server restart cannot stampede the whole system.

The macro picture too

Beside the crypto flow: 186 economic data series from sources like FRED, BIS and EIA, futures positioning, seasonality and options-dealer levels, each tracked for freshness.

Heavy lifting off the main thread

Parsing and aggregation run in background workers with their own connections, so the interface stays responsive no matter what the market does.

Footprint panels: buying and selling pressure inside every price level, next to the live order book.
Footprint panels: buying and selling pressure inside every price level, next to the live order book.
Six symbols at once, each with volume delta, open interest, funding and liquidations.
Six symbols at once, each with volume delta, open interest, funding and liquidations.
Scored news feeds, the economic calendar, volume delta by venue, and cross-asset correlation.
Scored news feeds, the economic calendar, volume delta by venue, and cross-asset correlation.
The macro side: futures positioning, seasonality and options-dealer levels on the indices.
The macro side: futures positioning, seasonality and options-dealer levels on the indices.
The system watching itself: 3.4 billion rows in the database, and a counter on everything, down to dropped frames.
The system watching itself: 3.4 billion rows in the database, and a counter on everything, down to dropped frames.
Sixty collector processes, supervised, each a week into its current run.
Sixty collector processes, supervised, each a week into its current run.
The coverage matrix: 726 coins across nine venues, 9.8 million trades in the last hour.
The coverage matrix: 726 coins across nine venues, 9.8 million trades in the last hour.
186 economic data series from FRED, BIS, EIA and more, each tracked for freshness.
186 economic data series from FRED, BIS, EIA and more, each tracked for freshness.
The macro universe: indices, commodities and rates, with futures, CFD and trader-positioning coverage checked down to the hour.
The macro universe: indices, commodities and rates, with futures, CFD and trader-positioning coverage checked down to the hour.

Stack: Rust collectors and API, QuestDB time-series storage (3.4 billion rows and counting), React 18 with canvas rendering and Web Workers.

Why it matters

The hardest end of the spectrum

Real-time market data is unforgiving: thousands of events a second, nine venues that each speak differently, and a screen that has to stay smooth through all of it. Here is what that took:

The firehose

When data can burst a hundredfold in one second, you cannot hope it will not. Buffers, backpressure and grace windows are designed in from the start.

The truth

Nine exchanges disagree about message formats, timestamps and book semantics. The system reconstructs one coherent picture, and its accuracy is measured, not assumed.

The screen

All that data is worthless if the interface stutters. Rendering is budgeted like any other scarce resource: rate caps, adaptive backoff, and fairness between panels.

The discipline

The project keeps a written audit of itself where every performance claim states how it was counted, and claims that could not be verified are marked as such.

Most business software will never face a fraction of this load. But the habits this kind of system demands, measuring instead of assuming, designing for failure, staying smooth under pressure, carry into everything I build.

Next case study: BizBuy →
Jean-Philippe, senior software engineer
Jean-Philippe Berger
Senior software engineer · Dubai
Contact

Not sure what you need?
That's what the call is for.

30 minutes, free, no obligation. Worst case, you leave with better questions.

Online booking is coming soon. Until then, a WhatsApp message or an email is all it takes to book your free 30-minute discovery call.