版本: v1.0
日期: 2025-10-09
负责人: Research / Quant Engineering
依赖文档: IMPLEMENTATION_PLAN.md, TESTING_PLAN.md, M16_INCREMENTAL_GRID_DESIGN.md
M3 阶段要求支持参数回放与敏感性测试,以验证网格/剥头皮策略在不同市场环境下的表现,并作为金丝雀流程的一部分。当前仅有轻量级 replay 工具,缺乏系统化框架。
┌──────────────────────────┐
│ BacktestRunner │
│ - loadScenario() │
│ - run() │
│ - generateReport() │
├───────────┬──────────────┤
│ DataFeed │ LatencyModel │
└────┬──────┴───────┬──────┘
│ │
MarketAdapter ExecutionAdapter
│ │
┌────▼─────┐ ┌────▼─────┐
│Strategy │ │Connector │(mock)
│(Grid/MM) │ │(REST/WS) │
└──────────┘ └──────────┘
BacktestRunner: orchestrate 数据加载、策略执行、结果收集。DataFeed:抽象行情来源,支持 JSON、Parquet、Kafka snapshot。LatencyModel:针对下单/撤单/成交回报注入延迟。ExecutionAdapter:Mock Pacifica 连接器,遵循真实接口。MetricsCollector:聚合指标并输出报告。interface ScenarioConfig {
name: string;
start: string; // ISO timestamp
end: string;
symbol: string;
strategyConfig: GridConfig | ScalperConfig;
latencyProfile: LatencyProfile;
feeModel: FeeModelConfig;
fundingModel: FundingModelConfig;
}
主要方法:
loadScenario(config: ScenarioConfig): 初始化 DataFeed/Adapters/Strategy。run(): 按时间顺序驱动事件;支持加速(跳帧)与实时模式。generateReport(): 输出 JSON + Markdown + 可选 CSV,包含指标。接口:
interface DataFeed {
next(): Promise<Event | null>;
peekTime(): number | null;
reset(): Promise<void>;
}
事件类型:
BookSnapshot, BookDelta, Trade, FundingUpdate, CustomSignal。实现 OrderRouterDispatchFn, CancelFn 等接口,模拟交易所行为:
定义:
interface LatencyModel {
orderSubmitDelay(): number; // ms
cancelDelay(): number;
fillDelay(): number;
}
实现方式:
interface FeeModel {
makerFeeBps: number;
takerFeeBps: number;
rebateBps: number;
calc(order: Order, fill: Fill): number; // 返回费用(USD)
}
interface FundingModel {
getFundingRate(ts: number): number; // annualized
settle(position: Position, ts: number): number;
}
输出指标(JSON/CSV/Markdown):
pnl_total, pnl_fee, pnl_funding, pnl_slippageev_bps, sharpe, sortino, max_drawdownfill_count, fill_interval_stats, hedge_cost_bpsdelta_abs vs time, EV 累计曲线。interface ParameterSweep {
run(scenarios: ScenarioConfig[], params: ParameterGrid): Promise<SweepResult>;
}
ParameterGrid: 数组或 ranges;支持顺序/随机。pnpm backtest --scenario btc-vol-shock --grid grid.yaml --param sweep.yaml.books/{date}/{symbol}.parquettrades/{date}/{symbol}.parquetscripts/export-from-humio.ts)。config.yaml(或子集),支持在 ScenarioConfig 中覆盖参数。packages/backtest/(新 package)pnpm backtest --config backtest/btc_micro.yamlbacktest/scenarios/btc-vol-shock.yamldocs/BACKTEST_USAGE.md(未来撰写)