模块以 runner.py 为固定入口,负责解析 config.json、通过 loaders.registry 按 symbol 格式路由到具体 DataLoader(支持 fallback chain),动态导入并 AST 校验用户策略 signal_engine.py,再调用 engines.base.BaseEngine.run_backtest() 完成“拉取数据 → 基本面/RSSHub 事件增强 → 信号生成 → 对齐+可选优化器 → 逐bar执行 → 指标 → 产物”的流水线。
engines/:base.BaseEngine定义抽象接口(can_execute/round_size/calc_commission/apply_slippage/on_bar)并提供共享的_align对齐、_execute_bars逐bar执行循环、杠杆/保证金/PnL 钩子;各子类(china_a/crypto/futures_base/forex/options_portfolio/composite等)仅覆盖市场规则差异,composite用于跨市场组合。loaders/:所有数据源实现DataLoaderProtocol(fetch(codes, start, end, interval, fields)返回{symbol: DataFrame}),由registry注册并按 source/market 选择;base提供 OHLC 校验、重试预算 (retry_with_budget)、本地 parquet 缓存(DuckDB 读写)等通用能力。optimizers/:BaseOptimizer.optimize(ret, pos, dates)提供因果滚动窗口切片、协方差上下文构建与符号保持的权重注入,子类(mean_variance/risk_parity/equal_volatility/max_diversification/turnover_aware)仅实现_calc_weights。metrics.py集中年化因子表(按 source×interval 映射交易日历)、收益/换手率/Sharpe/Sortino/Calmar/跟踪误差等指标计算,被 engine 和外部脚本复用。- 顶层文件承担横切职责:
models.py定义Position/TradeRecord/FillRecord/EquitySnapshot等核心数据结构;constraints.py对优化器输出施加约束;benchmark.py/run_card.py/validation.py/risk_xray.py/rebalance_notes.py作为 run 流程中按需调用的产物生成器。 依赖方向单向:runner → engines → loaders + optimizers → metrics/models;engine 不反向依赖 runner。