亚盘真实赔率回测报告 - 操作说明


本文档说明如何运行亚盘真实赔率回测报告生成脚本。


---


1. 环境准备


1.1 进入项目目录



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初始版本:真实赔率回测 + 逐年报告 + 回撤定位 + 逐笔交易记录