Skip to content
Platform Signals
Go back
Observability

The Millisecond Watchdog: Monitoring Rules for Low-Latency Trading

4 min read

In standard web architecture, a 500ms latency spike is an annoyance. In low-latency trading, it is a bankruptcy risk.

When you are competing in microseconds, averages are lies. If your average latency is 10µs (microseconds), but your 99th percentile is 5ms, your strategy is already dead. You just don’t know it yet because your dashboard is smoothing out the “micro-bursts” that actually kill you.

Most observability tools are built for web servers, not ticker plants. They poll too slowly. If you poll every 10 seconds, you miss the crash that happened at second 3 and recovered at second 4.

Below is the monitoring structure I mandate for any high-frequency system. We break it down into three domains: The Eyes (Market Data), The Hands (Execution), and The Brain (Post-Trade).


The Eyes: Market Data Feeds

If your system sees the price of Apple (AAPL) as $150.00, but the exchange sees it as $150.05, you are about to sell an asset for less than it is worth. This is “stale data,” and it is the silent killer of algorithms.

The Rules:

Feed Freshness (The “Speed of Light” Check)

# Alert if we are lagging behind the exchange clock
latency_skew = local_receipt_time - exchange_packet_timestamp

if latency_skew > 50_microseconds:
    trigger_alert("WARNING: Ticker Plant Lagging")
elif latency_skew > 200_microseconds:
    trigger_circuit_breaker("CRITICAL: Stale Prices - HALT TRADING")

Sequence Gap Detection


The Hands: Order Execution

Once you decide to trade, how fast can you pull the trigger? This measures the “Tick-to-Trade” loop.

Tick-to-Trade Latency (Internal Processing)

# Measure time from data arrival to order egress
processing_time = order_sent_timestamp - tick_arrival_timestamp

# We don't care about averages. We care about outliers.
if processing_time > (baseline_latency + 3 * standard_deviation):
    log_warn("Micro-burst detected in Strategy Engine B")

Order-to-Ack Latency (Network Health)


The Brain: Post-Trade & Reconciliation

This is the “sanity check” layer. It ensures that what your algorithm thinks it owns matches what the exchange says it owns.

The “Phantom Fill” Detector (Drop Copy Rec)

-- Pseudo-query for real-time reconciliation
SELECT *
FROM internal_trades
FULL OUTER JOIN drop_copy_trades
  ON internal_trades.order_id = drop_copy_trades.order_id
WHERE internal_trades.id IS NULL
   OR drop_copy_trades.id IS NULL

The “Fat Finger” Reject Rate


The Hardware Heartbeat

In low latency, the hardware is the software. You cannot ignore the physical layer.


Conclusion: The Kill Switch

The most important monitoring rule in trading is not a warning; it is an action.

Every metric above should feed into a unified Kill Switch. If the data is too stale, if the rejects are too high, or if the position break is real, the monitoring system must have the authority to pull the plug automatically.

In high-frequency trading, it is better to be offline than to be wrong.


Share this post:

Comments 6

  • Bianca Ferreira

    The 'averages are lies' line should be tattooed on every trading infra dashboard. We lost a strategy for two weeks because our p50 looked fine while p99.9 was falling apart.

  • Marcus O'Brien

    How do you handle alerting thresholds when your own instrumentation adds measurable overhead at microsecond scale? Feels like observing the system changes the system here more than anywhere else.

  • quietkernel

    Market data micro-bursts are exactly what took down our matching engine reconciliation last year. Dashboards smoothed it into invisibility until the P&L report told the real story.

  • Sasha Petrov

    Post-trade reconciliation monitoring gets so little attention compared to execution latency, even though a silent reconciliation failure is arguably the scarier outcome.

  • Emily Chen

    Solid piece. Curious what tooling you're using to capture true microsecond-level percentiles without the collection pipeline itself introducing jitter.

  • grumpy_oncall

    Coming from a normal web SRE background this was a genuinely humbling read. Our 'fast' is this industry's unacceptably slow, several orders of magnitude apart.


Leave a comment


Previous Post
Reliability is a Feature, Not a Guardrail
Next Post
The On-Call Rotation Playbook: Building a Sustainable Schedule