03-定投回测方法论
基于本地数据库的历史行情与估值分位,对比"简单定投"与"估值分位定投"两种策略的长期收益。回测脚本:backtest_dca.py,最近一次回测结果档案:01-定投策略回测结果。
一、回测方法论
1.1 设计原则
回测遵循 仿真库总体设计 中"方法论在知识库,执行在仿真库"的边界:
- 数据库只提供数据:从
index_daily与index_valuation表读取行情和 PE 历史分位 - 回测逻辑在 Python 中执行:扣款、累计份额、计算收益等步骤不进入 SQL
- 不写入数据库:回测结果仅用于策略选型,不污染行为数据表(
decision_log等留给真实决策)
1.2 策略定义
估值分位定投的倍数映射,与 06-定投决策查询 中的信号生成逻辑保持一致:
分位缺失的月份按 1.0x 正常定投处理,避免数据缺失导致策略中断。
1.3 回测参数
1.4 回测标的
只选取同时具备完整日线与估值数据、历史深度达 10 年的标的:
未纳入回测的标的及原因:
二、对实盘的启示
-
估值定投的纪律性比单次择时更重要。回测中估值定投的优势来自系统性地"高估不买",而不是某一次精准逃顶。实盘中应让倍数映射固化在扣款流程里,避免人工干预。
-
暂停月不是"错失机会"而是"等更好的价格"。上证50 的 34 个暂停月看似很多,但最终年化反而更高。实盘中遇到暂停信号时,应按纪律执行,而不是因为"已经涨了"就追进去。
-
策略验证需要持续复盘。历史样本的市场结构可能变化。建议每季度用 06-定投决策查询 的查询接口重新跑一次回测,对比"策略预期 vs 实际表现",写入 05-季度复盘。
-
实盘决策应写入
decision_log。回测结果支撑策略选型,实盘开始后,每次扣款都应通过 07-行为数据查询 写入decision_log,记录决策时的 PE 分位快照,后续用同一套查询接口做"决策命中率"复盘。
三、如何复现
3.1 前置条件
- 数据库已建库并灌入历史数据:
- 依赖已安装:
pandas(已在03-仿真库/01-数据库/02-采集脚本/requirements.txt中声明)
3.2 运行回测
3.3 扩展回测
如需增加标的或调整策略参数,修改 backtest_dca.py:
- 增加标的:在
main()的default_targets列表中添加,前提是该指数在数据库中同时有完整日线与估值数据 - 调整倍数映射:修改
valuation_multiplier()函数的阈值与返回值 - 增加止盈逻辑:在
backtest_valuation()的循环中加入"累计收益超阈值则止盈"分支
延伸阅读
- 00-定投策略总览 - 定投策略的整体框架与资产配置
- 02-定投止盈止损具体策略 - 止盈止损规则
- 01-定投策略回测结果 - 2026-07 回测快照与结论
- 06-定投决策查询 - 定投信号与回测函数的查询接口