Skip to main content

qs_backtest/
lib.rs

1//! `qs-backtest` — Backtesting engine for the quant-system workspace.
2//!
3//! This crate provides tools for replaying historical market data through the
4//! [`qs_core::TradeEngine`] to evaluate trading strategies and predefined
5//! signal sets.
6//!
7//! # Two modes of operation
8//!
9//! 1. **Strategy-driven** — implement the [`Strategy`] trait; the runner feeds
10//!    market data tick-by-tick and your strategy decides when to act.
11//! 2. **Signal replay** — provide a `Vec<Signal>` with timestamps; the runner
12//!    injects them at the correct moments while replaying price data.
13//!
14//! # Key types
15//!
16//! | Type | Purpose |
17//! |------|---------|
18//! | [`BacktestRunner`] | Orchestrates the backtest loop (both modes) |
19//! | [`BacktestExecutor`] | Tracks simulated fills, positions, and P&L |
20//! | [`BacktestResult`] | Final report — P&L, win rate, drawdown, trade log |
21//! | [`DataFeed`] | Trait for sequential market event sources |
22//! | [`Strategy`] | Trait for strategy-driven backtests |
23
24pub mod artifacts;
25pub mod currency;
26pub mod data_feed;
27pub mod economic_support;
28pub mod evaluation;
29pub mod executor;
30pub mod future_executor;
31pub mod ledger;
32pub mod mtm;
33pub mod portfolio;
34pub mod profile;
35pub mod report;
36pub mod runner;
37pub mod sizing;
38pub mod strategy;
39
40// ── Convenience re-exports ──────────────────────────────────────────────────
41
42pub use artifacts::{
43    CloseEvent, CompletedPosition, ExecutionMetadata, FutureBacktestArtifacts,
44    InstrumentSizingArtifact, NetPnlOutcome, OpenPositionSnapshot, PendingOrderLifecycleEvent,
45    PendingOrderLifecycleState, PendingOrderSnapshot, RecordedFill, ReplayInstrumentArtifact,
46    ReplayInstrumentManifest, RiskBasisStatus, RiskTranche,
47};
48pub use currency::{
49    ConversionError, ConversionLeg, ConversionLegAudit, ConversionPriceSide, ConversionQuoteBook,
50    ConversionResult, ConversionRoute, FxPair, FxPairDirection, QuoteValidationError,
51    RunCurrencyPlan, RunCurrencyPlanError, resolve_conversion_route, resolve_fx_pair,
52};
53pub use data_feed::{DataFeed, MarketEvent, VecFeed};
54pub use economic_support::{
55    EconomicSupportError, LEGACY_ECONOMIC_GUARD_ID, LegacyEconomicModel, SupportedLegacyEconomics,
56    guarded_instrument_spec, resolve_legacy_economics,
57};
58pub use evaluation::{
59    BootstrapConfig, BreakdownDimension, EvaluationContext, EvaluationOptions, EvaluationReport,
60    EvaluationSection, GroupFilter, PositionFilter, PositionSide,
61};
62pub use executor::BacktestExecutor;
63pub use future_executor::FutureExecutor;
64pub use mtm::{
65    DEFAULT_MTM_MAX_POINTS, MAX_MTM_MAX_POINTS, MIN_MTM_MAX_POINTS, MtmCurveCollector,
66    MtmOutputPolicy, MtmOutputPolicyError, MtmOutputSummary,
67};
68pub use profile::{
69    ManagementProfile, PositionRef, PositionResolver, ProfileApplicationError, ProfileError,
70    ProfileRegistry, ProfileRegistryError, ProfileValidationError, RawSignal, ResolvedEntry,
71    RuleConfigDef, StoplossMode, TargetResolution, TargetSelection, allocate_target_units,
72    resolve_signal, resolve_unprofiled_entry,
73};
74pub use report::{
75    BacktestResult, CloseReasonStats, DurationStats, MonthlyReturn, PositionSummary, RiskMetrics,
76    StreakStats, SubsetStats, TradeResult,
77};
78pub use runner::{
79    BacktestRunner, FutureQuoteConfig, ReplayCancelled, ReplayProgress, StreamingReplayError,
80};
81pub use strategy::Strategy;