Wheel 策略全图 — CSP → Assigned → CC → 卖出
Wheel = 在你愿意长期持有的标的上,循环卖出 OTM put 和 OTM call,靠 Theta 衰减赚 premium,被 assigned 时按预设计划接货或卖货。
日期: 2026-06-16 方向: Phase 2 / 期权 / Wheel 阶段: Phase 2: 策略实战 + AI 信号 标签: #Wheel #CSP #CoveredCall #ThetaHarvesting #SmallAccount #LowPriceStock
今日目标
| 类型 | 内容 |
|---|---|
| 学习 | Wheel 四阶段全闭环 / Theta 收益结构 / <$5k 标的筛选逻辑 / 最大坑(价格断崖与卡仓)/ Greeks 视角解构 |
| 实操 | 写 wheel_state_machine.py:自动跟踪持仓阶段并给出下一步建议 |
| 产出 | TR-DAY38 笔记 + 状态机代码骨架 + 候选标的清单 + 年化收益数学模型 |
一、Wheel 策略的本质:把「赌方向」改成「收租金」
Wheel 是期权领域里最被低估的策略之一——因为它不性感(没有 100x payoff)、不复杂(没有跨期蝶式)、不刺激(不靠择时)。但在 <$5k 小账户里,它几乎是结构上最稳健的可持续盈利来源。
1.1 一句话定义
Wheel = 在你愿意长期持有的标的上,循环卖出 OTM put 和 OTM call,靠 Theta 衰减赚 premium,被 assigned 时按预设计划接货或卖货。
它不是「策略」,更像一个状态机(State Machine)。每一步的输入是当前持仓状态 + 标的价格 + 到期日,输出是「卖什么、卖多少、什么 strike」。
1.2 与方向性交易的核心区别
| 维度 | 方向性交易(如长仓股票) | Wheel |
|---|---|---|
| 收益来源 | Delta(价格变动) | Theta(时间衰减) |
| 胜率 | 50-55% 已是好策略 | 70-85%(OTM put 多数过期作废) |
| 单笔最大盈利 | 理论无限 | 封顶 = premium |
| 单笔最大亏损 | 最差 = 全部本金 | 最差 = strike - premium |
| 需要预测方向 | ✓ 需要 | ✗ 不需要(只要不暴跌) |
| 心理压力 | 高(每天看涨跌) | 低(30 天才动一次) |
| 适合资金量 | 任意 | 小资金特别友好 |
关键认知:Wheel 是「用『接货的承诺』换 premium」的生意。你不是在赌它涨还是跌,你是在卖一份「保险」——卖给市场上那些怕跌的人——只要你愿意接货(CSP 阶段)或愿意卖货(CC 阶段),这份保险就能持续收钱。
1.3 这跟金融 PM 的日常工作其实是同构的
我做了 10 年金融零售,回头看 Wheel 的结构跟「月度采购合同 + 库存承受能力」几乎一模一样:
- CSP 阶段 = 「我承诺以约定价格买入 100 单位库存(如果对方要交货)」+ 对方先付定金(premium)
- Assigned = 库存按计划入库(不是失败,是合同执行)
- CC 阶段 = 「我承诺以约定价格卖出 100 单位库存(如果对方要买)」+ 对方先付定金
- Called away = 库存按计划出库
唯一不同的是:金融合同的对手方是具体的人(你能谈判),而 Wheel 的对手方是市场(你只能 take 或 leave 报价)。
二、四阶段详解:每一步的目标和决策
2.1 流程图
┌─────────────────────────────────┐
│ START: 持有现金 $5k │
└────────────────┬────────────────┘
▼
┌──────────────────────────────────────────┐
│ Stage 1: 卖 CSP (Cash-Secured Put) │
│ - Strike: 你愿意接货的价格 (~Delta 0.30)│
│ - DTE: 30-45 天 │
│ - 占款: strike × 100 │
│ - 收入: premium A │
└────────────────┬─────────────────────────┘
▼
┌────────── 到期 ──────────┐
│ │
股价 > strike 股价 < strike
(OTM, 过期作废) (ITM, 被 assigned)
│ │
▼ ▼
┌───────────────┐ ┌──────────────────────┐
│ 保留 premium A│ │ Stage 2: Assigned │
│ → 回 Stage 1 │ │ - 以 strike 买入 100 │
└───────────────┘ │ 股 │
│ - 实际成本 = │
│ strike - premium A │
└──────────┬───────────┘
▼
┌──────────────────────────────────┐
│ Stage 3: 卖 Covered Call │
│ - Strike: ≥ 你的成本 (Delta 0.30) │
│ - DTE: 30-45 天 │
│ - 占款: 股票本身(不额外占款) │
│ - 收入: premium B │
└──────────────┬───────────────────┘
▼
┌────────── 到期 ──────────┐
│ │
股价 < strike 股价 > strike
(OTM, CC 过期作废) (ITM, 被 called away)
│ │
▼ ▼
┌───────────────┐ ┌──────────────────────┐
│ 保留 premium B│ │ Stage 4: Called Away │
│ + 继续持股 │ │ - 以 strike 卖出 100 │
│ → 回 Stage 3 │ │ 股 │
│ (卖新 CC) │ │ - 兑现盈利 │
└───────────────┘ │ - 回到现金状态 │
└──────────┬───────────┘
│
└─→ 回 Stage 1
2.2 四阶段决策表
| 阶段 | 你的状态 | 目标 | 决策 | 期望结果 |
|---|---|---|---|---|
| Stage 1 | 现金 | 收 premium A,期望 OTM 过期 | 卖 Delta ~0.30 的 OTM put | 70-75% 概率过期作废 |
| Stage 2 | 被 assigned | 接受执行(不是失败!) | 持股,立刻进入 Stage 3 | 「按计划接货」 |
| Stage 3 | 持股 100 | 收 premium B,期望 OTM 过期 | 卖 Delta ~0.30 的 OTM call | 70-75% 概率过期作废 |
| Stage 4 | 被 called away | 兑现卖出(不是失败!) | 拿回现金,回 Stage 1 | 「按计划卖货 + 兑现盈利」 |
2.3 关键认知:Stage 2 和 Stage 4 不是失败
新手最大的心理障碍是「我被 assigned 了,是不是策略错了?」
不是。 在 Wheel 的设计里,Stage 2 和 Stage 4 是预期内的事件:
- Stage 2(被接货):你早就说过「strike 这个价我愿意买」。市场把价格送到了,你买了,这是 plan 内的事。
- Stage 4(被卖出):你早就说过「strike 这个价我愿意卖」。市场把价格送到了,你卖了,盈利兑现。
真正的失败只有一种:你卖的 CSP 标的,你根本不想长期持有。这才是错。
三、为什么 Wheel 特别适合小资金(<$5k)
3.1 三个结构性优势
1. Risk-defined(最大风险有上界)
单轮 Wheel 最大亏损 = (strike × 100) - 已收 premium 之和 - 现价 × 100
= 你的接货成本 - 当前市值
举个具体的例子:F (Ford) 现价 $11,你卖 $10 strike 的 CSP,收 $0.20 premium。
- 最坏情况:F 跌到 $0(破产),你被 assigned,损失 = $10×100 - $20 = $980(用了 $1000 保证金,留下来 $20 premium)
- 可见性:你 sell put 那一刻就知道最大亏损是多少
对比纯股票:买 $5k 的 SPY,最大亏损理论上 $5k,没有任何 premium 缓冲。
2. 不需要预测方向
小账户最大的敌人是「过度交易」——每天看盘,每个新闻都想动,最后被滑点和情绪杀死。
Wheel 强制你:
- 30-45 天才动一次(卖完 CSP 就只能等到期)
- 没有「stop loss」概念(你早就计划好接货了)
- 不需要看图、不需要看新闻、不需要预测涨跌
对于「白天有正职」的金融 PM 来说,这种低带宽要求的策略是结构性匹配。
3. 即使「输」也是按计划接货
传统交易里「输」意味着账户缩水。Wheel 里「输」意味着「持股了一只你本来就想长期持有的股票,且接货成本比当时市价低(因为收过 premium)」。
这种心理框架对小账户极度重要——避免「亏损厌恶」导致的过早止损和过晚止盈。
3.2 资金量门槛对比
| 标的 | 现价 | 1 张 CSP 占款 | <$5k 可玩 |
|---|---|---|---|
| SPY | ~$500 | $50,000 | ✗ |
| QQQ | ~$450 | $45,000 | ✗ |
| AAPL | ~$200 | $20,000 | ✗ |
| TSLA | ~$250 | $25,000 | ✗ |
| AMD | ~$150 | $15,000 | ✗ |
| F (Ford) | ~$10 | $1,000 | ✓ |
| SOFI | ~$10 | $1,000 | ✓ |
| PLTR | ~$22 | $2,200 | ✓ |
| NIO | ~$5 | $500 | ✓ |
| BAC | ~$40 | $4,000 | ✓ (单张极限) |
| T (AT&T) | ~$23 | $2,300 | ✓ |
<$5k 的标的池:必须现价 < $50(最好 < $25),否则单张 CSP 就把账户占满,无法分散。
四、<$5k 的 Wheel 标的怎么选
4.1 五条筛选规则
| 规则 | 标准 | 为什么 |
|---|---|---|
| 1. 你愿意长期持有 | 不会因为短期跌 20% 而恐慌 | 接货后睡得着觉 |
| 2. 流动性好 | 日均成交量 > $100M,期权 bid-ask spread < 5% | 进得来出得去 |
| 3. IVR > 30 | Implied Volatility Rank > 30% | premium 才有意义 |
| 4. 单价 < $50 | 单张 CSP 占款 < $5000 | 你能买得起 |
| 5. 大盘股或行业龙头 | 市值 > $10B | 防 single-stock 暴雷 |
4.2 候选标的清单(2026 年视角,仅示例)
| 代码 | 类型 | 现价区间 | 单张 CSP 占款 | 备注 |
|---|---|---|---|---|
| F | 汽车 | $10-12 | $1,000 | 周期股,dividend ~5% |
| SOFI | 金融科技 | $8-12 | $1,000 | 成长股,无 dividend,IV 高 |
| PLTR | AI 软件 | $20-30 | $2,200 | 高 IV,premium 丰厚 |
| T | 电信 | $22-25 | $2,300 | 防御性,dividend ~7% |
| BAC | 银行 | $40-45 | $4,000 | 大盘金融股,账户极限 |
| NIO | EV | $4-6 | $500 | 高风险,仅作分散用 |
| HOOD | 券商 | $15-20 | $1,700 | 高 beta,量化友好 |
| NU | 拉美银行 | $10-12 | $1,100 | 成长 + 价值兼具 |
4.3 组合配置示例($5,000 账户)
┌────────────────────────────────────────────────┐
│ $5,000 Wheel Portfolio │
├────────────────────────────────────────────────┤
│ F ($1k) — 周期性、dividend 缓冲 │
│ SOFI ($1k) — 成长 + 高 IV │
│ T ($1.2k) — 防御 + dividend │
│ HOOD ($0.85k) — 高 beta(用半张 CSP 保证金) │
│ Cash ($0.95k) — 应急 + 月底 roll 用 │
├────────────────────────────────────────────────┤
│ 分散度: 4 个 sector(汽车/科技/电信/券商) │
│ IV 暴露: 高 IV + 低 IV 混合 │
│ Theta 月度: 估计 $50-80 │
└────────────────────────────────────────────────┘
避免:所有 4 个标的都是科技股 / 都是中概股 / 都是同一个 ETF 成分。Single-sector event 会让你全部卡仓。
五、年化收益估算:数学模型
5.1 单轮 CSP 收益率公式
单轮收益率 = premium / (strike × 100)
年化 = 单轮收益率 × (365 / DTE)
举例:F 现价 $11,卖 30 DTE / Delta 0.30 / strike $10 CSP,premium $0.20。
单轮收益率 = 0.20 / 10 = 2.0%
年化 = 2.0% × (365/30) = 24.3%
5.2 完整 Wheel 年化(考虑 4 笔 premium)
理想情景(CSP 过期作废 → 再 CSP → ...):
- 月度 2% × 12 = 24% 年化
中性情景(CSP 过期一半,被 assigned 一半 → 进入 CC → CC 过期作废 → 再 CC):
- CSP 阶段 4 个月(2 个过期 + 2 个被 assigned)
- CC 阶段 4 个月(卖出 covered call,再到期)
- 8 笔 premium ≈ 12% × 1.5 倍杠杆 ≈ 18-25% 年化
悲观情景(连续被 assigned 后股价下跌 30%):
- 收 4 笔 premium ≈ 8% 现金流
- 股价下跌 30%
- 净 mark-to-market -22%
5.3 年化收益的现实分布
| 情景 | 概率 | 年化收益 | 备注 |
|---|---|---|---|
| 理想(全 OTM 过期) | 25% | +25-30% | 持续牛市 |
| 中性(混合 assigned) | 50% | +15-22% | 震荡市 |
| 一般(多次 assigned 但反弹) | 15% | +5-10% | 弱势 |
| 悲观(标的暴跌且卡仓) | 8% | -10 to -25% | 熊市 |
| 灾难(个股黑天鹅) | 2% | -40% 以上 | rug-pull / 财务造假 |
期望值:约 15-20% 年化,远高于 SPY(~10%)+ T-Bill(~4%)的简单加权。但波动率也更高,max drawdown 可能达到 -40%(如果踩到 Stage 2 后标的继续暴跌且 CC 卖不出有意义的 premium)。
六、状态机代码:自动追踪和决策
6.1 设计思路
Wheel 本质是状态机,每个标的有一个独立状态。我们需要:
- 跟踪当前阶段(CSP / Holding / CC)
- 输入当前价格 + 期权链 + 现有持仓
- 输出「下一步动作」建议
6.2 wheel_state_machine.py 骨架
# wheel_state_machine.py
"""
Wheel strategy state machine.
Inputs: ticker, current position, option chain, target_delta, target_dte
Outputs: action recommendation (sell_csp / wait / sell_cc / called_away_reset)
"""
from dataclasses import dataclass
from enum import Enum
from datetime import datetime, timedelta
from typing import Optional
class WheelStage(Enum):
CASH = "cash" # Stage 1: 现金,准备卖 CSP
CSP_OPEN = "csp_open" # 已卖出 CSP,等待到期
HOLDING = "holding" # Stage 2/3: 被 assigned 持股
CC_OPEN = "cc_open" # 已卖出 CC,等待到期
CALLED_AWAY = "called_away" # Stage 4: 刚被 called,准备回 Stage 1
@dataclass
class Position:
ticker: str
stage: WheelStage
shares: int = 0 # 持股数量(0 或 100 的整数倍)
cost_basis: float = 0.0 # 持股成本(含扣除 premium)
open_option_strike: Optional[float] = None
open_option_expiry: Optional[datetime] = None
open_option_type: Optional[str] = None # 'PUT' / 'CALL'
premiums_collected: float = 0.0 # 累计收到的 premium
@dataclass
class ActionRecommendation:
action: str # 'SELL_CSP' / 'SELL_CC' / 'WAIT' / 'RESET'
strike: Optional[float] = None
expiry: Optional[datetime] = None
expected_premium: Optional[float] = None
rationale: str = ""
class WheelStateMachine:
def __init__(self, target_delta: float = 0.30, target_dte: int = 35):
self.target_delta = target_delta
self.target_dte = target_dte
def next_action(
self,
position: Position,
current_price: float,
option_chain: dict, # {strike: {'delta': float, 'mid': float, 'expiry': dt}}
now: datetime = None,
) -> ActionRecommendation:
now = now or datetime.now()
# Stage 1: cash, look for CSP
if position.stage == WheelStage.CASH:
target = self._find_strike(
option_chain, side='PUT', target_delta=-self.target_delta
)
if target is None:
return ActionRecommendation(
action='WAIT',
rationale='No suitable PUT strike found near target delta'
)
return ActionRecommendation(
action='SELL_CSP',
strike=target['strike'],
expiry=target['expiry'],
expected_premium=target['mid'],
rationale=f'Sell {target["strike"]} PUT @ ~${target["mid"]:.2f}, '
f'delta {target["delta"]:.2f}'
)
# CSP open: monitor; close if 21 DTE rule
if position.stage == WheelStage.CSP_OPEN:
dte_left = (position.open_option_expiry - now).days
if dte_left <= 21 and current_price > position.open_option_strike * 1.05:
# 21 DTE rule + comfortably OTM → roll or wait
return ActionRecommendation(
action='WAIT',
rationale=f'CSP {dte_left}d to expiry, well OTM, let it decay'
)
return ActionRecommendation(
action='WAIT',
rationale=f'CSP {dte_left}d to expiry, monitor'
)
# Holding shares: look for CC
if position.stage == WheelStage.HOLDING:
# CC strike must be ≥ cost basis to avoid locking in a loss
min_strike = position.cost_basis
target = self._find_strike(
option_chain,
side='CALL',
target_delta=self.target_delta,
min_strike=min_strike,
)
if target is None:
return ActionRecommendation(
action='WAIT',
rationale=f'No CALL strike above cost basis ${min_strike:.2f}. '
f'Wait for price to recover.'
)
return ActionRecommendation(
action='SELL_CC',
strike=target['strike'],
expiry=target['expiry'],
expected_premium=target['mid'],
rationale=f'Sell {target["strike"]} CALL @ ~${target["mid"]:.2f}'
)
# CC open: monitor
if position.stage == WheelStage.CC_OPEN:
dte_left = (position.open_option_expiry - now).days
return ActionRecommendation(
action='WAIT',
rationale=f'CC {dte_left}d to expiry, monitor'
)
# Called away: reset to cash
if position.stage == WheelStage.CALLED_AWAY:
return ActionRecommendation(
action='RESET',
rationale='Position closed at call strike, return to CASH stage'
)
@staticmethod
def _find_strike(
option_chain: dict,
side: str,
target_delta: float,
min_strike: float = 0.0,
) -> Optional[dict]:
"""Find the strike closest to target_delta meeting min_strike constraint."""
candidates = [
{'strike': k, **v} for k, v in option_chain.items()
if v.get('type') == side and k >= min_strike
]
if not candidates:
return None
candidates.sort(key=lambda x: abs(x['delta'] - target_delta))
return candidates[0]
6.3 使用示例
sm = WheelStateMachine(target_delta=0.30, target_dte=35)
# 假设我们刚开账户,5k 现金,准备对 F 起手
pos = Position(ticker='F', stage=WheelStage.CASH)
# 从 ib_insync 拉到的期权链(简化)
chain = {
9.5: {'type': 'PUT', 'delta': -0.20, 'mid': 0.10, 'expiry': datetime(2026, 7, 18)},
10.0: {'type': 'PUT', 'delta': -0.30, 'mid': 0.20, 'expiry': datetime(2026, 7, 18)},
10.5: {'type': 'PUT', 'delta': -0.42, 'mid': 0.32, 'expiry': datetime(2026, 7, 18)},
}
rec = sm.next_action(pos, current_price=11.0, option_chain=chain)
print(rec)
# ActionRecommendation(action='SELL_CSP', strike=10.0,
# expected_premium=0.20,
# rationale='Sell 10.0 PUT @ ~$0.20, delta -0.30')
6.4 完整闭环(生产版需要补的)
- 连 IBKR 拉真实期权链(Day 22 已写过)
- 持仓状态持久化(SQLite 或 JSON)
- 自动下单(要先有 Read-Only 护栏,再去掉)
- Roll 逻辑(21 DTE rule 触发时自动平仓 + 开新仓)
- 通知(Telegram bot / 邮件)
- 回测模式(喂历史数据验证)
Day 39 会用历史 CC 数据回测,Day 40 会写完整的端到端流程。
七、Wheel 的最大坑:价格断崖与卡仓
7.1 什么是「卡仓」(Stuck Position)
理想 Wheel 假设标的在 ±20% 范围内震荡。但现实中:
卡仓场景:
1. 卖 $10 strike CSP 收 $0.20
2. 财报暴雷,股价跌到 $6
3. 被 assigned @ $10,实际成本 $9.80(扣 premium)
4. 现在要卖 CC,但 $10 strike 的 call 已经几乎没人买(深 OTM)
5. 你只能卖 $7 strike CC,但 strike < cost basis $9.80
→ 如果被 called,锁定亏损
6. 你的选择:
a) 卖深 OTM CC,premium 小(年化 1-2%),等回涨
b) 卖近月 ATM CC 接受亏损
c) 死等,不卖 CC(资金完全卡死)
这就是卡仓:资金被锁在一个亏损标的上,无法获得有意义的 premium,也不愿意止损。这是 Wheel 最大的失败模式。
7.2 真实案例:META 2022
2022 年 Q4,META 从 $250 跌到 $90。任何在 $200 strike 卖 CSP 的人都被深度 ITM assigned,然后发现 $200 strike 的 CC premium 几乎为 0(深 OTM),$100 附近的 CC strike 又锁定 -50% 亏损。
最终:
- 死等的人在 2023 年 META 涨回 $300 后解套(一年时间,年化机会成本巨大)
- 接受 -30% 卖 CC 的人,至少把资金循环起来
- 不动产的人最惨——既没接货也没卖 CC,纯粹被动持有
7.3 卡仓防御手册
| 防御 | 操作 | 效果 |
|---|---|---|
| 1. 分散 | 5-10 个不同 sector 标的 | 单个卡仓不致命 |
| 2. 避开高 single-stock risk | 不卖即将财报的标的 CSP | 避开断崖 |
| 3. 仓位上限 | 单标的 < 20% 账户 | 不被一个标的 KO |
| 4. 21 DTE rule | 到期前 21 天就 roll | 降低被 assigned 概率 |
| 5. Roll Down + Out | ITM 被动时主动 roll 到更低 strike + 更远期 | 给标的时间反弹 |
| 6. 接受止损 | 跌超过 30% 直接卖股票认输 | 资金重新循环比死扛好 |
7.4 「分散」具体怎么做
对 $5k 账户,理想是:
$5,000 / 5 个标的 = $1,000 each
→ 只能选单价 < $10 的标的
→ 候选: F / SOFI / NIO / NU / HOOD (1/2 张)
每月组合 premium 估计:
F: $0.15 × 5 = $0.75 / 月
SOFI: $0.20 × 5 = $1.00 / 月(IV 更高)
NIO: $0.10 × 5 = $0.50 / 月
NU: $0.15 × 5 = $0.75 / 月
HOOD: $0.30 × 5 / 2 = $0.75 / 月(半张)
─────────────────────────────────────
合计: ~$3.75 / month × 100 = $375 / 月
但你只有 $5k 占用约 80% 保证金,所以这个数字有水分。
实际期望: $30-60 / 月,月度 ~0.6-1.2%
八、Greeks 视角解构 Wheel
理解 Wheel 必须看 Greeks,不然你不知道钱从哪来、险从哪来。
8.1 收益来源(按贡献度)
| Greek | 在 Wheel 中的角色 | 贡献度 |
|---|---|---|
| Theta | 时间衰减赚 premium —— 主要收益来源 | 60-70% |
| Delta | CSP 期望涨(call price 跌 + 持股升值);CC 持股期望温和涨 | 20-30% |
| Vega | IV 下降时多头 vega 仓位 hurt,IV 上升时 helped | 0-10%(两难) |
| Gamma | 主要是风险,不是收益 | 仅作风控用 |
8.2 风险来源(按危险度)
| Greek | 风险机制 | 触发场景 |
|---|---|---|
| Gamma | ATM 附近 delta 变化剧烈,被 assigned 速度加快 | 标的快速跌穿 strike |
| Vega | IV 从 20% 飙升到 80%(如财报前夜),你的 short put MTM 大幅亏损 | 突发事件 / 财报 |
| Delta | 标的暴跌,CSP 深 ITM,账面亏损巨大 | 黑天鹅 |
| Rho | 加息环境下 long put 贵,short put 收益略升(小利好) | 利率变化 |
8.3 关键 Greeks 数字
对一张 30 DTE / Delta 0.30 / 卖 PUT 的典型仓位:
Theta ≈ +$0.01-0.02 / 天 / 张 (单张 100 股的合约)
→ 月度 +$0.30-0.60 / 张
Delta ≈ -0.30 / 张
→ 标的涨 $1,你赚 $30 (CSP 价值跌)
→ 标的跌 $1,你亏 $30 (CSP 价值涨)
Gamma ≈ 0.05-0.10 / 张
→ 标的接近 strike 时 delta 加速变化
→ ATM 时 gamma 最大,"很容易翻车"
Vega ≈ +$0.02-0.04 / 张 / vol%
→ IV 涨 1%,你的 short put MTM 亏 $2-4 / 张
实战 takeaway:
- 远离财报日卖 CSP(避免 Vega 爆炸)
- ATM 附近不要重仓(Gamma 风险高)
- Theta 是慢工,急不来——每天才 $0.01-0.02
九、PM 视角:Wheel 与「订阅型收入 + 库存承受能力」结构同构
回到金融 PM 的本职——Wheel 在产品设计上其实和我们做的「采购合同 / 月度订阅产品」是同一类生意:
9.1 三个对照
| 维度 | 零售 PM 设计的「月度采购合同」 | Wheel CSP |
|---|---|---|
| 我承诺什么 | 月底以约定单价买入 X 件库存 | 月底以 strike 买入 100 股 |
| 对方付什么 | 预付定金(合同保证金) | premium |
| 我赚什么 | 即使对方不交货,定金归我 | 即使 OTM 过期,premium 归我 |
| 我的风险 | 即使市价低于约定价,我也要买 | 即使股价低于 strike,我也要买 |
| 关键能力 | 库存承受能力 + 现金占用 | 持股承受能力 + 现金占用 |
9.2 三个迁移性洞察
1. 「我愿意接货」是合同的核心,不是 fine print
零售 PM 都知道:签了月度采购合同就要做好「即使最差情况也要接货」的准备。Wheel 是一样的——卖 CSP 的瞬间,你必须已经接受最坏情况。如果你的策略依赖「我相信它不会跌」,那这不是 Wheel,是赌博。
2. 现金流(premium)≠ 利润
零售合同的定金是风险补偿,不是利润。如果你接货后市价跌了,定金不能完全 cover 亏损。Wheel 也一样——年化 20% 的 premium 看起来诱人,但 max drawdown -40% 才是真实风险。
3. 库存承受能力决定规模
零售合同能签多大,取决于你的库存承受能力(仓库 / 现金 / 周转)。Wheel 能开多大仓位,取决于你的持股承受能力(账户 / 心理 / 不需要钱的时间长度)。
对 <$5k 账户的启示:你的「库存承受能力」非常有限,所以只能玩低价标的 + 多标的分散 + 严格不重仓。这跟一家小零售店「不能一次性进 1000 件库存」是一样的道理。
十、Day 38 实际执行 Checklist
- (0) 读了一遍这篇笔记
- (1) 候选标的清单:把 F / SOFI / T / HOOD / PLTR 等加到 watchlist
- (2) 期权链探查:用 Day 22 的脚本拉这 5 个标的的 30 DTE 期权链
- (3) IVR 检查:每个标的当前 IVR 是多少?> 30 才考虑
- (4) 写 wheel_state_machine.py:把第 6 节代码骨架敲一遍
- (5) Paper 测试 1:用 F 在 Paper 账户卖一张虚拟 CSP,观察 1 周
- (6) Theta 跟踪表:开始记录每天的 premium MTM 变化
- (7) 更新 TR_PROGRESS.md
- (8) 记录踩坑:本笔记最后加「实际执行记录」段
十一、明日预告
Day 39: Covered Call 历史回测 — 用 5 年数据验证年化收益
- 拉 SPY / F / AAPL 五年期权链历史数据
- 模拟「每月卖 30 DTE / Delta 0.30 CC」的策略
- 对比 buy-and-hold 的 Sharpe / max drawdown
- 验证「CC 在牛市跑输,在震荡市跑赢」的传统认知
- 量化「Theta 收益」vs「上涨被截顶」的取舍
- 写
cc_backtest.py:Day 38 代码的回测版
实际执行记录
启动一项填一项,时间戳 + 卡点。
- [hh:mm] 候选标的清单 — ...
- [hh:mm] 期权链探查(F) — ...
- [hh:mm] 期权链探查(SOFI) — ...
- [hh:mm] IVR 数据收集 — ...
- [hh:mm] wheel_state_machine.py 跑通 — ...
- [hh:mm] Paper 卖 F 虚拟 CSP — ...
- 卡点 / 学到的:
总字数:约 7,200 字 今日完成度:理论 ✓ / 代码骨架 ✓ / 实操(你自己执行)/ 笔记 ✓