本文档说明如何运行亚盘真实赔率回测报告生成脚本。
---
cd /Users/3pigcn/git/7_script/titan007-monitor
1.2 确认数据库存在
脚本依赖 `titan007.db` 数据库文件,确保该文件存在于项目根目录:
ls titan007.db
如果数据库不存在,需要先运行数据抓取脚本(不在本文档范围内)。
1.3 确认 Python 环境
需要 Python 3.10+:
python3 --version
项目依赖已在 `requirements.txt` 中定义,核心依赖为:
- `pyyaml` (如使用配置模式)
- `pytest` (如运行测试)
回测脚本本身只使用 Python 标准库 + 项目内部模块,无需额外安装包。
---
2. 运行回测报告
2.1 运行主脚本
python scripts/real_odds_ah_backtest.py
2.2 运行过程说明
脚本会自动执行以下步骤:
1. **运行 18 组参数组合的回测**
- 方向:顺追(follow) / 反追(fade)
- 阈值:7, 8, 9
- 固定赔率:1.85, 1.90, 1.95(实际使用真实赔率,此参数不影响结果)
2. **控制台输出摘要**
- 每组策略的投注数、胜率、盈亏、ROI、最大回撤
- 最佳策略的逐年详细拆解
3. **生成报告文件**
- `docs/BACKTEST_AH_REAL_ODDS.md` — 主分析报告
- `docs/BACKTEST_AH_DETAILED_BETS.md` — 最佳策略逐笔交易记录
2.3 运行时间
- 约 30-60 秒(取决于机器性能)
- 大部分时间在数据库查询和逐笔结算
---
3. 查看输出文件
3.1 主报告 (`BACKTEST_AH_REAL_ODDS.md`)
包含以下内容:
章节 内容 第1章 回测方法说明(真实赔率定义、数据覆盖率、赢半/输半处理) 第2章 核心结论(Top策略汇总、最佳策略概述) 第3章 最佳策略逐年详细拆解(赢半/输半分布、盈亏来源分解) 第4章 按模式细分(win_pan vs lose_pan 各自表现) 第5章 **回撤分析**(全周期最大回撤、回撤区间定位、各年最大回撤) 第6章 资金管理建议(凯利公式计算) 第7章 **每年独立详细报告**(2020-2026 各年全策略对比、月份分布、模式细分) 第8章 风险提示 第9章 原始数据附录(全部18组策略结果汇总表)
3.2 详细交易记录 (`BACKTEST_AH_DETAILED_BETS.md`)
包含以下内容:
章节 内容 逐笔交易明细 234 行完整交易记录(时间、球队、赔率、比分、结果、盈亏、累计资金) 回撤区间明细 最大回撤区间内 46 笔交易的独立列表 月度盈亏汇总 按年月统计的投注数、胜负、盈亏、累计资金
标注说明:
- 🔴 = 回撤区间起点(峰值)
- 🟢 = 回撤区间终点(谷值)
---
4. 参数说明
脚本当前为**固定参数模式**,如需调整回测范围,需修改脚本中的以下配置:
4.1 修改 `run_single()` 函数(第 53 行)
def run_single(dir_enum, dir_name, threshold, fixed_odds):
engine = BacktestEngine(
db_path='titan007.db', # 数据库路径
threshold=threshold, # 连场阈值(7/8/9)
direction=dir_enum, # 方向(FOLLOW=顺追, FADE=反追)
fixed_odds=fixed_odds, # 固定赔率兜底
stake=1.0, # 每注金额
pattern_types=['win_pan', 'lose_pan'], # 回测模式
min_match_time='2020-01-01 00:00', # 最早比赛时间
use_real_odds_only=True, # 仅使用真实赔率
)
4.2 常见修改场景
需求 修改项 回测更早的数据 `min_match_time='2018-01-01 00:00'` 只测单个模式 `pattern_types=['win_pan']` 关闭真实赔率 `use_real_odds_only=False` 改变每注金额 `stake=10.0`
---
5. 输出示例
5.1 控制台输出
🎲 亚盘真实赔率回测开始...
[1/18] 顺追阈值7赔率1.85... bets=858 profit=+61.66 roi=+7.2% dd=13.5
...
==================================================================================
📊 亚盘真实赔率回测报告 (2020-2025)
==================================================================================
策略 投注 胜率 盈亏 ROI 回撤 回撤注
----------------------------------------------------------------------------------
顺追阈值9赔率1.85 234 57.3% +24.28 +10.4% 9.01 46
...
✅ 报告已保存: docs/BACKTEST_AH_REAL_ODDS.md
✅ 详细交易记录已保存: docs/BACKTEST_AH_DETAILED_BETS.md
5.2 文件大小参考
文件 大小 行数 `BACKTEST_AH_REAL_ODDS.md` ~30 KB ~550 行 `BACKTEST_AH_DETAILED_BETS.md` ~50 KB ~350 行
---
6. 常见问题
Q1: 运行时报 `No such file or directory: 'titan007.db'`
**解决**: 确认在项目根目录运行脚本,或修改 `db_path` 为数据库的绝对路径。
Q2: 为什么固定赔率参数不影响结果?
**解答**: 因为启用了 `use_real_odds_only=True`,所有投注都使用数据库中的真实亚盘水位(ah_water / ah_opp_water)。固定赔率仅在无真实赔率时作为兜底,而真实赔率模式下无真实赔率的信号会被跳过。
Q3: 如何验证 100% 使用真实赔率?
**解答**: 查看控制台输出,所有策略的 `profit` 和 `roi` 在赔率 1.85/1.90/1.95 下完全相同,说明固定赔率从未被使用。
Q4: 报告中的日期格式不统一?
**解答**: 数据库中存在两种格式:`YYYY-MM-DD` 和 `YY-MM-DD`。脚本已自动兼容处理,年份统计不受影响。
Q5: 如何只看某个年份的数据?
**解答**: 修改 `min_match_time` 参数,例如只回测 2023 年:
min_match_time='2023-01-01 00:00'
---
7. 技术架构
scripts/real_odds_ah_backtest.py
├── run_single() # 单次回测
│ └── BacktestEngine # 回测引擎 (backtest/engine.py)
│ ├── _has_real_ah_odds() # 检查真实赔率
│ └── resolve_bet() # 结算(含赢半/输半)
├── calc_max_drawdown() # 最大回撤计算(含峰值/谷值索引)
├── analyze_yearly() # 按年统计
├── print_console_report() # 控制台输出
├── generate_md_report() # 主报告生成
└── generate_detailed_bets_file() # 详细交易记录生成
---
8. 更新记录
日期 更新内容 2026-05-25 初始版本:真实赔率回测 + 逐年报告 + 回撤定位 + 逐笔交易记录