Changelog

July 26, 2026 · View on GitHub

All notable changes to the Open Backtest Format specification are recorded here.

The format itself follows Semantic Versioning, described in spec/9-versioning.md. This changelog tracks changes to the specification document, which may or may not correspond to a format version bump.

[Unreleased]

[0.1.0-draft] — 2026-07-26

Initial draft of the Open Backtest Format specification.

Added

  • Envelope specification: OBTF magic, uint32 LE version, zstd + MessagePack body.
  • Top-level data model: BundleStudyRunMetrics / Summary / MonteCarloTest.
  • @blob reference protocol for extracting large time-series metrics into Parquet payloads.
  • Reserved sample_type vocabulary (in_sample, out_sample_time, out_sample_universe, walk_forward, stress, monte_carlo).
  • Two window primitives: BacktestDateRange (simple, single contiguous period) and BacktestWindow (train / optional test / warmup / gap / step / fold_index — for walk-forward and k-fold workflows).
  • Non-normative "Workflow patterns" catalog in spec/5-universe-windows.md mapping rolling walk-forward, anchored walk-forward, time-series k-fold, one-off in-sample fit, and one-off with holdout to specific BacktestWindow field combinations, plus a consumer decision tree for recognising each pattern.
  • Expanded overlap semantics: three distinct kinds of inter-window overlap (adjacent train, adjacent test, cumulative test-in-train containment) are documented and permitted. Consumer deduplication is a MUST for statistics that require disjoint samples.
  • Full ExecutionConfig shape: pluggable slippage_model / commission_model / fill_model, per-symbol TradingCost overrides, reserved built-in type names with per-type params schemas (defaults + units) so any conforming implementation can emit or consume them.
  • Reader and writer contracts.
  • Vendor extension namespace convention (x-*).
  • Apache-2.0 license.
  • Governance document with a stated path to multi-vendor governance.

Notes

  • This is a draft. Field names, envelope layout, and MUST-level requirements MAY change without notice until 1.0.0.
  • The reference implementation currently lives inside coding-kitties/investing-algorithm-framework and predates this spec. The spec has been derived from that implementation but has been generalised (no framework-specific magic bytes, opaque algorithm_id, extensible engines map rather than fixed vector / event slots, etc.). The reference implementation will be aligned with the spec as OBTF stabilises.