返回交易笔记
TR Day 70

Diagonal Spread + LEAPS / PMCC

Diagonal spread 与 calendar 的差别、LEAPS 作为「股票替代」的底层逻辑、PMCC 完整结构

2026-07-18
Phase 3: 实盘+规模化+迁移
DiagonalSpreadLEAPSPMCCPoorMansCoveredCallLeverageOptionCapitalEfficiency

日期: 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 不同」这一个自由度,但策略含义完全不同

特征CalendarDiagonal
方向性接近中性(依赖标的横盘)可强烈方向性(看你怎么搭 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 call1Y ITM LEAPS call
Delta~0.50~0.85
Gamma高(接近 expiry 时炸)
Theta/天(每天烧 1-2%)(每天烧 0.05-0.1%)
Vega(远期对 IV 极敏感)
时间价值占比100%20-30%(大部分是内在价值)
行为像「彩票」像「带杠杆+到期日的股票」

对 PMCC 来说真正重要的两条

  1. Theta 慢但累积:每天烧得不多,但 365 天加起来不容忽视。如果标的横盘 1 年,你的 LEAPS 会损失 20-30% 价值(即便股价没动)——这是 PMCC 「隐性持有成本」。
  2. 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~$140ITM → 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

两个观察

  1. PMCC 在横盘和小幅下跌时显著优于直接持股+CC(因为占用资本少)
  2. 大涨时 PMCC 比直接 CC 差——因为 LEAPS Delta 不是 1.0,而 short call 上涨的损失却接近 1:1

3.3 「年化收益」的视觉陷阱

月度 premium $5 × 12 个月 / LEAPS 成本 $130 = 46% annualized

新手看到这个数字会觉得:「我找到圣杯了。」这是错觉。原因:

  1. 杠杆放大:LEAPS 给了你 ~5x 的资本效率,所以收益率 ÷ 杠杆 = 实际「无杠杆 yield」≈ 9% — 跟 CC 的 12% 年化差不多甚至略低。
  2. 风险也被放大:横盘可以——但大跌时 LEAPS 不能像股票一样「不卖就没事」。它有到期日,可能归零。
  3. 再投资风险:每月你赚的 $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 - $30LEAPS 单张资本占用 $500-$2,000
Market Cap≥$5B避免被妖股 / pump & dump
Options OILEAPS 每 strike ≥500 OI流动性
IV Rank30-70太低(赚不到 premium),太高(LEAPS 也贵)
Beta0.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 典型回测结果(参考量级,非实测数据)

策略起始资金CAGRMax DDSharpeCalmar
Buy & Hold SPY$5,00011%-24%0.750.46
Covered Call (SPY 100% capital)$5,000*9.5%-22%0.850.43
PMCC (SPY, leverage ~4x)$5,00028%-55%0.780.51
PMCC (5 个股,diversified)$5,00019%-38%0.920.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)是被反复推崇的策略——但几乎不在散户教材主流出现,因为它需要:

  1. 懂 Delta / Theta / Vega 的相互作用
  2. 能管理 LEAPS 的时间价值消耗
  3. 知道什么时候 roll、什么时候 close
  4. 心理上能承受 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 CallPMCC
资本占用100%100%25-30%
Delta exposure1.00.8-0.9(被 CC 限制上行)0.6-0.8
Theta 收益0+CC premium+CC premium
隐性成本00LEAPS theta decay
最大损失-100%(极端)-100%-100%(更快达到)
心理负担

类比金融业务架构

  • 直接持股 = 自建数据中心(重资本、不灵活)
  • Covered Call = 自建 + 出租部分算力(重资本但有收入)
  • PMCC = 租用云计算 + 出租部分(轻资本但「断电」风险高)

这是个资金效率 vs 风险敞口的取舍——没有对错,只看你的目标和约束。

9.1 三条 PM 级别的迁移性思考

  1. 杠杆永远是双向的:PMCC 的「46% 年化收益」不是阿尔法,是 beta 的 5 倍放大。在金融产品设计里——任何看起来「比同类高很多」的收益率,背后一定有同等放大的风险,找不到风险点说明你还没看懂。

  2. 资本效率不等于风险调整后的优势:Sharpe 才是衡量「单位风险下的收益」。PMCC 的 Sharpe 通常和 CC 接近——这意味着市场基本是有效的,「省下来的资本」并没有变成免费午餐,只是换了一种形式。

  3. 「隐性成本」是金融产品最容易被低估的部分: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 测试)/ 笔记 ✓