本次 checkpoint 记录了从 v2 分支开始的所有重要变更,供 Codex review 使用。
---
- **问题**: 项目存在 3 个数据库文件
- `titan007.db` (根目录, 1.9MB, 11,279条) — 主库子集
- `titan007-monitor/titan007.db` (23MB, 88,290条) — 唯一主库
- `titan007-monitor/titan007/titan007.db` (0字节) — 空文件
- **修复**: 删除根目录 DB 和空文件,只保留 `titan007-monitor/titan007.db`
- **问题**: `match_time` 字段存在两种格式混用
- `YYYY-MM-DD HH:MM` (旧数据, 71,091条)
- `YY-MM-DD HH:MM` (新抓取数据, 17,199条)
- 混用导致 `ORDER BY match_time ASC` 排序错误(字符串比较 `'2025-11' < '25-08'`)
- **修复**:
- 备份: `titan007.db.bak`
- 验证: 旧格式残留 = 0
- **防止复发**: `titan007/database.py:save_match()` 新增插入时自动归一化
- Valladolid `2026-05-25` 在旧排序中被错误插入 `2024-06-03` 和 `25-08-16` 之间
- 导致引擎误判 2024-25 赛季 12 连败延续到 2026-05-25,产生假信号
- 修复后该注消失,阈值9 2026年注数从 3 → 2(正确)
---
- **排序修复**: `ORDER BY` 从 CASE 归一化表达式简化回 `ORDER BY match_time ASC`(日期已统一)
- **过滤修复**: `min_match_time` 条件从 CASE 表达式简化回 `match_time >= ?`
- **新增字段**: `BetRecord` 创建时补充 `league=match.league`
- `BetRecord` dataclass 新增 `league: str` 字段
- 验证无 bug(水位计算 `ah + 1` 正确,非固定赔率)
---
- 年份提取从 `bet.match_time[:4]` 直接使用(日期统一后无需格式判断)
- `norm_year(t)` 简化为 `t[:4]`
- `norm_ym(t)` 简化为 `t[:7]`
- 同上简化
---
| 脚本 | 功能 |
|---|---|
| `scripts/full_threshold_report.py` | 阈值3~9详细投注报表(含赢半/输半/走水分类) |
| `scripts/yearly_investment_report.py` | 逐年投资分析报告(含最大回撤、月度分布、逐笔记录) |
| `scripts/league12_full_backtest.py` | 12联赛全模式批量回测 |
| `scripts/equity_chart.py` | 资金曲线图 + 最大回撤可视化(matplotlib) |
---
**范围**: 12联赛,亚盘顺追 (win_pan + lose_pan),2020-01-01 起,每注1000元
| 阈值 | 总注 | 总盈亏 | ROI | 全局最大回撤 |
|---|---|---|---|---|
| 3 | 11,204 | +55,760元 | +0.5% | 72,695元 |
| 4 | 5,325 | +76,530元 | +1.4% | 60,025元 |
| 5 | 2,550 | +142,070元 | +5.6% | 24,560元 |
| 6 | 1,284 | +103,030元 | +8.0% | 16,830元 |
| 7 | 667 | +59,975元 | +9.0% | 10,880元 |
| 8 | 350 | +36,830元 | +10.5% | 8,165元 |
| 9 | 188 | +24,025元 | +12.8% | 5,240元 |
**最大回撤发生时间(阈值5为例)**:
- 峰值: 2025-09-13,累计 +160,515元
- 谷值: 2026-03-22,累计 +135,955元
- 历时 245注 / 约6个月
**逐年 ROI**:
| 阈值 | 2020 | 2021 | 2022 | 2023 | 2024 | 2025 | 2026* |
|---|---|---|---|---|---|---|---|
| 3 | -1.1% | +2.2% | +1.2% | +2.8% | -0.9% | +0.3% | -4.1% |
| 4 | +0.2% | +7.2% | +0.9% | +3.7% | -0.4% | +0.7% | -8.6% |
| 5 | +1.8% | +9.4% | +5.9% | +9.4% | +8.1% | +0.2% | -2.5% |
| 6 | +1.6% | +13.9% | +10.3% | +13.1% | +10.0% | +4.4% | -16.0% |
| 7 | +13.6% | +10.5% | +12.4% | +12.4% | +4.6% | +10.2% | -22.5% |
| 8 | +21.5% | +14.5% | +21.0% | +4.4% | +11.2% | +6.4% | -46.8% |
| 9 | +39.4% | +16.5% | +16.8% | +11.7% | -1.4% | +1.0% | -4.5% |
> *2026年赛季未完,样本极少,不具参考价值
---
docs/
├── CHECKPOINT_2026_05_31.md ← 本文件
├── BACKTEST_AH_REAL_ODDS.md 真实赔率亚盘回测总结
├── yearly_reports/
│ ├── INVESTMENT_ANALYSIS.md 投资策略分析(含资金管理建议)
│ ├── 2020.md ~ 2026.md 逐年详细报告(含最大回撤、月度、逐笔)
├── threshold_reports/
│ ├── SUMMARY.md 阈值3~9汇总
│ └── 顺追_threshold03~09.md 每阈值详细投注记录
└── charts/
├── all_thresholds_equity.png 所有阈值资金曲线叠加
├── threshold_03~09_equity.png 单阈值详细图(含最大回撤标注)
└── drawdown_heatmap.png 逐年最大回撤热力图
---
七、数据库当前状态
项目 值 文件 `titan007-monitor/titan007.db` 总记录 88,290 条 联赛数 233 球队数 825 日期范围 2005-10-23 ~ 2026-05-25 日期格式 100% `YYYY-MM-DD HH:MM` 备份 `titan007.db.bak` (修复前)
---
八、待 Review 的关键代码
优先级高
1. `backtest/engine.py` — 核心回测逻辑,排序、过滤、连续计算
2. `backtest/strategies.py` — 水位计算(`ah + 1` 转欧赔)
3. `titan007/database.py:save_match()` — 日期归一化逻辑
优先级中
4. `scripts/equity_chart.py` — 最大回撤计算算法 `calc_dd_info()`
5. `scripts/yearly_investment_report.py` — 逐年统计与回撤计算
已知限制
- 2026年数据截至 2026-05-25,赛季未完
- 阈值9年均仅27注,统计显著性有限
- 水位数据覆盖率:阈值7-9为100%,阈值3-4约62%(使用固定赔率1.90兜底)