对历史分析结果进行事后评估,计算方向准确率、胜率、收益率等指标。
| 文件 | 职责 |
|---|---|
engine.py |
薄壳 — 仅 re-export quantcore.backtest.engine.{BacktestEngine, EvaluationConfig, OVERALL_SENTINEL_CODE, DailyBarLike, BacktestResultLike};纯算法已下沉到 quantcore |
backtest_service.py |
BacktestService 回测服务封装(CLI 入口 + 自动回测调度) |
__init__.py |
导出 |
拆包公告(2026-05):
BacktestEngine是 555 行纯算法(DB-agnostic,作者本人在 docstring 里就标注了 "pure logic"),现已迁移到独立的quantcore/backtest/包。stocklens.backtest.engine现在仅作为向后兼容的 re-export shim 存在。新代码请:from quantcore.backtest import BacktestEngine, EvaluationConfig
-
evaluate(analysis: dict, days: int = 10) -> dict— 评估单条分析结果- 输入: 历史分析记录(包含 code, date, score, prediction, advice)
- 流程:
- 获取分析日之后 N 天的实际行情
- 计算实际涨跌幅
- 对比预测方向与实际方向
- 模拟进出场收益(基于建议的买入/止损/目标价)
- 返回:
{ "code": "AAPL", "analysis_date": "2026-04-03", "eval_date": "2026-04-13", "prediction": "震荡", "actual_change_pct": 2.5, "direction_correct": True, "stop_loss_triggered": False, "take_profit_triggered": False, "simulated_return_pct": 1.8, "status": "completed", # completed / insufficient_data }
-
evaluate_batch(analyses: List[dict], days: int = 10) -> dict— 批量评估- 返回:
{processed, saved, completed, insufficient, errors, results}
- 返回:
回测服务封装,供 CLI 和 API 调用。
-
run(code: str = None, days: int = 10, force: bool = False) -> dict— 运行回测code=None: 回测所有待评估的分析force=True: 强制重新计算已有结果- 返回: 同
evaluate_batch
-
get_results(code: str = None, limit: int = 20) -> List[dict]— 查询回测结果 -
get_statistics(code: str = None) -> dict— 统计信息- 返回:
{ "total": 100, "direction_accuracy": 0.65, # 方向准确率 "win_rate": 0.58, # 胜率(正收益比例) "avg_return": 1.2, # 平均收益率% "stop_loss_rate": 0.12, # 止损触发率 "take_profit_rate": 0.35, # 止盈触发率 }
- 返回:
- 依赖:
storage(AnalysisRepo, BacktestRepo, StockRepo)、tickbridge - 被依赖:
main.py(自动回测)、api(backtest 端点)
通过命令行参数控制:
| 参数 | 默认值 | 说明 |
|---|---|---|
--backtest |
False | 启用回测 |
--backtest-code |
None | 指定股票 |
--backtest-days |
10 | 评估窗口天数 |
--backtest-force |
False | 强制重算 |
- 回测需要分析日之后有足够的行情数据(至少
days天) - 数据不足时标记为
insufficient_data,不计入统计 - 方向判断: 预测"看多"且实际上涨 = 正确,预测"震荡"视为中性(不计入方向统计)
- 模拟收益基于分析报告中的买入价/止损价/目标价计算
main.py分析完成后会自动运行回测(评估之前的历史分析)