Backtesting Frameworks
Build robust, production-grade backtesting systems that avoid common pitfalls and produce reliable strategy performance estimates.
Use this skill when
- Developing trading strategy backtests
- Building backtesting infrastructure
- Validating strategy performance and robustness
- Avoiding common backtesting biases
- Implementing walk-forward analysis
Do not use this skill when
- You need live trading execution or investment advice
- Historical data quality is unknown or incomplete
- The task is only a quick performance summary
Instructions
- Define hypothesis, universe, timeframe, and evaluation criteria.
- Build point-in-time data pipelines and realistic cost models.
- Implement event-driven simulation and execution logic.
- Use train/validation/test splits and walk-forward testing.
- If detailed examples are required, open
resources/implementation-playbook.md.
Safety
- Do not present backtests as guarantees of future performance.
- Avoid providing financial or investment advice.
Resources
resources/implementation-playbook.md for detailed patterns and examples.
Limitations
- Use this skill only when the task clearly matches the scope described above.
- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.
Simulation boundaries
The examples are incomplete educational engines, not production-grade or validated performance estimates. Event execution is single-symbol long-only and needs sorted unique timestamps, finite positive OHLC prices, valid cash/order quantities and explicit unsupported limit/stop handling; do not silently discard unsupported or final pending orders. State persists across run calls: create a fresh engine per experiment. Corporate actions, dividends, delistings, missing bars, borrow/funding/margin, latency, liquidity/partial fills and capacity remain unmodeled. A one-period signal shift does not cure a signal function that reads future data, and close-to-close attribution requires a precisely defined execution clock. Annualization must match sampling frequency; 252 assumes trading-day data and simple IID scaling may fail under autocorrelation. Nonzero return days are not trades, geometric annual return divided by volatility is not the standard arithmetic excess-return Sharpe, and a curve without initial capital can miss first-period drawdown. Preserve initial wealth in each metric and report undefined ratios rather than invented zero. Walk-forward needs train-only warm-up for test indicators, no overlapping test windows and consistent costs/capital chaining; repeated parameter search adds selection bias. IID bootstrap ignores serial dependence/regime shifts and produces conditional simulation quantiles, not a calibrated future-loss probability. Record data versions, all trials, seeds, cost assumptions, benchmarks and untouched holdout results; no live execution or investment recommendation is authorized.