SPB Git forge
1commits 1branches 0releases
189.0 KBsize
maindefault branch
3 h agolast push
Python 54.7% TypeScript 42.5% SQL 1.9%
1.4 KB

# Research reports

Every backtest run stores a machine-readable report in backtest_runs (metrics, provenance, artifacts) and is rendered at /reports/<id> (printable) with CSV (/api/backtests/<id>/trades.csv) and JSON (/api/backtests/<id>).

A report answers, for one strategy × symbol × interval:

  1. Economic hypothesis and failure modes (from StrategyMeta).
  2. Universe & data coverage: window, number of closed bars, dataset hash, gaps.
  3. Parameters (validated against the ParamSpecs) and the cost model actually used.
  4. In-sample performance with uncertainty: block-bootstrap CI on Sharpe/CAGR, deflated Sharpe given the number of configurations tried (n_trials).
  5. Out-of-sample: holdout segment (never used for selection) and walk-forward folds (train → test, embargo).
  6. Implementation costs: fee drag, slippage drag, turnover, partial fills, rejected orders.
  7. Stress: fees ×2, spread ×3, +20 bps slippage, +1 bar latency, liquidity collapse, exchange outage gap, shuffled-trade drawdown distribution.
  8. Benchmarks on the same window and costs: buy & hold, cash, simple momentum, constant-vol long.

Strategies stay experimental: true until a documented OOS evaluation on ≥ 1 year of data supports them. Current data coverage (accumulating since first deployment) is far too short for any claim — the report says so.