Skip to content

Latest commit

 

History

History
121 lines (99 loc) · 10.1 KB

PROGRESS.md

File metadata and controls

121 lines (99 loc) · 10.1 KB

实现进度跟踪

与 docs/开发文档.md §10 实现顺序对齐。每完成一步标记 ✅,进行中标记 🔄,未开始为空。


Phase 1: 基础设施

步骤 内容 状态 备注
1 pyproject.toml — 依赖声明 ✅ hatchling 构建,含 pytest markers
2 config.py — 全部 dataclass(BacktestConfig, MAConfig, SignalConfig, PositionConfig, PositionTier, PositionInput, Regime 枚举, RiskOffConfig, StrategyConfig, SignalContext) ✅ 含校验逻辑,29 个单元测试通过
3 data/registry.py — 1x/2x/3x 全系列 ETF 元数据(含 financing_spread, total_return_index, fallback_dividend_yield) ✅ AssetMeta dataclass,13 个单元测试通过
4 data/downloader.py + data/cache.py — 数据下载与 Parquet 缓存 ✅ 含版本化 cache key (D1_S1_TR1),24h TTL
5 data/synthetic.py — LETF 合成重建(含融资成本建模、总回报口径处理) ✅ 三级口径处理,合成/真实合并,验证工具
6 test_synthetic.py — 合成 vs 真实数据验证 ✅ 22 个单元测试通过(含波动率损耗特性测试)
6.1 集成验证:下载全系列指数+ETF,合成 1993~2026-03-16 完整序列,Parquet 读写正常,合成 vs 真实验证(相关系数 >0.995) ✅ 数据已持久化到 data/raw/ + data/full/,详见 ISSUES.md #001

Phase 2: 均线与信号

步骤 内容 状态 备注
7 signals/ma.py — SMA/EMA/WMA 统一计算 + test_ma.py ✅ 17 个单元测试通过,与 pandas 内置函数交叉验证
8 signals/base.py — SignalGenerator Protocol ✅ runtime_checkable Protocol
9 signals/sma_bare.py — 裸均线信号 ✅ 支持 SMA/EMA/WMA,预热期输出 RISK_OFF
10 signals/sma_buffered.py — 非对称缓冲带信号 ✅ 状态机实现,支持非对称 buy/sell buffer
11 signals/composite.py — 信号组合器 ✅ 多信号取最保守 Regime
12 test_signals.py ✅ 37 个单元测试通过(Protocol验证+BareMA+BufferedMA+Bodyguard+Composite)
12.1 集成验证:用真实数据跑 SMA 信号,确认 1995-2025 产生约 7 次买卖循环 ✅ 4 个集成测试通过;实际 13 次买入循环(含 whipsaw),裸均线切换多于缓冲带

Phase 3: 仓位管理

步骤 内容 状态 备注
13 positioning/base.py — Allocator Protocol + PositionInput ✅ runtime_checkable Protocol
14 positioning/binary.py — 二元切换(多资产权重) ✅ 支持 RISK_ON/DOWNGRADE_TO_1X/RISK_OFF 三态
15 positioning/tiered.py — 阶梯式(多资产权重) ✅ 离散阶梯状,RISK_OFF/DOWNGRADE 覆盖偏离度
16 positioning/linear.py — 线性渐进(多资产权重) ✅ clamp 线性插值,RISK_OFF/DOWNGRADE 覆盖
17 positioning/factory.py — 工厂函数 ✅ 自动从 registry 解析 primary_1x
18 test_positioning.py ✅ 33 个单元测试通过(Protocol+Binary+Tiered+Linear+Factory)
18.1 集成验证:信号 → Allocator → 权重 dict,端到端数据流通畅 ✅ 2 个集成测试通过;Binary + Tiered 均验证真实 SPY 数据流

Phase 4: 回测引擎

步骤 内容 状态 备注
19 engine/portfolio.py — BacktestResult / Trade dataclass ✅ Trade(买卖循环) + BacktestResult(完整输出容器)
20 engine/backtest.py — 回测主循环 ✅ run_backtest() + create_signal() 工厂,含 shift(1) 前视偏差防护
21 engine/transition.py — 即时切换 / DCA 状态机 ✅ TransitionEngine 支持 immediate/dca_6mo/dca_12mo,含中途反转
22 test_engine.py ✅ 26 个单元测试通过(dataclass+Transition+Signal工厂+回测主循环)
22.1 集成验证:单策略完整回测跑通,输出 BacktestResult,净值曲线合理 ✅ 2 个集成测试(真实数据需 data/full/ + 合成 V 型走势);@pytest.mark.integration
22.2 属性测试:权重和为1、净值非负、无前视偏差等系统不变量 ✅ 6 个属性测试通过;@pytest.mark.property
22.3 极端输入测试:横盘/暴跌/极短数据/每日反转等边界场景 ✅ 7 个极端测试通过(含 DCA 过渡);@pytest.mark.extreme

Phase 5: 分析与报告

步骤 内容 状态 备注
23 analytics/metrics.py — 全套绩效指标 + test_metrics.py ✅ 32 个单元测试通过(收益/风险/风险调整/交易统计/基准比较)
24 analytics/drawdown.py — 回撤深度分析 ✅ 11 个单元测试通过(DrawdownEvent/回撤序列/Top-N/滚动MaxDD)
25 analytics/rolling.py — 滚动窗口分析 ✅ 8 个单元测试通过(滚动CAGR/Sharpe/MaxDD/Beta/Correlation)
26 analytics/crisis.py + analytics/comparison.py ✅ 11 个单元测试通过(4预定义危机窗口/对比表/DataFrame构建)
27 reporting/terminal.py — Rich 终端输出 ✅ 5 个单元测试通过(策略摘要/对比表/危机表/回撤表不崩溃)
28 reporting/charts.py + reporting/html_report.py ✅ 5 个单元测试通过(Plotly Figure生成/HTML文件写出)
28.1 集成验证:回测结果 → 全套指标 → 终端输出,数值与手算一致 ✅ 3 个集成测试通过(手算验证+终端输出+端到端全流程);@pytest.mark.integration

Phase 6: 集成

步骤 内容 状态 备注
29 cli.py — CLI 入口(typer)+ __main__.py ✅ YAML 解析 + 数据加载 + 回测编排 + 终端/HTML 输出
30 configs/default.yaml — 完整策略组合配置 ✅ 5 个策略: binary/tiered/linear × buffered/bare × immediate/dca
31 端到端测试 ✅ 9 个集成测试通过 (YAML解析6 + E2E回测3); @pytest.mark.integration
31.1 建立 Golden File 基线:固定数据+配置+预期输出,存入 tests/golden/ ✅ 3 个 golden 测试通过 (binary/tiered/linear); @pytest.mark.golden

Phase 6.5: 详尽分析报告

步骤 内容 状态 备注
32 reporting/static_charts.py — matplotlib 静态 PNG 图片 (9 函数) ✅ 12 个单元测试通过
33 reporting/json_report.py — JSON 结构化导出 ✅ 6 个单元测试通过
34 reporting/markdown_report.py — Markdown 摘要(含自动发现) ✅ 5 个单元测试通过
35 reporting/html_report.py 增强 + reporting/charts.py 新增 Plotly 图表 ✅ generate_full_html_report() + 5 个新 Plotly 函数
36 reporting/report_engine.py — 报告编排层 ✅ 一站式生成 HTML/JSON/MD/PNG
37 cli.py — 新增 --output-dir 参数 ✅ 向后兼容:无 --output-dir 时走旧流程
38 测试 ✅ 28 个新测试 (23 unit + 5 integration)

Phase 7: 高级信号

步骤 内容 状态 备注
39 signals/vix_killswitch.py — VIX RSI 熔断 待实现
40 signals/macd_confirm.py — 周线 MACD 确认 待实现
41 signals/bodyguard.py — 泡沫偏离保镖 ✅ 10 个单元测试通过;支持自定义 bodyguard_source;Golden 回归通过
41.1 回归验证:每新增信号后跑 Golden File 回归测试 ✅ 3 个 golden 测试不受影响(bodyguard 为新增信号类型)
41.2 Composite 信号 YAML 支持 ✅ config.py/cli.py/backtest.py 支持 composite 方法解析 + sub_signals

实验记录

参数调优实验归档于 docs/实验记录.md。每次实验完成后在此更新索引。

编号 日期 主题 结论
001 2026-03-17 缓冲带宽度:+4%/-3% vs 5%/5% 保留 +4%/-3% 为默认;QQQ 信号源场景可考虑加宽
002 2026-03-18 更紧卖出缓冲:+4%/-3% vs +4%/-2% 保留 +4%/-3% 为默认;+4%/-2% 在 V 型反转场景更优但交易频率更高
003 2026-03-18 Risk-off 资产:基线 vs 全 SPY vs 全 QQQ 建议纳指系策略 risk-off 改为 SPY;SPY 风险调整收益全面优于 QQQ
004 2026-03-18 Risk-off = 现金 (0% 年化) cash 危机保护最强(08年仅-23%);Binary策略+cash最佳;Tiered/Linear用SPY更优
005 2026-03-18 4种LETF × 1x/cash (binary) QLD→cash综合最优(Sharpe 0.67, CAGR 24.65%); 2x全面优于3x风险调整; cash均优于1x
005c 2026-03-18 同005但仅2010后真实数据 1x反超cash(长牛无深度崩盘); QLD→QQQ最优(Sharpe 0.85); TQQQ→QQQ CAGR 36.68%
006 2026-03-18 信号源: SPY vs QQQ × TQQQ/QLD × 1x/cash SPY信号全面碾压QQQ信号(少whipsaw); 13次交易vs25次; 建议纳指系统一用SPY信号
007 2026-03-18 缓冲带全排列 +2~+5/-2~-5 (16组合) +4/-2 Sharpe最高(0.68); +4/-3综合最优(100%胜率); 保留+4/-3为默认
008 2026-03-18 SMA窗口期 100/150/200/250/300 SMA-200全面最优(Sharpe 0.67, CAGR 24.65%); SMA-100最差(whipsaw过多); 保留200为默认
009 2026-03-18 Bodyguard阈值 downgrade×exit (10组合) 所有bodyguard组合均优于基线; bg 20/35 MaxDD最低(-41%); bg 35/45低换手最佳折中; 推荐启用
010 2026-03-18 DCA过渡 immediate/6mo/12mo × cash/QQQ immediate→cash全面碾压; DCA拖累收益和风控; QQQ risk-off不推荐; 保留immediate+cash
011 2026-03-18 佣金滑点敏感度 0/5/10/20 bps 策略对成本几乎免疫(20bps仅-0.40pp CAGR); 13次交易天然低成本; 可忽略
012 2026-03-18 多LETF分散组合回测 分散不提升Sharpe; 集中QLD更优
013 2026-03-18 分散组合2010后真实数据 BG未触发; 相对排名不变
014 2026-03-18 LETF B&H vs SMA策略 — 泡沫后起点 SMA择时是杠杆ETF的必要前提
015 2026-03-19 Walk-Forward 过拟合检验 (168组合=7 SMA×2杠杆×2 RO×3 BG×2缓冲) 策略未过拟合; SMA200是折中最优(前半段偏250+后半段偏175); QLD+cash鲁棒; 保留策略B