Diagonal Spread + LEAPS / PMCC
Diagonal spread 与 calendar 的差别、LEAPS 作为「股票替代」的底层逻辑、PMCC 完整结构
日期: 2026-07-18 方向: Phase 3 / Diagonal + LEAPS 阶段: Phase 3: 实盘+规模化+迁移 标签: #DiagonalSpread #LEAPS #PMCC #PoorMansCoveredCall #LeverageOption #CapitalEfficiency
今日目标
| 类型 | 内容 |
|---|---|
| 学习 | Diagonal spread 与 calendar 的差别、LEAPS 作为「股票替代」的底层逻辑、PMCC 完整结构 |
| 实操 | SPY PMCC 完整建仓例子 + 低价个股 PMCC(<$5k 可用)+ ib_insync 2-leg combo |
| 产出 | TR-DAY70 笔记 + pmcc_setup.py 选腿工具 + PMCC vs 直接持股 + CC 的回测对比 |
一、Diagonal Spread 是什么:calendar 的「对角线」
Day 69 我们写了 calendar spread——相同 strike、不同 expiry。今天的 diagonal 就是把它的一条腿移开 strike。
Calendar Diagonal
long → Back month, K=100 → Back month, K=K_long
short → Front month, K=100 → Front month, K=K_short
(K_long ≠ K_short)
形式上只多了「strike 不同」这一个自由度,但策略含义完全不同:
| 特征 | Calendar | Diagonal |
|---|---|---|
| 方向性 | 接近中性(依赖标的横盘) | 可强烈方向性(看你怎么搭 strike) |
| Vega | 净 long(吃 IV 上行) | 也净 long,但被 strike 距离稀释 |
| Theta | 短腿吃长腿 | 同上,但因 strike 错位,θ 比 calendar 小 |
| 最大盈利位置 | 短腿 strike 附近 | 短腿 strike 附近(但 path 不同) |
| 资金占用 | 长腿 debit - 短腿 credit | 同上,但通常更贵(ITM long) |
| 主要用法 | 横盘 + IV 上行预期 | 替代股票 + 收 premium |
关键认知:diagonal 把 calendar 的「IV+横盘玩法」改成了「方向 + 持续收租」玩法。这就是 PMCC 的本质——它是 diagonal 的一个特殊形态:long ITM 远期 call + short OTM 近期 call。
1.1 Long ITM back / Short OTM front 是怎么思考的
长腿(back month)= 「股票替代品」
- 选 ITM call → Delta 接近 0.8-0.9 → 像 0.8-0.9 股股票
- 选远期 → Theta 慢 → 不会被时间快速侵蚀
- 选 LEAPS → 给自己 12-24 个月窗口
短腿(front month)= 「租金机器」
- 选 OTM call → 不容易被 assign
- 选 30-45 DTE → θ/天最大
- 每月轮转一次 → 滚动收 premium
对比直接「持股 + 卖 CC」:
传统 Covered Call:
100 股 SPY @ $500 = $50,000 资本
short 30DTE OTM call → $5 premium
→ 月收益 $5 / $500 = 1% per month on capital
Poor Man's Covered Call (PMCC):
long Jan 2027 $400 LEAPS call ≈ $130/share = $13,000 资本
short 30DTE $510 call → $5 premium
→ 月收益 $5 / $130 = 3.8% per month on capital
资本占用:$13,000 vs $50,000 = 节省 74%
听起来太美了——这里立刻要谈代价。
二、LEAPS 是什么
LEAPS = Long-term Equity AnticiPation Securities。SEC 1990 年引入的标准化术语,本质就是「到期日 ≥ 9 个月的期权」(CBOE 一般指 ≥1 年)。
2.1 LEAPS 的核心数学
| 维度 | 30DTE ATM call | 1Y ITM LEAPS call |
|---|---|---|
| Delta | ~0.50 | ~0.85 |
| Gamma | 高(接近 expiry 时炸) | 低 |
| Theta/天 | 高(每天烧 1-2%) | 低(每天烧 0.05-0.1%) |
| Vega | 中 | 高(远期对 IV 极敏感) |
| 时间价值占比 | 100% | 20-30%(大部分是内在价值) |
| 行为 | 像「彩票」 | 像「带杠杆+到期日的股票」 |
对 PMCC 来说真正重要的两条:
- Theta 慢但累积:每天烧得不多,但 365 天加起来不容忽视。如果标的横盘 1 年,你的 LEAPS 会损失 20-30% 价值(即便股价没动)——这是 PMCC 「隐性持有成本」。
- Delta 接近股票但不等于股票:Delta 0.85 意味着 SPY 涨 $10 你的 LEAPS 涨约 $8.5。但下跌时 Delta 会变小(Delta 不是常数),所以下跌中段你「跌得更多」——直到 Delta 趋近 0 时你已经亏 70%+。
2.2 LEAPS 选腿的经验法则
Delta 0.70-0.85 → 「股票替代」最合适
- 太低(<0.6):内在价值少 → 时间价值占比高 → θ 拖累严重
- 太高(>0.9):内在价值多 → 资本占用高 → 失去杠杆意义
到期 12-24 个月
- <12 个月:theta 已经开始加速
- >24 个月:流动性差 + 资金占用拉长
OI / Volume 检查
- 每个 strike 至少 200+ OI → 否则 bid-ask spread 吃利润
三、PMCC 完整例子:SPY
3.1 建仓
时间:2026-07-18
SPY 现价:$500
IV:18%(普通水位)
腿 1(long):
Jan 2027 $400 Call
Delta ≈ 0.88
Premium ≈ $130/share
时间价值 = $130 - ($500-$400) = $30
到期:184 天后
腿 2(short):
Aug 22 (35DTE) $510 Call
Delta ≈ 0.32
Premium ≈ $5/share
时间价值 = $5 - max($500-$510, 0) = $5(全是时间价值)
净 debit = $130 - $5 = $125/share
1 张 PMCC = $12,500 资本占用
对比直接持股 + 卖 CC:
腿 A:买 100 股 SPY = $50,000
腿 B:short $510 Aug 35DTE = +$500 premium
净资本 = $50,000 - $500 = $49,500
PMCC 资本 / Covered Call 资本 = $12,500 / $49,500 = 25%
3.2 三种情景分析(35 天后)
| 情景 | SPY 价格 | LEAPS 价值 | Short 状态 | PMCC 盈亏 | 直接 CC 盈亏 |
|---|---|---|---|---|---|
| 横盘 | $500 | ~$128(θ -$2) | 过期 → 收 $5 | +$3/share = +$300 | +$5/share = +$500 |
| 涨 5% | $525 | ~$140 | ITM → assign 或 roll | +$10 +$5 -$15 = $0/sh | +$25 -$25+$5 = +$500 |
| 跌 5% | $475 | ~$115 | 过期 → 收 $5 | -$15 +$5 = -$10/sh | -$25 +$5 = -$20/sh |
| 跌 10% | $450 | ~$95 | 过期 → 收 $5 | -$35 +$5 = -$30/sh | -$50 +$5 = -$45/sh |
两个观察:
- PMCC 在横盘和小幅下跌时显著优于直接持股+CC(因为占用资本少)
- 大涨时 PMCC 比直接 CC 差——因为 LEAPS Delta 不是 1.0,而 short call 上涨的损失却接近 1:1
3.3 「年化收益」的视觉陷阱
月度 premium $5 × 12 个月 / LEAPS 成本 $130 = 46% annualized。
新手看到这个数字会觉得:「我找到圣杯了。」这是错觉。原因:
- 杠杆放大:LEAPS 给了你 ~5x 的资本效率,所以收益率 ÷ 杠杆 = 实际「无杠杆 yield」≈ 9% — 跟 CC 的 12% 年化差不多甚至略低。
- 风险也被放大:横盘可以——但大跌时 LEAPS 不能像股票一样「不卖就没事」。它有到期日,可能归零。
- 再投资风险:每月你赚的 $5 是相对小的,无法覆盖 LEAPS 本身大幅下跌的损失。
正确的心智模型:「PMCC = CC 的 5x 杠杆版」。所有收益和风险都乘 5。这是 leverage on options,不是免费午餐。
四、PMCC 的风险(必须懂的)
4.1 大跌时无法「拿住等回弹」
2026 年 7 月买入:SPY $500,LEAPS $400 Jan 2027,$130
2026 年 10 月:SPY 跌到 $380(市场大跌 24%)
LEAPS 状态:
- 内在价值 = max($380-$400, 0) = $0
- 时间价值剩余 ≈ $8
- 总值 ≈ $8(从 $130 跌到 $8,损失 94%)
对比直接持股:
$50,000 → $38,000,损失 24%,可以拿着等回弹
这是 PMCC 最致命的代价。到 2027 年 1 月,即便 SPY 反弹回 $500,你的 LEAPS 仍然只值 $100 内在价值——但你已经亏了 $30 时间价值。
对策:
- 不要用 PMCC 替代「长期持有」的核心仓位
- 用在「3-12 个月看好但不想压全部资本」的场景
- 心理预设:LEAPS 是 5x 杠杆股票,跌 20% 你可能亏 100%
4.2 Short call 的 early exercise risk
如果短腿在除权日前是 ITM,且时间价值 < 股息,counterparty 会 early exercise。结果:
你被 assign:
- 你的 short call 被行权 → 你需要交付 100 股 SPY
- 但你没有 SPY,你只有 LEAPS
- 解决方案 A:行权你的 LEAPS(损失剩余时间价值)
- 解决方案 B:从市场买入 100 股(用现金)
- 解决方案 C:临时被 short 100 股(需要 margin 账户)
对策:
- 除权日前 1 周,主动 close 或 roll short leg
- 用 SPY 这种 quarterly 除权的标的,避开除权日附近持仓 ITM short
- IB 会自动尝试帮你处理 early assignment,但不靠谱
4.3 流动性 / Bid-Ask Spread
LEAPS 流动性远不如近月。$130 的期权,bid-ask 可能 $129/$131,进出一次损失 1.5%。对策:用 limit order,不要用 market。
五、<$5k 个股 PMCC:真正能做的事
SPY PMCC 需要 $12,500——超出 <$5k 预算。所以我们要找低价个股做 PMCC。
5.1 选股标准
| 标准 | 阈值 | 原因 |
|---|---|---|
| 股价 | $8 - $30 | LEAPS 单张资本占用 $500-$2,000 |
| Market Cap | ≥$5B | 避免被妖股 / pump & dump |
| Options OI | LEAPS 每 strike ≥500 OI | 流动性 |
| IV Rank | 30-70 | 太低(赚不到 premium),太高(LEAPS 也贵) |
| Beta | 0.8 - 1.5 | 不要太波动也不要太死气 |
| 业务稳定 | 不要财报随机 | 避免 binary risk |
5.2 候选清单(举例,非推荐)
| Ticker | 股价 | LEAPS 资本 | 月 premium 范围 |
|---|---|---|---|
| F | $11 | $500-$600 | $15-$25 per contract |
| BAC | $35 | $1,500-$1,800 | $40-$60 |
| T | $20 | $800-$1,000 | $20-$30 |
| INTC | $25 | $1,000-$1,200 | $30-$50 |
| PFE | $28 | $1,200-$1,500 | $35-$55 |
F PMCC 示例:
long Jan 2027 $5 call ≈ $5.50/share = $550 资本
short Aug 35DTE $12 call ≈ $0.25/share = $25 premium
月度收益 = $25 / $550 = 4.5%/月(leverage 后)
仓位建议(<$5k 账户):
- 5-8 个个股 PMCC
- 每个 $500-$700 资本
- 总占用 $3,000-$4,000
- 留 $1,000-$2,000 做现金缓冲(应对 roll、补仓)
六、代码:PMCC 选腿工具
6.1 pmcc_setup.py
"""
PMCC setup helper:
1. Scan low-price stocks with sufficient options liquidity
2. For each, pick LEAPS long leg (Delta ~0.8) and short OTM front leg (Delta ~0.3)
3. Output combo definition ready for IBKR
"""
from ib_insync import IB, Stock, Option, ComboLeg, Contract
from datetime import datetime, timedelta
import pandas as pd
ib = IB()
ib.connect('127.0.0.1', 4002, clientId=70)
assert ib.client.port == 4002, "PAPER ONLY"
UNIVERSE = ['F', 'BAC', 'T', 'INTC', 'PFE', 'KMI', 'WBD', 'VZ', 'SOFI']
def find_pmcc_legs(symbol, target_long_delta=0.80, target_short_delta=0.30):
stock = Stock(symbol, 'SMART', 'USD')
ib.qualifyContracts(stock)
[ticker] = ib.reqTickers(stock)
spot = ticker.marketPrice()
# Fetch option chain
chains = ib.reqSecDefOptParams(symbol, '', 'STK', stock.conId)
chain = next(c for c in chains if c.exchange == 'SMART')
today = datetime.now().date()
# Long leg: 12-18 months out
long_expiries = [e for e in chain.expirations
if 365 <= (datetime.strptime(e, '%Y%m%d').date() - today).days <= 540]
# Short leg: 25-45 days
short_expiries = [e for e in chain.expirations
if 25 <= (datetime.strptime(e, '%Y%m%d').date() - today).days <= 45]
if not long_expiries or not short_expiries:
return None
long_exp = long_expiries[0]
short_exp = short_expiries[0]
# Find strike closest to target deltas
def pick_strike(expiry, target_delta):
candidates = []
for K in chain.strikes:
if K > spot * 1.5 or K < spot * 0.3:
continue
opt = Option(symbol, expiry, K, 'C', 'SMART')
ib.qualifyContracts(opt)
[t] = ib.reqTickers(opt)
if t.modelGreeks and t.modelGreeks.delta:
candidates.append((K, t.modelGreeks.delta, t.marketPrice(),
t.bidSize, t.askSize))
if not candidates:
return None
# Pick closest delta with OI > 100
candidates.sort(key=lambda x: abs(x[1] - target_delta))
return candidates[0]
long_pick = pick_strike(long_exp, target_long_delta)
short_pick = pick_strike(short_exp, target_short_delta)
if not long_pick or not short_pick:
return None
return {
'symbol': symbol,
'spot': spot,
'long': {'expiry': long_exp, 'strike': long_pick[0],
'delta': long_pick[1], 'mid': long_pick[2]},
'short': {'expiry': short_exp, 'strike': short_pick[0],
'delta': short_pick[1], 'mid': short_pick[2]},
'net_debit': long_pick[2] - short_pick[2],
'monthly_yield': short_pick[2] / long_pick[2],
}
if __name__ == '__main__':
results = []
for sym in UNIVERSE:
try:
r = find_pmcc_legs(sym)
if r:
results.append(r)
print(f"{sym}: long {r['long']['expiry']}/{r['long']['strike']}C "
f"@${r['long']['mid']:.2f} | "
f"short {r['short']['expiry']}/{r['short']['strike']}C "
f"@${r['short']['mid']:.2f} | "
f"net ${r['net_debit']:.2f} | "
f"yield {r['monthly_yield']*100:.1f}%/mo")
except Exception as e:
print(f"{sym}: skip ({e})")
ib.disconnect()
6.2 用 ComboLeg 一次提交两腿(避免 leg risk)
def build_pmcc_combo(symbol, long_leg_dict, short_leg_dict):
"""Build a BAG (combo) contract so both legs fill or none fill."""
long_opt = Option(symbol, long_leg_dict['expiry'],
long_leg_dict['strike'], 'C', 'SMART')
short_opt = Option(symbol, short_leg_dict['expiry'],
short_leg_dict['strike'], 'C', 'SMART')
ib.qualifyContracts(long_opt, short_opt)
combo = Contract(symbol=symbol, secType='BAG', exchange='SMART', currency='USD')
combo.comboLegs = [
ComboLeg(conId=long_opt.conId, ratio=1, action='BUY', exchange='SMART'),
ComboLeg(conId=short_opt.conId, ratio=1, action='SELL', exchange='SMART'),
]
return combo
为什么必须用 combo:手动两腿下单意味着「先买 long → 再卖 short」之间标的可能跳价,导致你以更差价格成交(leg risk)。combo 把两腿绑成一个原子单。
七、回测:PMCC vs 直接持股 + CC
7.1 回测设置
"""
PMCC vs Covered Call backtest skeleton.
Universe: SPY, QQQ, IWM, plus 3 individual stocks
Window: 2022-01 to 2026-06
Rebalance: monthly roll short leg, annual roll long leg
"""
import pandas as pd
import numpy as np
def simulate_pmcc(prices, iv, dte_long=365, dte_short=35,
target_long_delta=0.8, target_short_delta=0.3):
# Pseudo-code; real version needs option price model (BS) or historical chain
cash = 5000
long_leg = open_leaps(prices[0], dte_long, target_long_delta, iv[0])
cash -= long_leg.cost
short_leg = open_short_call(prices[0], dte_short, target_short_delta, iv[0])
cash += short_leg.premium
pnl_curve = []
for t, px in enumerate(prices):
# Mark to market
mv = long_leg.value(px, t, iv[t]) - short_leg.value(px, t, iv[t])
pnl_curve.append(cash + mv)
# Roll short on expiry
if short_leg.is_expired(t):
cash += short_leg.settle(px)
short_leg = open_short_call(px, dte_short, target_short_delta, iv[t])
cash += short_leg.premium
# Roll long every 9 months
if long_leg.dte(t) < 90:
cash += long_leg.settle(px)
long_leg = open_leaps(px, dte_long, target_long_delta, iv[t])
cash -= long_leg.cost
return np.array(pnl_curve)
7.2 典型回测结果(参考量级,非实测数据)
| 策略 | 起始资金 | CAGR | Max DD | Sharpe | Calmar |
|---|---|---|---|---|---|
| Buy & Hold SPY | $5,000 | 11% | -24% | 0.75 | 0.46 |
| Covered Call (SPY 100% capital) | $5,000* | 9.5% | -22% | 0.85 | 0.43 |
| PMCC (SPY, leverage ~4x) | $5,000 | 28% | -55% | 0.78 | 0.51 |
| PMCC (5 个股,diversified) | $5,000 | 19% | -38% | 0.92 | 0.50 |
*Covered Call 需要 $50k 才能跑 100% 仓位;$5k 只能跑 fractional,仅用作对照。
结论:
- PMCC 单 SPY 集中度高 → CAGR 高但 MaxDD 极大
- PMCC 多个股 diversified → CAGR 中等,Sharpe 最高,Calmar 最优
- 直接 CC 在 <$5k 账户上根本不可行(资本不够)—— PMCC 是「<$5k 唯一能做 CC 经济效应的方法」
八、「成熟 trader 的隐藏 favorite」
PMCC 在期权论坛(r/options、tastytrade 社区、Option Alpha)是被反复推崇的策略——但几乎不在散户教材主流出现,因为它需要:
- 懂 Delta / Theta / Vega 的相互作用
- 能管理 LEAPS 的时间价值消耗
- 知道什么时候 roll、什么时候 close
- 心理上能承受 LEAPS 的 5x 杠杆波动
Pro 圈子热度高的原因:
- 资金效率:用 25% 资本做 100% CC 的事
- 收益增强:每月叠加 short call premium
- 灵活性:可以根据观点调整长腿 Delta(0.7 = 偏防御,0.9 = 接近持股)
对个人量化的吸引力:
- 可程序化(选腿、roll 都能写脚本)
- 跨标的可扩展(10 个低价股 PMCC 组合 = 类 ETF 的多元化)
- 风险可量化(Delta exposure 清晰)
但同时它也是「被打爆」的 #2 原因(#1 是裸卖期权)—— 因为新手只看到 leverage 的好处,忽略了 leverage 的代价。
九、PM 视角:用更少资本撬动相同 exposure
回到金融 PM 的核心思维框架——资本效率(Capital Efficiency)vs 杠杆风险(Leverage Risk):
| 维度 | 直接持股 | Covered Call | PMCC |
|---|---|---|---|
| 资本占用 | 100% | 100% | 25-30% |
| Delta exposure | 1.0 | 0.8-0.9(被 CC 限制上行) | 0.6-0.8 |
| Theta 收益 | 0 | +CC premium | +CC premium |
| 隐性成本 | 0 | 0 | LEAPS theta decay |
| 最大损失 | -100%(极端) | -100% | -100%(更快达到) |
| 心理负担 | 低 | 中 | 高 |
类比金融业务架构:
- 直接持股 = 自建数据中心(重资本、不灵活)
- Covered Call = 自建 + 出租部分算力(重资本但有收入)
- PMCC = 租用云计算 + 出租部分(轻资本但「断电」风险高)
这是个资金效率 vs 风险敞口的取舍——没有对错,只看你的目标和约束。
9.1 三条 PM 级别的迁移性思考
-
杠杆永远是双向的:PMCC 的「46% 年化收益」不是阿尔法,是 beta 的 5 倍放大。在金融产品设计里——任何看起来「比同类高很多」的收益率,背后一定有同等放大的风险,找不到风险点说明你还没看懂。
-
资本效率不等于风险调整后的优势:Sharpe 才是衡量「单位风险下的收益」。PMCC 的 Sharpe 通常和 CC 接近——这意味着市场基本是有效的,「省下来的资本」并没有变成免费午餐,只是换了一种形式。
-
「隐性成本」是金融产品最容易被低估的部分:LEAPS 的 theta decay 就像云服务的 egress 费用——不显眼,但累积起来会吃掉相当大比例的「显性收益」。设计产品时,任何持有期内的 silent cost 都要先模型化。
十、明日预告
Day 71: 实战 long calendar — paper 账户 SPY ATM 月度日历
- 选 strike:SPY 当前 ATM
- 选 expiry:30DTE 短 + 60DTE 长
- 用 BAG combo 一次提交
- 跟踪 IV 变化、theta 实际兑现、20% profit target 自动止盈
- 第一次完整跑「建仓 → 持有 → 平仓」full lifecycle 的 calendar 实战
实际执行记录
启动一项填一项,时间戳 + 卡点。
- [hh:mm]
pmcc_setup.py跑通 — 候选 PMCC 表格生成 ___ - [hh:mm] 选定第一个低价股 PMCC(拟 F 或 INTC)— 净 debit ___
- [hh:mm] BAG combo 单提交(paper)— 成交价 ___
- [hh:mm] PMCC vs CC 回测 skeleton 跑通 — Sharpe 比 ___
- [hh:mm] LEAPS 资本占用 vs 直接持股的 5 个 ticker 对比表 ___
- 卡点 / 学到的:___
总字数:约 6,200 字 今日完成度:理论 ✓ / 实操(paper 选腿 + BAG 测试)/ 笔记 ✓