Short answer
A custom trading terminal is three systems in one window: a market data client that keeps an order book correct, an order manager that knows the true state of every order, and screens (depth ladder, scalping panel, charts, positions) that show both without falling behind. Built properly, it rebuilds its book from a snapshot plus sequenced updates, draws the latest state once per frame rather than every tick, reconciles orders with the exchange after each reconnect, and checks limits before an order is sent. Those four properties are what to test in any vendor's demo.
| Module | Job | Design decision |
|---|---|---|
| Order book and depth ladder | Shows resting liquidity by price, updates in place | Book state kept per instrument with the sequence number it reflects |
| Scalping panel | One-click orders, hotkeys, bracket and stop orders placed from the ladder | Which actions need confirmation, and which limits apply to one-click orders |
| Charts | Candles, trades, indicators, drawing tools | Build, or license a charting library, which is a separate contract |
| Order entry and order manager | Sends orders, tracks acknowledgements, fills, cancels and rejects | Client order IDs that make every request idempotent |
| Positions and balances | Per account, per venue, aggregated | Which figure is authoritative: the terminal's calculation or the venue's report |
| Pre-trade checks | Maximum size, price bands, exposure per account | What runs in the terminal and what runs on a server the user cannot bypass |
| Connectivity adapters | One per venue: WebSocket and REST for crypto exchanges, FIX for brokers and exchanges | A common internal order and market data model that every adapter maps into |
| Journal | Every order event and every user action, time-stamped | What is kept locally and what is shipped to a server for audit |
Exchanges publish the procedure for keeping a local book correct, and it is stricter than it looks. Binance's is typical of the snapshot-plus-updates pattern.
Binance's documented procedure is to open the stream, buffer the events received, get a depth snapshot, discard buffered events already contained in the snapshot, set the local book from the snapshot and then apply updates in order[1].
Gaps are not tolerated: "If the event first update ID (U) is greater than the update ID of your local order book + 1, you have missed some events. Discard your local order book and restart the process from the beginning."[1]
Snapshots are bounded: "Since depth snapshots retrieved from the API have a limit on the number of price levels (5000 on each side maximum), you won't learn the quantities for the levels outside of the initial snapshot unless they change."[1]
Connections are temporary: "A single connection to stream.binance.com is only valid for 24 hours; expect to be disconnected at the 24 hour mark." The server "will send a ping frame every 20 seconds", and a connection that does not answer with a pong frame within a minute is disconnected[1].
Two engineering consequences follow. Reconnecting is routine, not an incident: a terminal connected to Binance that stays open for a week reopens each stream connection at least once a day, so resynchronisation has to be fast and invisible to the order entry path. And the book is recoverable state with a sequence number, not a picture on screen: while it is resynchronising, the ladder should say so rather than show stale prices as live. Doing this for hundreds of sessions at once is the subject of sequence gaps under bursts.
A busy instrument sends more updates per second than a display can show. Drawing each one is how terminals freeze during the moments that matter.
The order manager is where the hard cases live, and they are timing problems: two messages crossing, or one arriving late.
| Option | What it is good at | What it costs |
|---|---|---|
| Native desktop (Rust or C++) | Direct control of rendering and input handling, many monitors | Installers, updates and signing for each operating system |
| Web-based desktop shell | One codebase for web and desktop | Memory use and a garbage-collected UI runtime between the user and the order |
| Browser | No install; reaches users on any device | Least control over rendering and timing |
| Native desktop plus web | Professionals on desktop, occasional users in the browser | Two front ends sharing one order and market data core |
About amBrain
A panel for placing and managing orders directly from the depth ladder with one click or a hotkey, usually with bracket and stop orders attached. Because orders go out without a confirmation step, it needs size limits and price bands on the order path.
Yes, with one adapter per exchange mapping into a common order and market data model. Each exchange has its own book procedure and connection rules; Binance, for example, closes stream connections after 24 hours[1].
Whichever the venue offers for the flow you need. Crypto exchanges mostly expose WebSocket and REST; brokers and regulated exchanges commonly offer FIX. Either way, order state is reconciled after every reconnect, because a FIX counterparty may skip stale orders on resend[2].
Native desktop gives more control over rendering and input latency; the browser gives reach. Many terminals serve professionals on desktop and occasional users on the web from one shared core.
It carries a sequence number, it is rebuilt from a snapshot when a gap appears[1], and the screen marks it as resynchronising until it is consistent again. Ask to see that happen in a demo.
Product and company names are trademarks of their respective owners and are used only to identify their products. No vendor named here reviewed or endorsed this page.
Related