Files
fidc-backtest-engine/README.md
2026-04-23 22:13:14 -07:00

146 lines
5.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# fidc-backtest-engine
面向中国 A 股和期货策略的 Rust 回测核心。仓库目标是提供平台自有的策略 DSL、执行模型、撮合模型和结果分析能力最终由 `fidc-backtest-service` 对外提供策略运行服务。
## 当前能力
- 日频、分钟、tick 级策略生命周期与确定性回放。
- A 股行情、估值、因子、基准、候选资格、涨跌停触达、停牌和 ST 标记。
- 平台策略 DSL 与 `StrategyContext` 数据 API不暴露非平台脚本语法。
- `BacktestConfig` 支持起止日期、初始资金、决策滞后、执行价格字段、基准代码。
- `DailyMarketSnapshot` 支持 `open/close/last/day_open/prev_close/upper_limit/lower_limit`
- Universe 选择器支持动态市值带、排序、Top-N、动态订阅和策略内更新。
- A 股规则钩子支持 T+1、停牌、涨停不可买、跌停不可卖、整手和最小下单量。
- Broker 支持目标权重、显式金额、目标股数、限价、VWAP/TWAP、挂单、撤单和订单查询。
- 期货账户支持多空持仓、开平仓、今昨仓、保证金、手续费、结算和到期处理。
- 报告输出支持权益曲线、成交、持仓、月度收益、风险指标、基准序列和 JSON 分析包。
- 内置 `OmniMicroCapStrategy`,覆盖动态市值带、均线过滤、止损止盈、固定频率再平衡和盘中执行近似。
## Workspace 布局
```text
.
├── Cargo.toml
├── crates
│ ├── bt-demo
│ └── fidc-core
│ └── src
│ ├── broker.rs
│ ├── calendar.rs
│ ├── cost.rs
│ ├── data.rs
│ ├── engine.rs
│ ├── futures.rs
│ ├── platform_expr_strategy.rs
│ ├── portfolio.rs
│ ├── rules.rs
│ ├── scheduler.rs
│ ├── strategy.rs
│ └── strategy_ai.rs
├── data/demo
└── docs
```
## 核心模块
- `calendar`: 交易日历、交易日滚动和调度日期工具。
- `instrument`: 证券和合约静态定义。
- `data`: 行情、因子、基准、候选资格、公司行为、盘口和期货交易参数数据模型。
- `universe`: 动态市值带和预排序候选集。
- `portfolio`: 股票账户现金、持仓、可卖数量、盈亏、分红应收和资金流水。
- `futures`: 期货账户、合约参数、保证金、手续费和多空持仓。
- `rules`: 中国市场交易规则和风控校验。
- `broker`: 股票撮合、订单簿、滑点、成交量约束、限价和显式订单执行。
- `scheduler`: 日、周、月、分钟、tick 调度规则。
- `platform_expr_strategy`: 平台 DSL 解析后的表达式策略执行模型。
- `strategy`: 策略 trait、内置策略和运行时视图。
- `strategy_ai`: 策略 AI 手册、提示词生成和数据库字段目录合并。
- `engine`: 回测主循环、事件发布、报告和指标汇总。
## 平台策略模型
策略代码不直接运行 Python 或非平台 API而是被解析为平台自有的策略 spec。执行链路是
1. 页面编辑平台 DSL。
2. spec 生成器解析变量、函数、选股、排序、风控、资金分配和显式订单。
3. 回测引擎按交易日和调度事件构造 `StrategyContext`
4. 策略返回 `StrategyDecision` 或显式订单动作。
5. Broker、规则钩子和账户模型完成撮合、费用、持仓和权益更新。
6. Analyzer 输出标准化结果供服务和前端展示。
平台 DSL 支持:
- `strategy("name") { ... }` 策略入口。
- `let` 自定义参数和 `fn` 自定义函数。
- `when / unless / else` 条件块。
- `selection.market_cap_band(...)` 动态市值带。
- `filter.stock_expr(...)` 任意指标、因子和组合选股。
- `ordering.rank_by(...)``ordering.rank_expr(...)` 排序。
- `allocation.buy_scale(...)` 动态买入资金比例。
- `risk.stop_loss(...)``risk.take_profit(...)` 多条件止盈止损。
- `order.*``cancel.*``update_universe(...)``subscribe(...)` 显式交易动作。
任意数据库指标和自定义因子通过 `factor("field")``factor_value("field", lookback)``rolling_mean("field", n)``sma("close", n)` 等函数读取。未预计算的均线窗口可在回测中按已有历史数据实时计算。
## 内置微盘策略
`OmniMicroCapStrategy` 是平台内置的微盘轮动策略,用于 demo、性能验证和策略迁移基线
1. 使用 `benchmark_signal_symbol` 的同日决策价格计算指数信号。
2.`(index_level - base_index_level) * xs + base_cap_floor` 计算动态市值带。
3. 在预排序 eligible universe 中按市值区间截取候选。
4. 过滤停牌、ST、退市、科创板、一元股、涨停、跌停和不可买卖标记。
5. 使用个股短中长均线过滤。
6. 支持止损、止盈、定期再平衡和替补买入。
7. 默认按 10:18 附近的平台调度快照近似盘中决策,并使用 `last_price` 或配置的盘口价格执行。
## 运行方式
默认运行仓库 demo 数据:
```bash
cargo run --bin bt-demo
```
运行平台内置微盘策略:
```bash
FIDC_BT_STRATEGY=omni-microcap \
FIDC_BT_SIGNAL_SYMBOL=000001.SH \
cargo run --release --bin bt-demo
```
接入真实分区 snapshot 目录:
```bash
FIDC_BT_DATA_LAYOUT=partitioned \
FIDC_BT_DATA_DIR=/path/to/snapshots \
FIDC_BT_SIGNAL_SYMBOL=000001.SH \
cargo run --bin bt-demo
```
约定目录结构:
```text
snapshots/
├── instruments.csv
├── benchmark/YYYY/MM/*.csv
├── market/YYYY/MM/*.csv
├── factors/YYYY/MM/*.csv
└── candidates/YYYY/MM/*.csv
```
运行后默认生成:
- `output/demo/equity_curve.csv`
- `output/demo/trades.csv`
- `output/demo/holdings_summary.csv`
## 测试与构建
```bash
cargo fmt
cargo test
cargo build
```