Skip to content
Monday, 26 October 2026 · LondonENع
Rayan Azhari.Sustainability · Energy · Carbon · Built Environment · Data Science
Topic

Quant

Live Trading Does Not Match the Backtest: The Code-Level Causes Nobody Names

When your live P&L drifts from the backtest you validated, the culprit is almost never psychology. It is code: the same metric computed two subtly different ways in research and in the live sizing path. Here is the parity oracle I now gate on, and the deeper rule behind it: live and research must call the same code, not two copies of it.

· 9 min

Fail Closed Data Validation: Why a Trading Bot Should Refuse to Boot on Bad Data

A data-quality gate that crash-loops on corrupt, stale or all-NaN data is not broken, it is working: the alternative is fail open, trading on garbage with silent defaults. Here is the war-story from both sides, the honest flip where an over-eager gate locked me out of a market, and the one portable rule: on bad data, refuse to trade and alert loudly, never proceed with a default that looks like data.

· 9 min

Bar Timestamp Convention: The Open vs Close Stamp That Leaks a Full Bar of Look-Ahead

A bar carries one timestamp, but that stamp is ambiguous: is a bar labelled 09:00 the open of the coming interval or the close of the last one? Vendors disagree, and reading the wrong edge is a clean one-bar look-ahead that sails through review. Here is the war-story, why the leak is invisible, and the ingest rule I now enforce on every feed.

· 9 min

Adjusted vs Unadjusted Close: The Dividend Double-Count That Fakes a Backtest Edge

Total-return and price-return series look identical on a chart and differ by percent-per-year underneath. Mix them, or fold dividends in twice, and a long-horizon backtest drifts a few percent above the honest one every year and compounds into a phantom edge. Here is the reconstruction check I now run: rebuild total return from price plus the dividend stream yourself and diff it against the vendor's adjusted series.

· 9 min

Survivorship Bias in a Backtest: The Delisted-Fraction Smell Test

Survivorship bias is the term every quant knows and almost nobody makes actionable. Here is the one-number diagnostic I run before I trust any cross-sectional backtest: count the dead names as a share of your universe over a decade. If it is near zero, your data quietly deleted the losers and every result is biased upward.

· 9 min

Capacity and Crowding: Why a Real Edge Still Decays at Size

Even a genuine edge dies if you deploy it too large. This is the field note on alpha-side risk: how your own market impact (capacity) and everyone else trading the same signal (crowding) shrink the size at which the edge is still yours, and the crossover test that tells you where your ceiling sits before the market finds it for you.

· 9 min

Sharpe Ratio Limitations: Why I Promote on Calmar, Not Sharpe

A candidate in my Titan system posted a Sharpe near 1.4, cleared every statistical gate, and still traced a drawdown so deep and so long that I could never have held it through the trough. Here is why Sharpe is blind to the path and the tail, the survival-metric suite (Sortino, Calmar, CVaR, CDaR) that sees what it misses, and the one rule it bought me: promote on Calmar lift, not Sharpe lift. All figures are illustrative and sanitised.

· 9 min

Risk of Ruin Monte Carlo: Resample the Cause, Not the Effect

Most risk-of-ruin Monte Carlo resamples a strategy's realised P&L, which quietly bakes in the good luck you are trying to stress and understates the tail. Here is the correction that made my honest drawdown distribution far fatter than my first one, plus the relative gate a long-only sleeve actually needs. First person, British English, illustrative numbers only.

· 9 min

Walk Forward Optimization Is Not Automatically Out of Sample

Everyone sells walk-forward validation as proof a strategy is out-of-sample. It is not. I ran my own walk-forward pipeline on pure random-walk noise and it still produced a healthy positive stitched Sharpe, because out-of-sample is a property of provenance, not partitioning. Here is the random-walk control that tells you whether your pipeline, or your edge, produced the number.

· 9 min

Look-Ahead Bias in a Backtest: The Corrupt-the-Future Test That Catches It

Look-ahead bias is the default state of careless backtest code, not an exotic edge case, and it survives review because it reads as ordinary pandas. Here is the corrupt-the-future causality test I now gate on: poison every price after a date, then assert nothing computed before it moves. If the past shifts when you poison the future, the strategy is reading ahead.

· 9 min

The Deflated Sharpe Ratio: Why Your Grid-Search Winner Is Probably Noise

The expected best Sharpe of a parameter sweep climbs as the grid grows, even when every strategy in it is worthless. Here is the deflated Sharpe ratio explained as a practitioner sees it, with a small N to noise-ceiling lookup table you can apply to your own sweep tonight, and the one rule that killed my proudest grid-search winner: N is the pool, not the podium.

· 9 min

Essays in your inbox

New writing on Syria, sustainability and finance, a few times a month.

Unsubscribe anytime. Read by 4,200+ professionals.