Phase 3 启动准备 + 实盘前最终 Checklist
Phase 3 启动准备 + 实盘前最终 Checklist
日期: 2026-07-08 方向: Phase 2 → Phase 3 过渡 阶段: Phase 2 收官 / Phase 3 准备 标签: #Phase3Prep #LivetradePrep #Checklist #RiskManagement #SimToReal #EmergencyPlan
今日目标
| 类型 | 内容 |
|---|---|
| 反思 | Phase 2 60 天回顾 + Sim→Real 之间真正的差异在哪里 |
| 规划 | Phase 3(Day 61-90)四周路线图 |
| 执行 | 完成「实盘前 7 项 must-have」+ 入金 $1,000 + 应急预案落地 |
| 产出 | 实盘 readiness 报告 + 第一笔实盘交易设计文档 + 一封给自己的信 |
一、过渡日的意义:为什么 Day 60 不能用来「再写一个策略」
Phase 1(Day 1-30)解决「能不能跑通」,Phase 2(Day 31-60)解决「跑通的东西能不能稳定」,Phase 3(Day 61-90)要解决的是**「能不能用真钱跑」**——这是整个 90 天里最大的一次跨越,比从「没写过代码」到「写出第一个策略」还要陡。
为什么?因为 Phase 1→2 是技术问题(能不能 work),Phase 2→3 是心理 + 合规 + 不可逆资金流问题。技术问题可以反复迭代,资金流入实盘账户的那一刻:
- 滑点不再是回测里假设的 1bp,是真实的 2-5bp
- fill rate 不再是 paper trade 默认的 100%,是 80-90%
- 心理不再是「-1% 没感觉」,是「每个 -1% 都心疼」
- 监管不再是抽象的,是 W-8BEN / 1099 / 海外资产申报的真实义务
一句话:Phase 2 → Phase 3 不是「策略上线」,是「人 + 系统 + 资金 + 合规」四条管道首次同时通电。
所以 Day 60 不应该被用来再写一个策略,也不应该被用来再回测一遍。今天的任务只有两个:(a) 把过去 60 天能 carry over 的全部确认;(b) 把不该 carry over 的全部识别出来并 cut 掉。
二、Phase 3 全景(Day 61-90)
2.1 四周路线图
| Week | Days | 核心主题 | 关键产出 |
|---|---|---|---|
| Week 9 | Day 61-67 | IBKR 实盘上线 — $1k 起步保守 Wheel | 第一笔实盘 CSP 成交记录 + W-8BEN 验证 + cash 通道跑通 |
| Week 10 | Day 68-74 | Vol arb / Calendar / Diagonal / LEAPS | 期权波动率套利策略 + IV vs RV 分析 + LEAPS 配置 |
| Week 11 | Day 75-81 | qlib + AKShare A 股迁移 / 港股 / 可转债 | 多市场扩展 + 因子在 A 股复现 + 可转债基础 |
| Week 12 | Day 82-90 | 自动化 cron / 告警 / 月度报告 / 90 天回顾 | 完全自动化运维 + Phase 1-3 复盘文档 |
2.2 每周的「失败前置条件」
Phase 3 跟 Phase 1/2 最大的区别是:前面有 hard gate。Week 9 的 gate 没过,Week 10 就不能开始;Week 10 没稳,Week 11 不能开新市场。
| Week | 进入下一周的必要条件 |
|---|---|
| 9 → 10 | 实盘 ≥ 4 笔 CSP 完整周期跑完,无系统故障,账户净值波动 < 5% |
| 10 → 11 | Vol 策略至少 2 周观察期,相关性矩阵稳定,最大回撤 < 8% |
| 11 → 12 | 多市场至少 1 个新策略 paper trade 通过 |
| 12 → Phase 4 | 完整月度报告产出,可以解释每一笔盈亏来源 |
关键认知:Phase 3 不是 sprint,是 staged rollout。每一周都是一个 release gate,过不了就回到上一周,不许跳级。
三、实盘前的「7 项 Must-Have」 Checklist
这一节是今天的核心。全部 ✅ 之前不能入金、不能下第一笔单。
3.1 完整清单
| # | Must-have | 验收标准 | 状态 |
|---|---|---|---|
| 1 | Paper Trade ≥ 4 周连续运行无 crash | 30 天日志,至少 0 次进程被 OOM kill / 异常退出 | [ ] |
| 2 | 三策略相关性矩阵稳定 | Wheel × Momentum × Mean Reversion 两两相关性 30 天滚动 |ρ| < 0.5 | [ ] |
| 3 | Greeks 监控自动化 ≥ 2 周 | Delta/Gamma/Theta/Vega 每 5 分钟入库 + 阈值告警跑通 | [ ] |
| 4 | 错误恢复 + 重连测试通过 | 主动 kill IB Gateway 后脚本能在 60 秒内重连并恢复持仓上下文 | [ ] |
| 5 | SOP 文档完成(Day 57) | 开盘前 / 盘中 / 收盘后 / 周末 四套操作手册可执行 | [ ] |
| 6 | 税务规划(W-8BEN 已填 + 资金通道清晰) | W-8BEN 表格 IBKR 后台显示 "Approved";入金/出金路径写下来 | [ ] |
| 7 | 心理准备(接受第一笔亏损) | 写一份「如果第一笔单亏 -3% 我会做什么」的预案 | [ ] |
3.2 为什么是这 7 项,不是 5 项也不是 12 项
- 1 + 4 是「系统稳定性」轴:连接稳定 + 故障恢复——任何一项不过,实盘第一周就可能因为意外事件爆仓。
- 2 + 3 是「风险可见性」轴:策略间相关性 + Greeks——没有这两项你不知道自己在承担什么风险。
- 5 是「人 + 流程」轴:SOP——保证你在情绪化的时候还能按规矩做事。
- 6 是「合规」轴:税 + 资金通道——不解决会在出金时让你血压飙升。
- 7 是「心理」轴:心态预案——量化新人 90% 的爆仓不是策略错,是第一笔亏损后乱加仓。
少一项都不行。多一项(比如「写完 12 个策略才上线」)会让你永远不上线——这本身就是另一种失败。
3.3 验收方式
每一项配一个「能放在评审会上展示的证据」:
| Item | 评审证据 |
|---|---|
| 1 | systemd status 截图 + journalctl --since "30 days ago" 0 个 ERROR |
| 2 | 一张相关性矩阵图(30 天滚动) |
| 3 | InfluxDB / SQLite 表 + Grafana 告警历史 |
| 4 | 故障演练日志(at least 3 次主动 kill 测试) |
| 5 | Markdown SOP 文档 4 份 |
| 6 | IBKR 后台截图(W-8BEN Approved)+ 资金路径图 |
| 7 | 写给自己的信(见 Day 60 末尾) |
四、实盘 vs Paper 的关键差异(必须正视)
| 维度 | Paper Trading | 实盘 | 影响 |
|---|---|---|---|
| 滑点 | 默认按 mid price 成交 | 真实 bid-ask 2-5 bps;流动性差时 10+ bps | 期权策略 Theta 收益的 30% 可能被滑点吃掉 |
| Fill rate | 100%(任何 limit 都假设能成) | 80-90%(限价单可能挂一天不成) | 多腿策略一腿不成另一腿裸奔 → 风险敞口失控 |
| 延迟 | 模拟即时 | 行情延迟 + 网络延迟 + IBKR queue 200-500ms | 信号失效;不要做需要 <1s 的策略 |
| Partial fill | 不存在 | 100 张订单可能成交 73 张 | 仓位管理必须按实际成交量重算 |
| Borrow 拒单 | 总是允许 short | HTB(hard to borrow)股直接拒 | short 策略要预先查 ETB list |
| 盘前盘后 | 通常不支持 | 支持但流动性极差 | 不要在盘前盘后执行算法 |
| 心理 | 没感觉 | 每个 -1% 都心疼,每个 +1% 都想加仓 | 90% 的新手败在这里 |
| 监管 | 无 | W-8BEN + 1099 + 海外资产申报 | 没做合规出金时会卡 |
4.1 怎么把这些差异提前对冲掉
| 差异 | 对冲方法 |
|---|---|
| 滑点 | 回测时把 1bp slippage 加成 5bp;用 marketable limit(mid ± 50% 价差)而不是 market |
| Fill rate | 限价单加 timeout(5 分钟没成 cancel + 重报);多腿策略用 combo order 一次性下 |
| 延迟 | 不做 <1 分钟周期的策略;信号生成和下单分两段,下单前再确认一次条件 |
| Partial fill | 用 Order.totalQuantity 和 Order.filledQuantity 实时对账 |
| 心理 | 仓位强制小($1,000 起步),第一周不许加 |
| 合规 | 第一天就把 W-8BEN 和入金路径走通;不要等盈利了才想出金问题 |
五、资金转移流程(第一笔 $1,000)
5.1 为什么是 $1,000 不是 $5,000 也不是 $10,000
| 金额 | 优势 | 劣势 | 选/不选 |
|---|---|---|---|
| $500 | 损失最小 | 期权 CSP 都买不起一张 SPY/IWM 替代品 | ✗ |
| $1,000 | 最小可行 — 能跑 1 张 IWM/XLF CSP,亏完不致命 | 仅够单策略 | ✓ |
| $5,000 | 三策略并行 | 第一笔就 $5k,心理负担大 | 暂缓 |
| $10,000 | 满血量化 | 90% 概率第一个月被自己心理打败 | 绝对不 |
核心原则:第一笔实盘资金 = 你能心平气和接受 100% 亏掉的金额。不是「应该不会亏完」,是「亏完了我没事」。$1,000 对一个有稳定收入的金融 PM 是合理基线。
5.2 流程
入金 IBKR $1,000
↓
检查 W-8BEN 状态(IBKR Client Portal → Settings → User Settings → Tax Forms)
- 必须显示 "Active" / "Approved"
- 没填的话本步必须先停下来填掉
↓
入金通道(中国大陆居民)
Option A: 香港 HKD 账户 → IBKR HK
Option B: 海外 USD 账户 → IBKR US/SG/HK
Option C: 第三方合规出入金通道
↓
等待 T+2 / T+3 到账(电汇通常 1-3 工作日)
↓
IBKR 后台显示 Cash Balance $1,000
↓
检查:
☐ Buying Power 显示正确(Cash 账户应该 = Cash 余额)
☐ Account Type = Cash(不是 Margin)
☐ Options Trading Level ≥ 2
☐ Market Data 订阅 Active
↓
Ready for first trade
5.3 几个容易踩的坑
| 坑 | 说明 | 规避 |
|---|---|---|
| 入金被退回 | 发起方账户名 ≠ IBKR 账户名 | 必须同名汇款 |
| 资金到账但不可交易 | First Deposit Hold(首次入金可能 hold 3-5 天) | 提前 1 周做,不要 Day 61 才入 |
| W-8BEN 过期 | 有效期 3 年,过期后预提税立刻变 30% | 日历提醒 |
| 出金需要原路返回 | 入金哪来出金回哪去 | 用一个长期会用的中介账户 |
六、第一笔实盘交易的设计(强烈保守)
6.1 设计原则
第一笔实盘交易的目的不是赚钱,是走完整个 lifecycle 并产生真实数据。
6.2 具体设计
| 项 | 设置 | 理由 |
|---|---|---|
| 策略 | Wheel 后半段的 Cash-Secured Put(CSP) | 风险最 defined:最坏情况就是被 assigned 拿到正股 |
| 标的 | IWM 或 XLF(约 $40 strike 段) | 比 SPY 便宜,1 张合约 $4,000 名义值 ≈ 账户 4 倍杠杆,但因为 cash-secured 实际占用 $4,000,所以现金不够 → 用 $1,000 做不了 100 股 IWM |
| 修正 | 标的改为 $10-$15 段的低价 ETF(如 SLV、GDXJ)或股票 | 1 张 CSP 占用 $1,000-$1,500,刚好打满账户 |
| DTE | 30 天 | 平衡 Theta 衰减速度和事件风险 |
| Delta | 0.20 | 被 assigned 概率 ~20%,premium 适中 |
| 数量 | 1 张 | 极小仓位 |
| 预期 premium | $30-$60(账户 3-6%) | 月度 |
| 退出条件 | 1) 提前 50% 收益平仓;2) 到期被 assigned 进 Wheel 下半段 CC;3) DTE=7 还 ITM 主动 roll | |
| 执行时间 | 美东开盘 30 分钟后(避开开盘混乱) | |
| 下单类型 | Limit @ mid price,5 分钟超时重报 | 不用 market |
6.3 第一笔单的「不许」清单
- ❌ 不许下 market order
- ❌ 不许在波动率高于 30 的当天开新仓
- ❌ 不许在标的财报前 5 天内开仓
- ❌ 不许同时下多笔
- ❌ 不许「这个看着不错再加一张」
这是 Day 62 的实操,今天先把设计写下来。
七、「不该 carry over 到实盘」的几个 Paper 习惯
Paper trading 60 天会自动养成一些坏习惯,必须在 Day 60 cut 掉。
| Paper 习惯 | 为什么 paper 里 OK | 为什么实盘里有毒 |
|---|---|---|
| 月初一次性满仓 | 反正不会亏真钱 | 进场时间风险集中;单点 entry 影响月度收益分布 |
| 忽略数据延迟 | Paper 数据本来就是近实时 | 实盘行情可能晚 200-500ms,决策完发现已变 |
| Over-trade(看到信号就下) | 不要钱 | 佣金 + 滑点 + 心理疲劳 |
| 「paper 都赚了所以加仓」 | 自欺欺人 | 这是新手爆仓最常见的路径 |
| 不记录每笔交易理由 | 不影响 | 实盘必须每笔记录,否则复盘失效 |
| 接受任何 fill price | Paper 给 mid | 实盘 mid + 5bp 可能让月度收益归零 |
| 不看费用账单 | Paper 不收 | 实盘月底佣金/利息/数据费要扣 |
7.1 强制纠正机制
针对每个坏习惯加一条硬性规则进 SOP:
SOP-A1: 任何新仓不得在月初前 3 个交易日开(强制错峰)
SOP-A2: 任何 market order 必须二次确认(界面 / 脚本都加)
SOP-A3: 每笔交易必须填 trade journal(symbol/reason/exit plan/risk)
SOP-A4: Limit 单 mid ± 50% 价差为外限,超出必须人工审批
SOP-A5: 每月 1 号 generate 上月 commission/fee report
八、应急预案(Emergency Response Plan)
这是 Phase 3 整个阶段的最高优先级文档,比策略本身重要。
8.1 触发条件 → 响应矩阵
| 事件 | 触发条件 | 立即响应 | 24h 内动作 |
|---|---|---|---|
| 市场大跌 | 大盘单日 -5%+ | 1) 暂停所有新仓 2) 关 cron 自动开仓 3) 不动现有仓位 | 复盘是否需要减仓 |
| VIX 飙升 | VIX > 30 | 1) 暂停 vol 卖方策略 2) 已开仓位检查 Vega 暴露 | 减 Vega 暴露 50% |
| 单笔大亏 | 单笔亏损 > 5% 账户 | 1) 立即平掉该仓位 2) 暂停 24h 不许下新单 3) 写复盘 | 复盘后才能恢复 |
| IBKR 系统错误 | 任何 error code / 持仓不一致 | 1) 立即停脚本 2) 电话 IBKR 客服 3) 不许手动操作 直到客服确认 | 等客服 ticket 关闭 |
| 网络中断 | API 心跳失败 > 5 分钟 | 1) 切手机热点 2) 用 Client Portal Web 查持仓 3) 必要时手动平 | 复盘断网根因 |
| 个股黑天鹅 | 持仓股盘前 -20%+ | 1) 等开盘 30 分钟稳定 2) 平仓而非 hold | 写黑天鹅复盘 |
| 被监管告知违规 | 任何 IBKR 邮件 / 限制 | 1) 立即停所有交易 2) 联系合规 / 律师 | 处理完再恢复 |
8.2 「关机按钮」(Kill Switch)的设计
实盘必须有一个所有人能在 30 秒内执行的 kill switch:
# kill_switch.py - 紧急情况下手动 / 脚本调用
def emergency_shutdown(ib, reason="manual"):
"""
1. 取消所有未成交订单
2. 关闭所有仓位(按 market order,因为是紧急情况)
3. 断开 API 连接
4. 写一条 EMERGENCY log
"""
# 1. 取消所有挂单
for order in ib.openOrders():
ib.cancelOrder(order)
# 2. 平掉所有持仓
for pos in ib.positions():
contract = pos.contract
qty = pos.position
order = MarketOrder('SELL' if qty > 0 else 'BUY', abs(qty))
ib.placeOrder(contract, order)
# 3. 等待成交
ib.sleep(10)
# 4. 断开
ib.disconnect()
# 5. 日志
log_emergency(reason)
注意:kill switch 用 market order 是有意为之——紧急情况下不在乎滑点,只在乎能不能立刻清仓。这个 trade-off 必须在事前想清楚。
8.3 应急联系信息表(贴在桌前)
| 角色 | 联系方式 |
|---|---|
| IBKR 客服(24h) | +1-877-442-2757 (US) / +852 2156 7907 (HK) |
| IBKR 紧急 trade desk | (账户开通后获取专属电话) |
| 个人合规顾问 / 税务 | (如果有) |
| 自己的「冷静伙伴」 | 出大事时打电话让他帮你判断要不要按 kill switch |
九、税务记录从 Day 1 开始
很多新手等到第一年报税才意识到:没有原始记录就完了。
9.1 美股期权税务的核心区别
| 类型 | 持仓期 | 税率 | 1256? |
|---|---|---|---|
| Short-term capital gain | < 1 年 | 普通所得税率 | 否(个股期权) |
| Long-term capital gain | ≥ 1 年 | 长期资本利得(更低) | 否 |
| Section 1256 contracts | 任何 | 60% LT + 40% ST(混合) | 是(如 SPX 指数期权) |
关键:SPX 等 1256 合约的税率结构对长期对你有利。如果做指数期权,优先选 SPX(1256)而不是 SPY ETF 期权(非 1256)。
9.2 中国大陆居民的特别情况
| 项 | 美国侧 | 中国侧 |
|---|---|---|
| 股息预提税 | 30%(W-8BEN 后) | 已在源头扣,国内不重复 |
| 资本利得 | 0%(非美国人不征) | 理论上要并入综合所得申报,实际很少有人申报 |
| 海外资产申报 | - | 年度 ≥ $50k 等值需申报(CRS) |
| FBAR | 仅美国税务居民需要 | 不适用 |
我不是税务顾问,以上是常识级理解,实操前咨询专业人士。
9.3 用 IBKR FlexQuery 自动拉
IBKR 提供 FlexQuery 接口可以自动拉每笔交易:
Client Portal → Reports → Flex Queries → Create Flex Query
- Trades (含 commission, P&L, holding period)
- Cash Report
- Open Positions
→ 配置成 daily auto-run
→ 用 API 拉成 CSV 入库
→ 月底自动生成税务报告
Day 60 不用马上配,但要记下:实盘第一天就要开始拉 FlexQuery,否则一年后补不回来。
十、本日 Actionable Items
按这个顺序做:
- (0) 完整读完本笔记
- (1) 走完 7 项 must-have checklist,每项要么 ✅ 要么 fix 后再 ✅
- (2) 写出今天的应急预案 cheat sheet(A4 一张,贴显示器旁)
- (3) kill switch 脚本写一版,paper 测试触发,看清空逻辑无误
- (4) 检查 W-8BEN 状态(IBKR 后台截图存档)
- (5) 向 IBKR 账户入金 $1,000(如果资金通道还没确认,今天先确认通道)
- (6) 用 FlexQuery 配置一个 daily Trades 报告(先空跑)
- (7) 给自己写「实盘第一天」的信(见 §11)
- (8) 更新
docs/daily/TR_PROGRESS.mdDay 60 标 ✅ - (9) 把第一笔交易设计(§六)打印出来贴在桌前
- (10) 通知自己:明天 Day 61 起,规则变了
十一、Phase 3 心态守则(贴墙)
1. 实盘不是「证明能赚钱」,是「学习实盘行为」
2. 第一个月预期:盈亏平衡 + 学到滑点 / 心理偏差
3. 不要追求年化高,追求「可持续 + 可复盘」
4. 每一笔交易都要能回答三个问题:
(a) 我为什么进?(b) 我什么时候出?(c) 错了我怎么办?
5. 亏损是数据,不是失败——失败是「没记录、没复盘、没学到」
6. 第一个月不许加仓,无论盈亏
7. 任何「让我再加一张」的冲动 → 写下来 → 等 24 小时
8. 每天 SOP 必须做完才能下单,没做完就关电脑
11.1 「实盘第一天」给自己的信(模板)
Dear [你的名字],
今天是你的实盘第一天,你账户里有 $1,000。
如果一年后你回头看这封信,可能有三种情况:
(a) 你赚了 5%-10%,并且每一笔都知道为什么。这是最好的情况。
(b) 你亏了 5%-10%,但写了完整的复盘文档。这也算成功。
(c) 你赚了或亏了 30%+,但说不清原因。这是失败的——
无论 P&L 是正是负。
请记住:
- 你过去 60 天的学习不是为了今天就开始赚钱,
是为了 5 年后能稳定地从这个市场拿到合理回报。
- 第一笔亏损是必然的,不要因此动摇。
- 第一笔大盈利更危险——容易让你觉得自己很懂,
其实你只是运气好。
- 如果某一天你想关闭这个项目,
先读一遍这封信再决定。
Day 60 的你
2026-07-08
十二、PM 视角:Production Launch 的通用法则
今天做的所有事都可以抽象成一个 PM 都该懂的模式:Production Launch = 准备清单 + 应急预案 + 回滚方案 — 三者缺一不可。
| 维度 | 我们的实盘 | 任何 SaaS Launch | 银行新系统上线 |
|---|---|---|---|
| 准备清单 | 7 项 must-have | Pre-launch checklist | UAT 验收清单 |
| 应急预案 | §8 应急矩阵 | Incident response runbook | 业务连续性预案 |
| 回滚方案 | Kill switch + 平仓 | Feature flag + rollback | Fall-back to legacy |
| 灰度 | $1k → $5k → 满仓 | 1% → 10% → 100% | 试点支行 → 区域 → 全国 |
| 监控 | Greeks + P&L 实时 | APM + business metrics | 业务监控 + 风控监控 |
| 报告 | 月度 P&L attribution | Quarterly business review | 季度合规报告 |
PM 关键洞察:
- 「能不能上线」不是一个技术决策,是一个组合决策——技术 + 合规 + 心理 + 灰度策略,任何一条没准备好都不能上。
- Kill switch 必须比上线机制更可靠——上线可以慢,紧急停产必须快。这点和银行系统的 ATP(应急处理程序)逻辑完全一致。
- 第一个版本只解决「能 work」,不解决「赚钱」——这是 MVP 思维,对量化和 SaaS 都成立。
- 灰度的金额不是任意选的,是「全部亏完不致命」的最大值——这条法则比任何「lot size 优化算法」都重要。
- 复盘文档比 P&L 重要——P&L 是结果,文档是能力。第一年的目标是积累 12 份月度复盘,不是积累 $X 利润。
十三、明日预告
Day 61: 实盘 Ready Day — 入金到账 + 第一次实盘连接
- 验证入金到账(Cash Balance > 0)
- 切换脚本 port 4002 → 4001(最容易出事的一步,要加 assert)
- 跑一次 read-only 实盘连接:拿真实账户摘要、真实持仓(应该为空)
- 不下单,只读
- 设置 IBKR alerts(Cash balance 变动 / 单笔 fill / margin call 阈值)
- 设置 systemd 服务,让 IB Gateway 跑成 daemon
- 设置 FlexQuery daily auto-run
Day 62 才会下第一笔单——Day 61 是「ready 但不下单」的缓冲日,给自己一个再想想的机会。这是有意设计的。
实际执行记录
启动一项填一项,时间戳 + 卡点。
- [hh:mm] Must-have checklist Item 1 — Paper crash-free 验证 ...
- [hh:mm] Item 2 — 相关性矩阵 ...
- [hh:mm] Item 3 — Greeks 监控 ...
- [hh:mm] Item 4 — 重连测试 ...
- [hh:mm] Item 5 — SOP 文档 ...
- [hh:mm] Item 6 — W-8BEN 状态 ...
- [hh:mm] Item 7 — 心态预案 + 给自己的信 ...
- [hh:mm] Kill switch 脚本 + 测试 ...
- [hh:mm] 应急预案 cheat sheet 打印贴桌前 ...
- [hh:mm] 入金 $1,000 发起 ...
- [hh:mm] FlexQuery 配置 daily Trades report ...
- [hh:mm] 第一笔交易设计文档打印贴桌前 ...
- [hh:mm] TR_PROGRESS.md Day 60 标 ✅ ...
- 卡点 / 学到的:
今日完成度:反思 ✓ / Phase 3 路线图 ✓ / 7 项 checklist(待逐项执行)/ 第一笔交易设计 ✓ / 应急预案 ✓ / 给自己的信 ✓ Phase 2 收官 + Phase 3 起点:今天没有写代码,今天写的是规则和边界。这两样东西决定了未来 30 天能不能活下来。