Phase 2 启动准备 + 接下来 30 天策略选型
Phase 间过渡的 release planning 方法、策略组合选型的「必做/不做」决策框架、paper trading 与实盘的 gap 识别原则
日期: 2026-06-08 方向: Phase 2 启动准备 阶段: Phase 1 → Phase 2 过渡 标签: #Phase2Prep #StrategySelection #InfraSetup #PaperTrading #WeeklyReview #Transition
今日目标
| 类型 | 内容 |
|---|---|
| 学习 | Phase 间过渡的 release planning 方法、策略组合选型的「必做/不做」决策框架、paper trading 与实盘的 gap 识别原则 |
| 实操 | 整理 Day 1-28 代码成模块化 repo、IB Gateway 自动启动配置、SQLite trade log 初始化、数据 cache 落地(SP100 / VIX / FRED)、Phase 2 资金分配方案敲定 |
| 产出 | TR-DAY30 笔记 + Phase 2 acceptance criteria 文档 + 准备清单 checklist + 每周 review 模板 + 风险预案表 |
一、Day 30 为什么是「过渡日」而不是「再多学一项」
1.1 一个常见的错误:把 Day 30 当成 Day 29 的延续
新手量化在 Day 30 这种节点有两种典型反应:
| 反应 | 表现 | 问题 |
|---|---|---|
| 「我再多学一个策略」 | 当晚翻论文找新因子 / 看 calendar spread | Phase 1 的方法论没沉淀,越学越浅 |
| 「我开始切实盘」 | 把 Day 28 双因子直接上 $5k 实盘 | 还没跑过 paper、没建立 review 机制 |
| 正确反应 | 停下来做 Phase 2 的 release planning | 30 天的输入需要 1 天的 staging |
Phase 1(Day 1-30)的本质是方法论:你学会了 IBKR、期权 Greeks、因子构建、回测框架、Wheel 结构、风控数学。但这些是「单点能力」。Phase 2(Day 31-60)的本质是实操化——把这些单点串成可运行的策略组合。
中间这一步不做,Phase 2 会有两种典型失败:
- 过载失败:同时开 4 个策略,全 paper trade,每天追不过来,2 周就放弃
- 方向漂移:每周心血来潮换策略,没有沉淀,最后什么也没学会
1.2 过渡日的产品类比
Day 30 是 MVP → Beta 之间的 release planning 会议。 不是写新功能,是定 acceptance criteria + 资源分配 + 风险预案。
| 软件 release planning | 量化 Phase 间过渡 |
|---|---|
| Sprint Goal | Phase 2 目标 |
| Backlog 优先级排序 | 策略候选「必做/不做」 |
| 资源 / 工时分配 | 资金 / 时间 / 注意力分配 |
| Definition of Done | Phase 2 出口标准 |
| Risk register | 风险预案表 |
| Retrospective cadence | 周复盘机制 |
下面 90% 的内容就是把这 6 项一项一项落实。
二、Phase 1 致谢段(短)
30 天结束,不晒 P&L,因为 paper 阶段 P&L 没意义。回顾过程产出:
| 产出 | 量化 |
|---|---|
| 学习笔记 | 30 篇 TR-DAY |
| 可运行的脚本 | 28 个(去掉 Day 21 / Day 29 两个复盘日) |
| 跑通过的 paper 仓位 | 6 张期权 + 4 个股票仓位 |
| 重要数学概念吃透 | Black-Scholes、Greeks、IC、IR、Sharpe、Kelly、CAPM、Fama-French |
| 工程能力 | ib_insync、yfinance、pandas、numpy、SQLite、cron 自动化 |
30 天的过程比结果重要:Phase 1 不产生 alpha,它产生「能识别 alpha 的能力」和「能识别自己错在哪里的能力」。这两件事是 Phase 2-4 真正的护城河。
回头看 30 天,最值钱的不是某一篇笔记,是这五条肌肉记忆:
- 「Theta 是友军,IV 是敌军」:Day 15-20 跑过 CSP/CC,知道时间费每天滴答到自己口袋的真实感觉,也知道 IV 突然上 5 个点对 short put 的杀伤力。这种感觉看书学不来,必须 paper 跑过。
- 「回测漂亮 ≠ 策略好」:Day 25-28 反复看到「同一组因子换一种调仓周期 Sharpe 从 1.8 跌到 0.6」,从此对漂亮回测保持警惕。
- 「单笔 max loss 是真实存在的数字」:Day 19 算 CSP max loss 的时候,第一次直观体感「卖一张 put 是有可能亏 $960」的,账户里就那么多钱,亏掉一笔的影响要心里清楚。
- 「自动化是纪律」:Day 1 配 IB Gateway 时觉得 cron 很麻烦,Day 30 反而觉得任何「需要每天手动跑」的策略都是不可持续的。
- 「先写下来再下单」:Day 20 的 thesis 模板,强制开仓前用一句话写明「我为什么要做这笔」,避免冲动交易。
这五条会沿用到 Phase 2-4,不需要再学一遍。
三、Phase 2(Day 31-60)全景:实操化的 4 周
3.1 一张图看完 Phase 2
Week 5 (Day 31-37) ── 多因子组合实盘化
└── Day 28 双因子 v1 → IC加权 + WFA + Paper部署
Week 6 (Day 38-44) ── 期权 Wheel 实战
└── 低价个股月度 CC + CSP, IWM/F/SOFI 池
Week 7 (Day 45-51)★ ── AI 信号(Claude + XGBoost + 期权)
└── 10-Q / 财报 sentiment → ML 排序 → 事件期权
Week 8 (Day 52-60) ── 组合管理 + 黑天鹅对冲 + Phase 2 总结
└── 三策略并行 + VIX 对冲 + 出口评审
为什么是 4 周不是 6 周:原本想把 Week 9(Day 61-67)也作为 Phase 2 的延展(多周期因子 + 跨资产 beta 中和),但和 Phase 3 的「实盘准备 + 黑天鹅 stress test」高度重叠。所以 Phase 2 砍到 4 周,节奏更紧凑,避免内容稀释。每个 Week 主题单一、出口清晰,是 Phase 2 节奏设计的核心原则。
3.2 Week 5(Day 31-37):多因子组合实盘化
| Day | 主题 | 核心产出 |
|---|---|---|
| 31 | Day 28 代码 production 化(拆 module / 加 logging) | factors/momentum.py + factors/lowvol.py |
| 32 | IC 加权动态权重 + 因子衰减分析 | IC 时序图 + 权重函数 |
| 33 | Walk-Forward Analysis 第一版 | WFA notebook + 滚动 IS/OOS 图 |
| 34 | Top-K / Bottom-K 投资组合构建 + 调仓周期决策 | 组合权重表 + 调仓日历 |
| 35 | Transaction cost model(佣金 + 滑点 + 借券) | TCA 函数 + Net Sharpe |
| 36 | Paper trade 自动化部署(cron + IB Gateway) | 定时 rebalance 脚本 |
| 37 | Week 5 复盘 + 双因子组合 v2 报告 | Week 5 retrospective |
Week 5 出口标准:双因子 paper 组合连续运行 ≥ 5 个交易日,每日 rebalance log 完整无人工干预。
3.3 Week 6(Day 38-44):期权 Wheel 实战
| Day | 主题 | 核心产出 |
|---|---|---|
| 38 | 标的池筛选(IWM + 5 只低价个股) | 标的池 csv + IV/OI/Earnings 表 |
| 39 | 月度 CSP 批量挂单脚本 | wheel/csp_batch.py |
| 40 | Assignment 自动检测 + CC 接替逻辑 | wheel/state_machine.py |
| 41 | Roll 决策树(50% rule / 21 DTE / ITM) | wheel/roll_logic.py |
| 42 | Wheel 组合 Greeks 聚合监控 | Greeks dashboard |
| 43 | 月度 P&L 归因(premium / capital appreciation / theta) | Attribution 表 |
| 44 | Week 6 复盘 + Wheel 实战手册 | Week 6 retrospective |
为什么不用 SPY/QQQ:SPY ≈ $580、QQQ ≈ $500,单张 CSP 锁 $58k/$50k,远超 paper $5k 配额。IWM(≈$220)单张锁 $22k 还是太大,所以 Phase 2 Wheel 以低价个股(F / SOFI / PLTR / INTC)为主,IWM 只做 1 张演示性 CSP 用于体感对比。
3.4 Week 7(Day 45-51)★ AI 信号 pipeline
这是 Phase 2 最重要的一周,也是 Phase 1 没碰过的全新方向。
| Day | 主题 | 核心产出 |
|---|---|---|
| 45 | LLM 提取 10-Q / 10-K 结构化字段 | llm/extract_filing.py |
| 46 | Earnings call transcript sentiment scoring | sentiment score 表 |
| 47 | LLM 输出 → 特征工程(数值化 / dummy / 时间衰减) | feature_engineering.py |
| 48 | XGBoost 排序模型 + IC / Top-Decile 检验 | model_v1.pkl + 评估报告 |
| 49 | 事件期权策略:earnings IV crush 套利结构 | trade structure 文档 |
| 50 | Paper 部署:LLM 信号 → 期权下单 | events/earnings_trader.py |
| 51 | Week 7 复盘 + LLM 信号 v1 报告 | Week 7 retrospective |
这周的核心难点不是 ML,是 LLM 输出的稳定性:同一份 10-Q,Claude 在不同 prompt / 不同时间会给不同 sentiment。Week 7 一半时间花在 prompt engineering 和 output validation 上。
为什么把 Week 7 标★:
- 这是作者 10 年金融 PM 经验里最稀缺的能力——传统金融机构没法做这件事(合规不允许 / 数据流不通 / 人才不混合),所以这件事是 Phase 2 真正的差异化竞争点。
- 这件事的副产品(LLM 提取金融文档结构化字段)可以直接复用到 Web3 治理提案分析、链上 RWA 资产披露分析,是跨方向的能力底座。
- Week 7 跑通的 pipeline 在 Phase 3 可以直接横向迁移到「Twitter 情绪 → 链上事件交易」「Discord 治理讨论 → DAO 提案做空/做多」等更多场景。
3.5 Week 8(Day 52-60):组合 + 对冲 + Phase 2 总结
| Day | 主题 | 核心产出 |
|---|---|---|
| 52 | 三策略相关性矩阵 + 资金再分配 | correlation 表 |
| 53 | 黑天鹅对冲:VIX call / put spread / tail hedge | hedge 策略选型 |
| 54 | 整体 Beta / Delta / Vega 聚合监控 | portfolio Greeks dashboard |
| 55 | Drawdown 应急预案 + 熔断规则 | risk_rules.md |
| 56 | Phase 2 paper P&L 归因 | attribution 报告 |
| 57 | 「实盘 - 回测 gap」分析方法论 | gap_analysis.md |
| 58 | Phase 2 面试题集(10 道,组合管理向) | interview_q.md |
| 59 | Phase 2 作品集 / Github push | repo release v0.2 |
| 60 | Phase 2 总结 + Phase 3 启动会 | TR-DAY60 |
四、Phase 2 出口目标(Definition of Done)
可量化、可验收,避免「感觉差不多了」的模糊判断。
| 编号 | 出口标准 | 验收方式 |
|---|---|---|
| DoD-1 | 3 个 paper 策略并行运行 ≥ 14 个交易日 | trade log 时间戳 + 仓位 snapshot |
| DoD-2 | 完整 LLM → ML → 下单 pipeline 走通 ≥ 1 次 | end-to-end log + 1 张实际开仓的事件期权 |
| DoD-3 | 风控守则文档(黑天鹅 / 仓位 / 相关性 / 熔断) | risk_rules.md ≥ 5 章 |
| DoD-4 | 周复盘机制连续执行 ≥ 4 周 | 4 篇 weekly retrospective |
| DoD-5 | 「实盘 - 回测 gap」识别方法论文档 | gap_analysis.md |
| DoD-6 | Repo 模块化 + 测试覆盖核心模块 | pytest 通过率 ≥ 80% |
| DoD-7 | Phase 2 面试题 ≥ 10 道,组合管理向 | interview_q.md |
不在出口标准里的事:
- ❌ paper P&L 必须为正(paper 表现不代表实盘,不作为出口条件)
- ❌ 切实盘交易(Phase 3 才考虑)
- ❌ Sharpe ≥ X(样本太小,不科学)
五、Phase 1 → Phase 2 准备清单(今天 + 本周末必做)
5.1 基础设施
| 项 | 状态 | 验证方式 |
|---|---|---|
| IBKR Options Level 2-3 已批 | ✓ | TWS Account → Permissions 显示 Level 2 |
| 市场数据订阅生效 | ✓ | OptionTrader 能看到实时 IV |
| IB Gateway 安装 | □ | ~/Jts/ibgateway/ 存在 |
| IB Gateway 自动启动配置(cron @reboot) | □ | crontab -l 显示启动行 |
| TWS / Gateway 自动登录(IBC 配置) | □ | 重启后无需手动密码 |
| SQLite trade log 数据库初始化 | □ | trade_log.db 存在且 schema 建好 |
requirements.txt 锁定版本 | □ | pip freeze > requirements.txt |
| Python 虚拟环境固化 | □ | .venv/ 或 conda env 可重建 |
5.2 代码 repo 整理
把 Day 1-28 的 28 个脚本拆成 5 个 production 模块:
trading_repo/
├── README.md # 项目说明 + Phase 2 路线图
├── requirements.txt # pinned deps
├── data/ # 数据获取层
│ ├── __init__.py
│ ├── ibkr_client.py # ib_insync 包装
│ ├── yfinance_loader.py # 历史数据
│ ├── universe.py # SP100 / SP500
│ └── cache.py # parquet 缓存
├── factors/ # 因子构建
│ ├── __init__.py
│ ├── momentum.py # Day 22-23
│ ├── lowvol.py # Day 24
│ └── combine.py # Day 27-28
├── backtest/ # 回测框架
│ ├── __init__.py
│ ├── engine.py # Day 25-26
│ ├── tca.py # transaction cost
│ └── wfa.py # walk-forward
├── risk/ # 风控
│ ├── __init__.py
│ ├── greeks.py # Day 15-19
│ ├── position_sizing.py # Kelly / vol-target
│ └── circuit_breaker.py # 熔断
├── journal/ # 交易日志
│ ├── __init__.py
│ ├── db.py # SQLite schema
│ └── attribution.py # P&L 归因
├── scripts/ # 一次性 / 定时脚本
│ ├── daily_rebalance.py
│ ├── monitor_greeks.py
│ └── eod_journal.py
└── tests/ # pytest
├── test_factors.py
└── test_backtest.py
| 任务 | 命令 / 动作 |
|---|---|
| 初始化 repo | git init trading_repo && cd trading_repo |
| 写 README(含 Phase 2 路线图) | vim README.md |
| 拆模块(28 个脚本 → 5 个 package) | 重构 + 跑 pytest 验证 |
加 .gitignore(排除 trade_log.db / .env / cache/) | vim .gitignore |
| Push 到 GitHub(私有 repo) | gh repo create trading_repo --private --push |
5.3 数据 cache
| 数据集 | 频率 | 存储 | 用途 |
|---|---|---|---|
| SP100 价格(OHLCV,10 年) | 日级 | data/cache/sp100.parquet | 因子回测 |
| SP500 价格(OHLCV,5 年) | 日级 | data/cache/sp500.parquet | 扩展 universe |
| VIX 历史 | 日级 | data/cache/vix.parquet | 黑天鹅信号 |
| IV surface(核心 20 标的) | 日级 | data/cache/iv/{ticker}.parquet | Wheel + 事件 |
| FRED 无风险利率(DGS3MO) | 日级 | data/cache/risk_free.parquet | BSM 定价、Sharpe |
| 财报日历 | 周更 | data/cache/earnings_calendar.csv | Wheel 避雷 + 事件期权 |
六、策略选型决策:5 个候选 → 3 个必做
6.1 候选与决策
| ID | 候选策略 | 决策 | 理由 |
|---|---|---|---|
| A | 动量 + 低波动双因子(Phase 1 v1 升级) | 必做 | Phase 1 已建完整框架,沉淀成本最低,是「Phase 1 工作的延续性证明」 |
| B | Wheel on 低价个股(CSP → assigned → CC) | 必做 | 期权能力闭环验证 + 现金流策略,与因子组合相关性低 |
| C | 财报 IV crush + LLM sentiment(Week 7) | 必做 | Phase 2 唯一的新方向,AI × 量化的核心实验 |
| D | Calendar spread / VIX arb | 不做 | 需要复杂 Vega 风控,Phase 3 再说 |
| E | A 股因子迁移 | 不做 | 数据源 + 交易接口复杂度爆炸,Phase 3 Week 11 再说 |
关于「不做」的进一步说明:
- 不做 D(Calendar spread / VIX arb):Calendar spread 的核心风险是 Vega term structure(近月 vs 远月 Vega 不同步),需要建一套 Vega curve 监控系统。Phase 2 的 Greeks 监控只到「聚合 Net Vega」这一级,不足以支撑日历价差风控。VIX arb 涉及 VIX 期货合约结构和 ETF 跟踪误差(如 VXX 的 contango drag),是一个独立的 4-5 天学习量。两个都放 Phase 3 Week 9-10。
- 不做 E(A 股因子迁移):A 股数据源(Tushare / AkShare)质量参差、API 限频严重、缺乏期权数据。交易接口(QMT / 同花顺 iFinD)和 IBKR 范式完全不同,需要重写一套 client。涨跌停制度、T+1、停牌频繁让因子回测假设全部失效。这件事独立做都要 30 天,不能并到 Phase 2。
- 隐藏候选 F(加密 funding rate arb):作者本职 Web3,理论上有优势。但 Phase 2 是「先把传统市场量化跑顺」,加密放到 Phase 4 和 Web3 主线汇合,避免精力分散。
6.2 三个必做策略的特征对比
| 维度 | A 双因子 | B Wheel | C 事件期权 |
|---|---|---|---|
| 资产类型 | 股票 | 期权(卖方为主) | 期权(买/卖混合) |
| 持仓周期 | 月度 rebalance | 月度 expiry | 事件后 1-5 天 |
| 现金流方向 | 资本利得 | premium 净收入 | 偶发大额 |
| 主要风险 | 系统性 beta + 因子失效 | 标的暴跌 + IV 飙升 | LLM 误判 + IV crush 反向 |
| Greeks 暴露 | Delta(基本对冲) | Theta+ Vega- Delta+ | Vega- Gamma 复杂 |
| 与 SPY 相关性 | 中等(市场 beta) | 中等(标的 beta) | 低(事件驱动) |
| 自动化程度 | 完全可定时 | 完全可定时 | 半自动(事件触发) |
组合互补性逻辑:A 提供 beta 暴露 + 因子 alpha,B 提供 theta 现金流 + 低相关性,C 提供事件驱动 alpha + LLM/ML 能力建设。三者相关性矩阵预估都在 0.5 以下,是合理的多策略组合。
七、资金配置(Phase 2 Paper Trading)
7.1 配额表
| 策略 | 资金配额 | 占比 | 说明 |
|---|---|---|---|
| 双因子组合(A) | $2,000 | 40% | 5-8 只股票,每只 $250-400 |
| Wheel(B) | $2,000 | 40% | 2 张 CSP(如 F + SOFI 各 1 张 ≈ $1,800 锁定) |
| 事件期权(C) | $1,000 | 20% | 单次开仓 ≤ $300,最多 3 笔并行 |
| 合计名义 | $5,000 | 100% | paper account 资金量 |
| 现金缓冲 | 超额部分 | — | paper 账户超出 $5k 的部分作为缓冲,不主动调用 |
7.2 配额边界规则
| 规则 | 阈值 | 触发动作 |
|---|---|---|
| 单策略 drawdown | ≥ 20% | 暂停该策略下单,进入复盘 |
| 单策略仓位 | 超过配额 110% | 拒绝新开仓 |
| 三策略合计 drawdown | ≥ 15% | Phase 2 暂停,召开评审 |
| 单笔最大 max loss | ≥ 配额 30% | 拒绝下单(CSP 单张 max loss 上限) |
| 相关性突变(30 日 ρ > 0.7) | — | 触发对冲检查 |
7.3 为什么是 40/40/20
- A 和 B 等权(40/40):Phase 1 已建立的能力,可信度高
- C 给 20%:新方向,先验证 pipeline 能跑通,不重仓
- 没有给 D/E 任何配额:避免「分散到没意义」
7.4 配额会不会动态调整
会,但有强约束:
| 调整时机 | 触发条件 | 可调幅度 |
|---|---|---|
| Week 6 末 | A 已连续运行 ≥ 10 个交易日 | A 配额 ±10% |
| Week 7 末 | C pipeline 全链路跑通 | C 配额可上调到 25% |
| Week 8 中 | 任一策略 drawdown ≥ 15% | 该策略配额砍半 |
| 紧急情况 | 黑天鹅事件 | 全部转现金缓冲 |
禁止的调整:
- ❌ 「这周 A 赚了就把 C 的钱挪给 A」(追涨)
- ❌ 「这周 B 亏了赶紧加仓」(摊薄)
- ❌ 「凭感觉调」
所有配额调整必须写进 weekly retrospective 的 ADR(Architecture Decision Record)字段,附 1-2 句理由。没写 ADR 就调,等于没调,下次复盘会回滚。
八、Phase 2 心态准备
8.1 三条必须刻在脑子里的纪律
| # | 纪律 | 反例 |
|---|---|---|
| 1 | paper 表现不代表实盘 | 「paper 跑了 2 周 Sharpe 3.5,赶紧实盘!」← Phase 3 才考虑 |
| 2 | 不要急着切实盘 | 任何 Phase 2 期间的切实盘冲动,先冷静 7 天再说 |
| 3 | 关注 gap,不关注 P&L | 重点不是赚了多少,是「为什么 paper 和回测差 X bp」 |
8.2 关于「想切实盘的冲动」
这条单独拎出来讲,因为它是 Phase 2 最大的隐性风险。常见诱因:
| 诱因 | 反驳 |
|---|---|
| 「paper 跑了两周都赚钱」 | 两周样本对应不到 10 笔独立交易,统计上没意义;并且 paper 的成交是 perfect fill,实盘有 1-3 bp 滑点 |
| 「我同事 / 老婆 / 朋友都开始实盘了」 | 别人的资金曲线是别人的,你不知道他的 max DD 期间是什么状态 |
| 「现在不上手会错过行情」 | 量化的 alpha 来源是「策略 × 时间」,不是「时间 × 时间」;3 个月后入场不会少赚长期回报 |
| 「paper 不够刺激了」 | 这是赌博心理在抬头,这条出现就是最大的红灯 |
预案:每次想切实盘,先回看本节的表格,再回看十一节的 Red 等级触发条件,至少冷静 7 天。如果 7 天后还想,写一份 1000 字的「为什么这次时机不同」的小作文,然后再决定。这个程序本身就能筛掉 90% 的冲动。
8.3 「实盘 - 回测 gap」是什么
回测时一切完美:成交价 = mid、滑点 = 0、佣金 = 0.005、IV 不变。Paper trading 暴露这些假设的破洞:
| Gap 类型 | 表现 | 应对 |
|---|---|---|
| 成交价 gap | 限价单不成交 / 成交在 ask | 改 marketable limit |
| 滑点 gap | 大单分拆后实际成本 > mid+spread/2 | TWAP / VWAP 拆单 |
| Latency gap | 信号→下单→成交有 3-30s 延迟 | pre-market 准备订单 |
| IV gap | 回测用 close IV,实际是 intraday | 加 IV percentile 监控 |
| 借券 gap | short leg 借不到 / 利率激增 | universe 加 hard-to-borrow 过滤 |
| 数据 gap | yfinance 历史和 IBKR 实时对不上 | 用 IBKR historical bar 校准 |
Phase 2 的价值就是把这些 gap 一个一个识别出来。这不是 paper 阶段的副产品,是 paper 阶段的主产品。
换个角度:Phase 2 出口时,如果你能写出一份 30 条以上的「我观察到的实盘-回测 gap 清单 + 已修复 / 待修复 / 不可修复」,这份清单本身就是 Phase 3 切实盘的安全边际。没有这份清单就敢切实盘的人,第一次黑天鹅来临时基本全军覆没。
九、每周一次的 review 制度
9.1 时间与节奏
每周日晚 9:30-10:00 PM,30 分钟,不超时。
不要做成 2 小时的「全面体检」,节奏会断。30 分钟版本:
| 时间 | 内容 | 输出 |
|---|---|---|
| 0-5 min | 翻本周 trade log(按时间序) | 心里有数 |
| 5-15 min | 跑 attribution 脚本,看每策略 P&L 来源 | attribution.png |
| 15-22 min | 检查 Greeks 暴露 + 策略相关性矩阵 | greeks_week.png |
| 22-30 min | 写 weekly retrospective(200-400 字) | weekly/WK{N}.md |
9.2 Weekly Retrospective 模板
# Week N Retrospective (YYYY-MM-DD ~ YYYY-MM-DD)
## 1. 本周事实
- 开仓 X 笔 / 平仓 Y 笔 / 现持仓 Z 笔
- P&L: $___(不重要,仅记录)
- 最大单笔盈利 / 亏损 / 它的归因
## 2. 实盘-回测 gap(核心)
- 本周发现的 gap:
- 已修复 / 待修复:
## 3. Greeks 与相关性
- 组合 Net Delta / Vega / Theta:
- 三策略 30 日相关性变化:
## 4. 决策错误
- 本周最大的判断错误 + 它属于(执行错 / 模型错 / 运气)
## 5. 下周一个动作
- 一句话写下「下周必须改的 1 件事」(不超过 1 件)
9.3 为什么是「一件事」
经典 retrospective 病:「下周要改 A、B、C、D、E」。结果一周下来 5 件都没改。强制只能 1 件,反而真能做到。第 8 周的 Phase 2 总结时,你会看到 4 件「真实改了的事」,比 20 件「想改的事」有用得多。
9.4 周复盘的 anti-pattern
下面几种复盘姿势是无效的,碰到要立刻停手:
| Anti-pattern | 表现 | 矫正 |
|---|---|---|
| 流水账复盘 | 「周一开了 A 仓 / 周二平了 B 仓 / 周三...」 | 不要流水,归因维度只看「策略 × P&L source」 |
| 情绪复盘 | 「这周亏太多了心情不好下周要扳回来」 | retrospective 不写情绪,只写事实 + 决策 |
| 追因子复盘 | 「为什么 momentum 这周失效了我要换一个」 | 单周样本不够推翻因子,最少 4 周才能讨论 |
| 完美主义复盘 | 30 分钟变成 2 小时,写 3000 字 | 严格 30 分钟限时,超时立刻停手 |
| 不做复盘 | 「这周太忙下周补」 | 复盘可以简短,不可以跳过;忙的那一周哪怕只写 100 字也要写 |
9.5 月度 review(Phase 2 内 2 次)
除了每周日,Week 5 末(Day 37)和 Week 8 末(Day 60)各做一次扩展 review,2 小时:
- 月度 attribution 全维度(按策略 / 按标的 / 按市场状态)
- 因子 / 信号衰减趋势
- 风控规则触发频次
- 下个月 ADR:要修改哪些规则、增加哪些监控、删掉哪些不用的代码
十、可能的卡点 + 预案
| 卡点 | 出现概率 | 预案 |
|---|---|---|
| LLM API 配额(Claude / GPT)用完 | 高 | 先用 Claude free tier,到额度 80% 切 OpenAI free,必要时月付 $20 |
| IBKR Paper 数据延迟 / 周末停摆 | 高 | 切到 historical replay 模式(yfinance + 历史 IV) |
| 工作日不在电脑前 | 极高 | 所有策略 cron 自动化,事件期权策略加 mobile push |
| 个人状态 burn-out | 中 | 每周一天「休息日」不看市场,强制 unplug |
| IB Gateway 异常断线 | 中 | 加 watchdog 脚本,每 5 min 检测 + 自动重启 |
| Wheel 标的暴雷(如 SOFI 财报暴跌) | 中 | universe 加 earnings 过滤,CSP 离财报 ≥ 7 天 |
| LLM 输出格式漂移 | 中 | 加 pydantic schema 校验 + 重试机制 |
| 实盘冲动 | 高 | 给自己写一封「未来 30 天不切实盘」的承诺信 |
| paper 账户 reset / IBKR 维护 | 低 | trade log 写本地 SQLite,不依赖 IBKR 端 |
| Python 环境损坏 | 低 | conda env export YAML,github 备份 |
关于 burn-out:Phase 1 30 天里,作者已经隐约感到周末做笔记的疲惫感。Phase 2 把每周日下午列为「不看盘日」(仅晚上 30 分钟做 review)。这不是软弱,是可持续节奏——量化是马拉松不是冲刺,能跑到 90 天的人是最终赢家。
10.1 关于 LLM 配额的更具体策略
Week 7 是 LLM 调用集中的一周。预估调用量:
- 10-Q / 10-K 提取:单份文档 30-50K tokens,每周 10-15 份
- Earnings call sentiment:单次 20-30K tokens,每周 8-10 次
- 模型迭代调试:约 30% 额外 tokens overhead
合计 Week 7 大约消耗 200-300 万 tokens。Claude Sonnet 大约 $30-50,GPT-4o 大约 $20-40。
应对优先级:
- 第一优先级:Claude / OpenAI free tier 用完前完成一轮 baseline
- 第二优先级:用本地小模型(Qwen 2.5 7B / Llama 3.1 8B)跑 sentiment baseline,作为 cost cap
- 第三优先级:必要时月付 $20(性价比最高的投入,相当于一顿饭)
记一笔账:Phase 2 整体预算上限 $100,所有外部 API(LLM + 数据源)共用,超出立刻 pause。钱不是问题,预算意识是问题——这是个人量化和机构量化最大的区别,机构看不到边际成本,个人必须看。
十一、Phase 2 周复盘的「红黄绿」健康度评分
不是每周都顺。设一个简单的 traffic light:
| 信号 | 含义 | 触发 |
|---|---|---|
| 🟢 Green | 全部正常,继续 | 三策略都在跑、gap 已知、心态稳定 |
| 🟡 Yellow | 有问题但可控,加强观察 | 某策略 drawdown 10-15% / 发现新 gap / 状态疲惫 |
| 🔴 Red | 必须 pause | 某策略 drawdown ≥ 20% / 系统性 bug / 连续 2 周不想做 review |
🔴 Red 时强制暂停 ≥ 3 天,不交易、不写代码、只做反思。这条规则的价值在 Phase 3 实盘时才完全显现,Phase 2 是建立肌肉记忆。
11.1 触发 Yellow / Red 后的具体动作
| 等级 | 强制动作 | 不可做的事 |
|---|---|---|
| 🟡 Yellow | 当周复盘篇幅 +50%(额外 100 字归因) / 下周配额冻结不调 | 不能加仓 / 不能开新策略 |
| 🔴 Red | 3 天 cooldown / 写 1 篇「失败复盘」≥ 500 字 / 召开和自己的「评审会」 | 不能交易 / 不能改代码 / 不能看实时行情 |
「和自己的评审会」听上去傻,但实际操作就是:
- 找一个安静的下午,关掉 IDE 和 TWS
- 打开当周 retrospective + 当月 attribution
- 用第三人称写一封信给「这位交易员」,分析他的决策链
- 信末写一句「如果是机构 LP,是否会继续配置给他」
这种刻意拉开距离的反思方式,对克服自我合理化(self-justification bias)极其有效。Phase 1 没机会用,但 Phase 2-3 一定会用到,今天先把流程写下来。
十二、PM 视角:Phase 间过渡 = release planning
12.1 把今天的工作翻译成 PM 语言
| 量化术语 | PM 术语 |
|---|---|
| Phase 1 → Phase 2 过渡 | MVP → Beta release planning |
| 策略选型「必做/不做」 | 功能优先级 P0/P1/P2 |
| Phase 2 出口标准 | Beta GA 的 acceptance criteria |
| 资金配额 40/40/20 | engineering capacity 分配 |
| 周复盘机制 | sprint retrospective |
| 实盘-回测 gap | 「production - staging」 environment drift |
| Red/Yellow/Green 健康度 | sprint health indicator |
| 风险预案表 | risk register / RACI |
12.2 PM 在这个节点的关键能力
- 拒绝的能力:今天最重要的产出不是「我要做 ABCDE」,是「我不做 DE」。资源永远有限,不会说不的 PM 是失败的 PM,不会说不的量化交易员是亏钱的交易员。
- acceptance criteria 写在前面:DoD-1 到 DoD-7 是今天写的,不是 Day 60 时回头补的。这能避免「感觉差不多了」的自我欺骗。
- 建立 ritual:周日晚 9:30 的 30 分钟 review 是 ritual。Ritual 的价值不是单次产出,是多次执行后形成的认知复利。这和 PM 的双周 review、月度 OKR check-in 一样。
- risk register 不是为了消灭风险:它的价值是「风险出现时,你不慌」。Phase 2 出现的任何 11 节里列的卡点,你都已经知道 next action 是什么。
12.3 一个反直觉的洞察:Phase 1 的失败案例比成功案例更有用
回看 30 天的笔记,那些「跑通后特别顺利」的脚本(比如 Day 5 的 OHLCV 抓取、Day 11 的 BSM 定价器)其实给 Phase 2 的指导有限。真正给 Phase 2 留下方法论的是那些卡过的地方:
- Day 14 的市场数据订阅卡了半天(subscription 没生效,API 返回 NaN),让 Phase 2 的「数据 cache + 双源校验」成为基础设施 P0;
- Day 25 的回测过拟合(IS Sharpe 2.4,OOS Sharpe 0.3),让 Phase 2 的 WFA 成为必须而不是可选;
- Day 28 的因子合成时发现「等权融合居然比 IC 加权效果更好」,让 Phase 2 的「先简单后复杂」原则写进 README。
Phase 2 设计时刻意保留 buffer 时间给「未来的失败」:每周留 1 天弹性日(不安排新内容),用于消化前面 6 天的意外卡点。这是 Phase 1 30 天里学到的最现实的项目管理智慧。
12.4 一句话总结
Phase 1 学方法论,Phase 2 实操化,过渡日是把方法论转成 acceptance criteria + 资源分配 + 风险预案的「release planning 会议」。今天最重要的产出不是写代码,是把「为什么这么做」「不做什么」「怎么验收」想清楚。
十三、明日(Day 31)任务
Day 31: Week 5 启动 — 多因子组合实盘化(IC 加权 / WFA / Paper 部署)
- 启动 Week 5,第一件事:把 Day 28 的双因子代码拆成 production module
factors/momentum.py(Day 22-23 的 6/12/Risk-Adj momentum 三种实现)factors/lowvol.py(Day 24 的 60-day realized vol + idiosyncratic vol 两种实现)factors/combine.py(Day 27-28 的等权 + IC 加权融合)
- 用 IC 时序图判断因子衰减,决定 Phase 2 用哪种加权
- WFA 第一版 notebook:滚动 12 个月 IS + 3 个月 OOS
- 输出:
factors/package 可 import + 一份 IC 衰减分析图
预计耗时:6h(重构 2h + WFA 框架 2h + IC 分析 1h + 笔记 1h)
Day 31 完成的硬标准:
-
from factors.combine import build_signal能在 notebook 一行 import - WFA 第一版能跑出 IS/OOS Sharpe 对比图
- 写下「Phase 2 用等权 or IC 加权」的决策 + 理由
-
git commit至少 3 次,commit message 符合「why-not-what」原则
如果 Day 31 当天没全做完,不要顺延到 Day 32,而是写入「Week 5 弹性日」消化。坚持节奏比追进度重要。
实际执行记录
启动一项填一项,时间戳 + 卡点。
14.1 准备清单(基础设施)
- (1) IB Gateway 安装 + 验证启动 ────────── time: __________
- (2) IBC 自动登录配置 ──────────────────── time: __________
- (3) cron @reboot 写入 IB Gateway 启动 ── time: __________
- (4) SQLite
trade_log.db初始化(schema:trade / position / journal 三表)── time: __________ - (5)
requirements.txt锁定 ─────────────── time: __________ - (6) 数据 cache 落地:sp100.parquet ────── time: __________
- (7) 数据 cache 落地:vix.parquet ──────── time: __________
- (8) 数据 cache 落地:risk_free.parquet ── time: __________
- (9) 财报日历 csv 落地 ─────────────────── time: __________
14.2 代码 repo 整理
- (10)
trading_repo初始化 + .gitignore ── time: __________ - (11) 5 个 module(data/factors/backtest/risk/journal)骨架 ── time: __________
- (12) Day 1-28 脚本 → module 迁移 ───────── time: __________
- (13)
pytest框架 + 第一个测试通过 ───── time: __________ - (14) README.md 写完(含 Phase 2 路线图) ── time: __________
- (15) Github private repo push ──────────── time: __________
14.3 决策固化
- (16) 策略选型决策签字:A/B/C 必做,D/E 不做 ── time: __________
- (17) 资金配额表 40/40/20 写入 risk_rules.md ── time: __________
- (18) Phase 2 DoD-1 ~ DoD-7 写入 phase2_doD.md ── time: __________
- (19) 周复盘模板写入
weekly/template.md── time: __________ - (20) 风险预案表写入 risk_rules.md ─────── time: __________
14.4 心态层面
- (21) 给自己写一封「未来 30 天不切实盘」的承诺信 ── time: __________
- (22) 标定每周日下午为「不看盘日」 ───── time: __________
- (23) 更新
docs/daily/TR_PROGRESS.md:Day 30 ✅ / Phase 1 ✅ / Phase 2 starting ── time: __________
14.5 卡点记录
| 时间 | 卡点描述 | 解决方式 / 待办 |
|---|---|---|
14.6 当天 Reflection(3 行内)
- 今日最大收获:
- 今日最大不确定:
- 明天第一件事:把 Day 28 双因子代码拆成
factors/package