增强回测引擎第二版策略与快照层

This commit is contained in:
zsb
2026-04-07 00:34:52 -07:00
parent 334864cbc5
commit d039c4e741
10 changed files with 244 additions and 86 deletions

View File

@@ -4,6 +4,7 @@
## 当前能力
- Phase 2增加 snapshot bundle 视图与更贴近 jqdata 策略语义的动态市值带策略
- 日频交易日历与确定性逐日回放
- A 股日频市场快照、估值/因子快照、基准快照、候选资格标记
- 策略接口与引擎驱动,不直接模拟 `jqdata` API
@@ -53,19 +54,24 @@
## 策略实现
示例策略 `CnSmallCapRotationStrategy` 对应一类典型的 A 股小市值轮动逻辑:
示例策略 `CnSmallCapRotationStrategy` 对应一类典型的 A 股小市值轮动逻辑,并在 phase 2 里更贴近原始 jqdata 语义
1. 用指数点位相对基准水平切换市值带:
- 强势区间:更偏小市值
- 中性区间:中小市值
- 弱势区间:偏大一些的防御市值带
1. 用指数点位动态计算市值带:
- `mystart = round((index_close - base_index_level) * xs + base_cap_floor)`
- `myend = mystart + cap_span`
2. 在当前市值带内,按总市值升序取 Top-N。
3. 用指数短均线/长均线关系控制总仓位:
- `1.0`: 风险偏好正常
- `0.5`: 降半仓
- `0.0`: 全部转现金
4. 固定交易日频率再平衡。
- `MA(short) < MA(long) * rsi_rate` 时降到 `trade_rate`
- 否则恢复到 `1.0`
4.`refresh_rate` 固定频率再平衡。
5. 非再平衡日也会检查止损/止盈钩子并触发退出。
6. 候选过滤纳入资格快照:
- 停牌
- ST
- 新股
- 科创板
- 1 元股
- allow_buy / allow_sell
这个接口不是 `jqdata` 风格的 `before_trading_start` / `handle_data` 直接脚本 API而是
@@ -79,7 +85,7 @@
如果原始逻辑大致是:
- 依据指数强弱切换可接受市值带
- 依据指数点位动态切换可接受市值带
- 从候选股票里选最小市值若干只
- 按均线决定是否降仓
- 周期性调仓
@@ -94,7 +100,14 @@
- `order_target_value` -> `StrategyDecision.target_weights``BrokerSimulator` 解释执行
- 风险控制逻辑 -> `CnSmallCapRotationStrategy::gross_exposure`
## V1 明确简化点
## Phase 2 新增内容
- `DataSet::bundle_on(date)`:引入按日 snapshot bundle 视图,方便未来直接对接 FiDataCenter / FiDataScraper 预计算快照
- 策略诊断输出equity curve 里新增 `diagnostics` 字段,记录市值带、候选样本、退出原因等信息
- 候选资格快照扩展:补入 `is_kcb``is_one_yuan`
- 增加策略选择行为测试
## V1 / V2 当前仍保留的简化点
下面这些是刻意保留为 v1 简化,而不是遗漏:
@@ -146,6 +159,16 @@ cargo build
- 组合调仓只关心“目标持仓”和“当前持仓”的差量
- 事件流是 append-only适合批量写出和后处理分析
## 距离真实 6 年 / 5 分钟平台还差什么
当前仓库已经有“核心引擎 + 规则钩子 + 策略接口 + demo 回放”,但距离生产级目标还差:
- 真实 snapshot loader接入 FiDataCenter / FiDataScraper 的 ClickHouse / Parquet / PostgreSQL 预计算快照,而不是 demo CSV
- 分钟级执行层:把当前 `T-1 决策 / T 开盘执行` 扩展到更接近 `10:17 / 10:18` 的分钟级执行语义
- 更完整的 A 股规则:复权、分红、涨跌停细分、创业板/北交所规则、成交量约束、滑点模型
- 更高效的数据访问:按日期块和列式布局一次性加载 6 年快照,避免回测时回源拼表
- 批量参数回测:多个参数集共享预计算快照与候选池缓存
## Roadmap
- 引入更明确的事件总线和 portfolio/account ledger 分层