How to Generate Synthetic Market Data for Testing
You have exactly one historical price path, and a strategy that survives only that one path may just be fit to it. Synthetic market data lets you generate thousands of plausible alternative histories to see whether a strategy holds up or merely got lucky on one tape. The catch is realism: synthetic data that ignores fat tails and volatility clustering tests against an easy world that flatters the strategy. Generating data that is hard in the right ways, and using it honestly rather than as another flattery mechanism, is what the steps below address.
Before You Start
Set up the inputs that make the next steps easier
Guide Steps
Move through it in order
Each step focuses on one decision so you can keep momentum without losing the thread.
- 1
Decide what the synthetic data is for
The purpose dictates the method. To stress-test a strategy against bad scenarios, you want data that reproduces tail events and volatility spikes. To test robustness broadly, you want many varied but realistic paths. To generate training data, you want diversity without leaking the structure you are trying to learn. Naming the purpose first prevents the common error of generating data that is realistic in the wrong dimensions for the question at hand.
Synthetic data is a tool for testing robustness, not for proving an edge. You set the data-generating process, so a strategy beating your synthetic data only shows it survives the world you built.
- 2
Choose a process that reproduces stylized facts
Real returns have well-documented stylized facts: heavy tails, volatility clustering where large moves follow large moves, near-zero autocorrelation in returns but strong autocorrelation in absolute returns, and occasional jumps. A simple Gaussian random walk reproduces none of these and generates a deceptively benign market. Choose a process, such as one with a fat-tailed innovation distribution and a volatility model that clusters, so the synthetic market is hard in the ways real markets are.
A Gaussian random walk is the wrong default. It has thin tails and no volatility clustering, so a strategy that passes it has been tested against a market that does not exist.
- 3
Calibrate parameters to the target market
Set the process parameters so the generated data matches the statistical character of the market you care about: the volatility level, the tail thickness, the clustering persistence, and any drift. Calibrate against the real series' moments and autocorrelation structure, not by hand-tuning until the output looks plausible. The goal is a generator whose paths are statistically indistinguishable from real ones on the properties that matter to your strategy.
Calibrate to the real market's higher moments and volatility autocorrelation, not just its mean and variance. The tails and clustering are what determine whether a strategy survives.
- 4
Generate many independent paths
Produce a large number of independent paths, not one long one. The point of synthetic data is the distribution of outcomes across many plausible histories, which reveals how a strategy performs in the range of conditions the single historical path happened not to produce. Run the strategy on every path and look at the distribution of its performance, especially the bad-path tail, rather than any single synthetic backtest.
Judge the strategy by the distribution across paths, particularly the worst paths. A strategy that is excellent on average but ruinous on the bad-path tail is fragile, and synthetic data is how you find that out before live trading does.
- 5
Avoid overfitting to the generator
The deepest trap is tuning a strategy to perform well on your synthetic data, because you chose the data-generating process and the strategy can fit its quirks just as it fits a historical path. Use synthetic data to falsify, not to optimize: a strategy that breaks on realistic synthetic paths is fragile, but one that survives them has only shown robustness to your assumptions, not a real edge. Keep validation against real out-of-sample data as the final word.
Never optimize parameters against synthetic data. It is a stress test, not a training set for the strategy itself, or you simply overfit a different fiction.
Common Mistakes
The misses that undo good inputs
Using a Gaussian random walk
It has thin tails and no volatility clustering, so it generates a benign market unlike any real one. A strategy that passes it has been stress-tested against conditions that do not occur, giving false confidence.
Treating a synthetic backtest as proof of edge
You control the data-generating process, so a strategy beating synthetic data only shows it survives the world you built. Synthetic data tests robustness to assumptions, not the existence of a real edge.
Optimizing the strategy against the generator
Tuning a strategy to perform well on synthetic data overfits the generator's quirks, exactly as tuning to one historical path overfits that path. Synthetic data is for falsification and stress testing, not for fitting parameters.
Try These Tools
Run the numbers next
Returns Distribution Analyzer
Paste a returns CSV. Histogram, normal-overlay, QQ plot, skewness, excess kurtosis, Jarque-Bera test, tail-weight index. See why Sharpe alone misleads.
Walk-Forward Validator
Upload a returns CSV. Rolling or expanding IS/OOS windows, per-window Sharpe, walk-forward efficiency, and a concatenated OOS equity curve. Catches regime.
Backtest Overfitting Score
Upload a backtest trade log and compute Probability of Backtest Overfitting (PBO), Deflated Sharpe Ratio, and the odds your edge survives live trading.
FAQ
Questions people ask next
The short answers readers usually want after the first pass.
Sources & References
- Empirical Properties of Asset Returns: Stylized Facts and Statistical Issues — Rama Cont, Quantitative Finance (2001)
- Generalized Autoregressive Conditional Heteroskedasticity — Tim Bollerslev, Journal of Econometrics (1986)
Related Content
Keep the topic connected
Monte Carlo Simulation
Monte Carlo simulation in trading: when it's the right tool, when it's overkill, and the seed-discipline gotcha that ruins most published examples.
Volatility
Volatility as the standard deviation of returns: realized vs implied, the annualization gotcha, and why volatility-of-volatility matters.
Overfitting
Overfitting in trading-strategy backtests: how multiple-testing inflates apparent edges and the diagnostics that catch it.
Look-Ahead Bias
Look-ahead bias: when a backtest accidentally uses data the strategy wouldn't have had at decision time. The most common variants and how to catch them.