Validating a Strategy on Synthetic Price Paths
Testing a strategy on simulated price paths generated from a model rather than historical data, to see whether it survives on a much larger sample of 'plausible' markets than the one history happened to hand you.
You only get one history. A backtest over the last fifteen years is a single realization of how markets could have unfolded, and it's entirely possible your strategy happens to fit that one path well while being fragile to paths that easily could have happened instead. Synthetic price path validation addresses this by generating many artificial price series from a model calibrated to resemble real markets, then testing the strategy across all of them, so its performance is judged against a distribution of plausible histories instead of the single one that actually occurred.
The idea
A model — commonly geometric Brownian motion for a rough baseline, or something richer like a mean-reverting process, a jump-diffusion model, or a bootstrap resampling of historical returns — is calibrated to match key features of the real market: average volatility, typical drift, maybe fat tails or volatility clustering. The model then generates hundreds or thousands of independent synthetic price paths, each a different "alternate history" consistent with those calibrated statistics but not identical to what actually happened.
The strategy is run unchanged on every synthetic path, producing a distribution of outcomes (Sharpe ratios, drawdowns, win rates) rather than a single number. A strategy that performed well on the one real historical path but only mediocrely across the synthetic distribution was likely lucky in a way that won't repeat. A strategy that performs consistently well across the distribution has a result that's less dependent on the accidents of the one history we happened to observe.
Worked example
A pairs-trading strategy backtested on five years of real data for two correlated stocks shows a Sharpe ratio of 1.4. To validate this, a researcher fits an Ornstein-Uhlenbeck process to the historical spread between the two stocks — capturing its mean-reversion speed and volatility — and simulates 1,000 independent five-year spread paths from that fitted process. Running the identical trading rule (buy the spread below one standard deviation, sell above) on all 1,000 synthetic paths produces a distribution of Sharpe ratios centered around 1.1, with a 10th-to-90th percentile range of roughly 0.5 to 1.7. The real historical Sharpe of 1.4 sits comfortably within this range rather than at an extreme edge, which is reassuring: the strategy's edge looks like a property of mean-reverting spreads generally, not a lucky feature of this one five-year window.
Drag the parameters above to see how many distinct paths a single mean-reverting process can generate — a strategy validated on synthetic paths is being tested against this whole spread of possibilities, not just one of them.
What this means in practice
Synthetic path testing is a check on overfitting to history, not a replacement for a real out-of-sample test — the synthetic paths only reflect the statistical properties you chose to calibrate, so a strategy that depends on a feature the model doesn't capture (say, a specific correlation structure across many assets) can pass this test and still fail live. It's most useful early in development, before a strategy is spent on a lockbox holdout, as a cheap way to see whether the backtest result looks like a robust property of the market's statistics or a coincidence specific to the exact history used.
Testing a strategy on many synthetic price paths generated from a calibrated model shows whether its backtested performance is a robust property of the market's general statistics or a coincidence tied to the one specific history that actually happened — real history is only a single sample from a much wider space of paths that could have occurred.
Related concepts
Practice in interviews
Further reading
- Lopez de Prado, Advances in Financial Machine Learning, ch. 12