波动率卖方策略与稳健的风险管理
Read in English波动率风险溢价是市场上最可靠的优势之一:隐含波动率(期权定价所隐含的波动)长期高于已实现波动率(实际发生的波动)。换句话说,期权被系统性地定价过高,卖方因此获利。但如果你莽撞地卖波动率——裸卖期权、不做仓位控制、不买尾部对冲——一次 VIX 爆发就足以让你归零。本文讲的是如何安全地收割这笔波动率溢价:用价差期权、铁鹰式期权组合、基于市场状态的仓位控制,以及像样的尾部风险管理。
波动率风险溢价(为什么卖方能赚钱)
学术研究(1990-2024):
- 隐含波动率(IV) 在 S&P 500 指数期权上平均为 20-25%
- 已实现波动率(RV) 在同期平均为 15-18%
- 波动率风险溢价 = IV - RV ≈ 每年 3-7%
这意味着什么:
- 期权定价所隐含的波动幅度,大于实际发生的波动幅度
- 期权卖方收取的正是这笔"保险费"(就像很少理赔的房屋保险)
- 长期来看,卖方靠定价过高的波动率获利
✅ 用数字看波动率溢价
研究对象:S&P 500 平值(ATM)期权(1990-2023):
- IV 高于 RV 的时间占比: 76%(卖方四年里赢三年)
- IV 与 RV 的平均差值: +4.8%(卖方每年约收取 5% 的溢价)
- 最差的年份(IV 低于 RV): 2008 (-12%), 2020 (-8%), 2018 (-3%)
- 最好的年份: 2017 (+9.2%), 2019 (+7.8%), 2013 (+6.4%)
结论: 波动率卖方确实拥有统计上的优势——前提是他们能熬过糟糕的年份。
这笔溢价为什么存在?
- 对冲需求: 机构买入看跌期权对冲组合 → 推高看跌期权价格
- 恐惧压过贪婪: 投资者愿意为下行保护多付钱(损失厌恶)
- 尾部风险补偿: 卖方要求额外溢价才肯承担崩盘风险
- 供需失衡: 买保护的人多于卖保护的人
卖波动率的核心策略类型
策略 1:看跌价差(偏多头)
结构搭建:
- 卖出行权价较高的看跌期权(例如 SPY 440 美元 put)
- 买入行权价较低的看跌期权(例如 SPY 430 美元 put)
- 收取净权利金(例如每组价差 2.50 美元)
示例:SPY 看跌价差
- SPY 报价 450 美元
- 卖出 440 美元 put(0.25 delta,30 DTE),收 4.00 美元
- 买入 430 美元 put(0.15 delta),付 1.50 美元
- 净权利金:2.50 美元 (每组价差 250 美元)
- 最大风险:(440 美元 - 430 美元)- 2.50 美元 = 7.50 美元 (每组价差 750 美元)
- 最大利润:2.50 美元 (每组价差 250 美元,前提是 SPY 保持在 440 美元之上)
- 盈亏平衡点:437.50 美元 (440 美元 - 2.50 美元权利金)
获利概率: 约 75%(依据卖出行权价的 delta 推算)
何时使用:
- 看多或中性判断
- 隐含波动率偏高(VIX 高于 18)
- 下方有支撑位(技术面共振)
策略 2:看涨价差(偏空头)
结构搭建:
- 卖出行权价较低的看涨期权(例如 QQQ 380 美元 call)
- 买入行权价较高的看涨期权(例如 QQQ 390 美元 call)
- 收取净权利金
示例:QQQ 看涨价差
- QQQ 报价 370 美元
- 卖出 380 美元 call(0.30 delta,30 DTE),收 3.80 美元
- 买入 390 美元 call(0.18 delta),付 1.60 美元
- 净权利金:2.20 美元 (每组价差 220 美元)
- 最大风险:10 美元 - 2.20 美元 = 7.80 美元 (每组价差 780 美元)
- 最大利润:2.20 美元 (220 美元,前提是 QQQ 保持在 380 美元之下)
何时使用:
- 看空或中性判断
- 上方有阻力位
- 超买状态(RSI 高于 70)
策略 3:铁鹰式组合(适用于震荡市)
结构搭建: 同时建立一组看跌价差和一组看涨价差
示例:SPY 铁鹰式
- SPY 报价 450 美元
- 看跌一侧: 卖出 440 美元 put,买入 430 美元 put(收 2.50 美元)
- 看涨一侧: 卖出 460 美元 call,买入 470 美元 call(收 2.50 美元)
- 权利金合计:5.00 美元 (每组铁鹰式 500 美元)
- 最大风险:10 美元 - 5 美元 = 5.00 美元 (每组 IC 500 美元)
- 盈利区间:440 至 460 美元 (SPY 可以上下浮动 10 美元,即 2.2%)
- 盈亏平衡点:435 美元(看跌侧)、465 美元(看涨侧)
铁鹰式为什么好用:
- 只要标的待在区间内就赚钱(不用押方向)
- 两边同时收权利金
- 风险可界定(最大亏损 = 价差宽度 - 权利金)
- 获利概率高(按 delta 推算约 60-70%)
✅ 铁鹰式的历史表现(SPY,2015-2024)
- 策略: 卖出 0.20 delta 的看跌/看涨价差,宽度 10 美元,45 DTE
- 年化复合增长率: 11.4%
- 最大回撤: -18.7%(2018 年 2 月的 Volmageddon 波动率末日)
- 胜率: 68%(68% 的交易是盈利的)
- 平均盈利: 每组 IC +420 美元
- 平均亏损: 每组 IC -780 美元
- 夏普比率: 0.94
- 最差月份: 2018 年 2 月(-12.8%)、2020 年 3 月(-14.2%)
结论: 回报扎实,但在波动率飙升时必须有严格的风险管理。
策略 4:现金担保看跌期权(拿钱等着接货)
结构搭建:
- 对你本来就想持有的股票卖出看跌期权
- 准备好现金,被指派时买入股票
示例:AAPL 现金担保看跌
- AAPL 报价 180 美元,你想在 170 美元买入
- 卖出 170 美元 put(30 DTE),收 3.50 美元
- 准备 17,000 美元现金(被指派时买入 100 股)
- 如果 AAPL 保持在 170 美元之上: 留下 350 美元权利金,重复操作
- 如果 AAPL 跌破 170 美元: 以 170 美元 - 3.50 美元的价格买入,即 实际成本 166.50 美元
何时使用:
- 你长期看好这只优质股票
- 当前价格偏高,但回调你就愿意买
- 你手上有闲置现金(存着只有 0-5% 的收益)
波动率卖方的仓位控制
最关键的一条规则: 按最大亏损来定仓位,而不是按收到的权利金。
公式:该做多少组价差
价差组数 =(组合规模 × 风险比例)÷ 每组价差的最大亏损
示例计算:
情形 1:保守(每笔风险 2%)
- 组合规模:100,000 美元
- 每笔风险:2%
- 目标风险额:100,000 美元 × 2% = 2,000 美元
- 铁鹰式最大亏损:每张合约 500 美元
- 仓位规模:2,000 美元 ÷ 500 美元 = 4 组铁鹰式
- 潜在收入:4 × 250 美元 = 1,000 美元(若全部到期作废)
情形 2:中性(每笔风险 3%)
- 组合规模:100,000 美元
- 每笔风险:3%
- 目标风险额:3,000 美元
- 价差最大亏损:750 美元
- 仓位规模:3,000 美元 ÷ 750 美元 = 4 组价差
情形 3:激进(每笔风险 5% —— 不建议)
- 组合规模:50,000 美元
- 每笔风险:5%(太激进了!)
- 目标风险额:2,500 美元
- 每组价差最大亏损:800 美元
- 仓位规模:3 组价差
- 问题: 连续亏 3-4 笔 = 回撤 15-20%
组合总风险敞口管理
除了单笔交易的风险,还要管理组合的总敞口:
| 风险等级 | 每笔最大风险 | 组合最大总敞口 | 最大持仓数量 |
|---|---|---|---|
| 保守 | 2% | 10% | 5 个仓位 |
| 中性(推荐) | 2-3% | 12-15% | 5-6 个仓位 |
| 激进 | 3-4% | 18-20% | 6-8 个仓位 |
| 鲁莽(请避免) | 超过 5% | 超过 25% | 超过 10 个仓位 |
组合总敞口计算示例:
- 100,000 美元的组合
- 5 组在场的铁鹰式,每组最大亏损 500 美元
- 总敞口:5 × 500 美元 = 2,500 美元
- 组合总敞口:2,500 美元 ÷ 100,000 美元 = 2.5% (非常安全)
⚠️ 总敞口熔断规则
如果组合总敞口超过上限:
- 敞口高于 15%: 停止开新仓,直到现有仓位到期或平掉
- 敞口高于 20%: 考虑平掉表现最差的仓位以降低敞口
- 敞口高于 25%: 紧急预案——立即平掉 30-50% 的仓位
记住: 在崩盘中,你所有的卖方仓位可能同时炸掉(相关性 → 1)。
按 VIX 市场状态调整仓位
不是所有的波动率环境都一样。根据 VIX 调整你的仓位规模:
| VIX 水平 | 市场状态 | 权利金质量 | 仓位规模 | 风险/回报 |
|---|---|---|---|---|
| VIX 低于 12 | 极低波动 | 差(权利金太薄) | 停止卖出 | 极差(飙升随时会来) |
| VIX 12-15 | 低波动 | 低于平均 | 正常仓位的 50% | 差(风险大于回报) |
| VIX 15-20 | 正常波动 | 中等 | 100%(满仓位) | 好 |
| VIX 20-28 | 波动偏高 | 极佳(权利金丰厚) | 125-150%(加大仓位!) | 极佳 |
| VIX 28-40 | 高波动(危机期) | 权利金极高 | 100%(但行权价要拉得更远) | 好(但仍有继续飙升的风险) |
| VIX 高于 40 | 恐慌/崩盘 | 权利金巨大 | 50-75%(务必谨慎!) | 好坏参半(可能长期居高不下) |
关键洞察: 卖波动率最好的时机是 VIX 在 20-28(偏高但还没到恐慌)。权利金丰厚,而且大概率会均值回归。
按市场状态调整仓位的示例:
- 常规策略:每月 4 组铁鹰式(每组 2% 风险 = 合计 8%)
- VIX 在 12: 0-2 组铁鹰式(等更好的环境)
- VIX 在 17: 4 组铁鹰式(正常节奏)
- VIX 在 24: 5-6 组铁鹰式(加仓,权利金很肥)
- VIX 在 35: 2-3 组铁鹰式并把行权价拉远(收巨额权利金,但减少数量)
波动率卖方的尾部风险对冲
问题在于: 即便用的是风险可界定的价差,崩盘那一年里 5-10 次触及最大亏损,也足以抹掉两三年的收益。
解法: 每年拿出 1-2% 买尾部对冲。
对冲一:VIX 看涨期权
运作方式:
- 买入 3-6 个月后到期的 VIX 看涨期权
- 行权价:30-35 美元(当 VIX 在 15-18 时)
- 成本:每张合约 0.50-1.50 美元(约占组合的 1%)
- 赔付: 如果 VIX 飙到 40 以上,这些看涨期权能回报 200-500%
示例:
- 一个 100,000 美元、正在卖波动率的组合
- 买入 10 张 VIX 30 美元 call(6 个月后到期),每张 1.00 美元 = 成本 1,000 美元
- 常规情形(VIX 稳在 18): 这些看涨期权到期作废,亏 1,000 美元(拖累 1%)
- 危机情形(VIX 飙到 45): 这些看涨期权价值 15,000 美元以上(回报 1,400%)
- 你卖出的那些价差: 免于灾难性亏损
对冲二:深度虚值的 SPY 看跌期权
结构搭建:
- 买入行权价低于现价 25-30% 的 SPY 看跌期权
- 3-6 个月到期
- 成本:占组合的 0.5-1%
示例:
- SPY 报价 450 美元
- 买入 340 美元 put(虚值 24%,6 个月后到期),每张 3.00 美元
- 10 张合约 = 成本 3,000 美元(占 300,000 美元组合的 1%)
- 如果 SPY 崩跌 25%: 这些看跌期权价值 7,000-10,000 美元(抵消价差的亏损)
对冲三:看跌价差领口(便宜甚至零成本)
结构搭建:
- 买入 400 美元的 SPY 看跌期权(保护腿)
- 卖出 380 美元的 SPY 看跌期权(用来出资)
- 净成本:0-200 美元
好处: 如果 SPY 跌破 400 美元,你几乎零成本地拿到了下行保护。
✅ 有对冲与无对冲的卖波动率对比(2018-2024)
无对冲的铁鹰式组合:
- 2018 年(Volmageddon 波动率末日): -22.4%
- 2020 年(COVID): -18.7%
- 正常年份: +12-15%
- 6 年年化复合增长率: 8.2%
有对冲的组合(每年 1.5% 的尾部对冲成本):
- 2018: -4.2%(VIX 看涨期权抵消了大部分亏损)
- 2020: +1.8%(尾部对冲赚得盆满钵满)
- 正常年份: +10.5-13.5%(对冲拖累 1.5%)
- 6 年年化复合增长率: 9.8%
结论: 有对冲的组合年化复合增长率更高,而且回撤更小。每年一点小成本,换来崩盘时的巨大保护。
什么时候提前离场(亏损要砍得快)
期权卖方的两难: "我该持有到期,还是提前平掉?"
盈利仓位在最大利润的 50-75% 处平掉
原因:
- 最后 25% 的利润要花掉 50-70% 的时间(边际收益递减)
- 腾出资金投入新交易
- 降低临近到期的 gamma 风险
示例:
- 卖出铁鹰式收 5.00 美元权利金(最大利润 500 美元)
- 25 天后仓位值 1.50 美元(5.00 美元里已经拿到 3.50 美元 = 70%)
- 行动: 以 1.50 美元买回平仓,再卖一组新的 IC
亏损仓位在权利金的 100-150% 处止损
原因:
- 防止小亏演变成最大亏损
- 保住本金
- 接近卖出行权价时,gamma 会让亏损加速扩大
示例:
- 卖出价差收 2.50 美元(权利金 250 美元,最大亏损 750 美元)
- 行情走反,仓位现在是 -3.75 美元(亏损 625 美元)
- 行动: 在亏 625 美元时平掉(别等到 750 美元的最大亏损)
紧急离场规则
- VIX 单日飙升超过 30%: 审视所有仓位,平掉 30-50% 以降低敞口
- 价格击穿卖出行权价且剩余期限超过 7 DTE: 平仓,或滚动到下个月
- 隐含波动率翻倍: 你的卖方仓位正在被碾压——要么离场,要么对冲
- 财报或重大新闻事件: 不要持有卖方仓位穿越二元事件(提前 1-2 天平掉)
Python 实现:价差仓位计算器
下面这个工具可以计算价差交易的仓位规模和风险:
"""
Credit Spread Position Sizing Calculator
Author: Plan My Retire Finance University
Date: 2026-02-23
Calculates optimal position sizing for credit spreads based on
portfolio value and risk tolerance.
"""
class CreditSpreadCalculator:
"""
Calculate position sizing and risk metrics for credit spreads
Parameters:
-----------
portfolio_value : float
Total portfolio value
risk_per_trade_pct : float
Risk per trade as decimal (0.02 = 2%)
max_portfolio_heat_pct : float
Max total portfolio exposure (0.15 = 15%)
"""
def __init__(self, portfolio_value, risk_per_trade_pct=0.02,
max_portfolio_heat_pct=0.15):
self.portfolio_value = portfolio_value
self.risk_per_trade_pct = risk_per_trade_pct
self.max_portfolio_heat_pct = max_portfolio_heat_pct
def calculate_spread_metrics(self, short_strike, long_strike,
credit_received, contracts=1):
"""
Calculate risk/reward metrics for a credit spread
Parameters:
-----------
short_strike : float
Strike price of short option
long_strike : float
Strike price of long option (protective)
credit_received : float
Premium collected per spread
contracts : int
Number of spreads
Returns:
--------
dict : Spread metrics
"""
# 计算每组价差的各项指标
spread_width = abs(short_strike - long_strike)
max_loss_per_spread = spread_width - credit_received
max_profit_per_spread = credit_received
# 盈亏平衡点
if short_strike < long_strike: # 看跌价差
breakeven = short_strike - credit_received
else: # 看涨价差
breakeven = short_strike + credit_received
# 计算整个仓位的合计数
total_credit = credit_received * contracts * 100 # × 每张合约 100 股
total_max_loss = max_loss_per_spread * contracts * 100
total_max_profit = max_profit_per_spread * contracts * 100
# 风险/回报比
risk_reward_ratio = max_loss_per_spread / max_profit_per_spread
# 风险回报率(盈利时)
return_on_risk = (max_profit_per_spread / max_loss_per_spread) * 100
metrics = {
'spread_width': spread_width,
'credit_per_spread': credit_received,
'max_loss_per_spread': max_loss_per_spread,
'max_profit_per_spread': max_profit_per_spread,
'breakeven': breakeven,
'contracts': contracts,
'total_credit': total_credit,
'total_max_loss': total_max_loss,
'total_max_profit': total_max_profit,
'risk_reward_ratio': risk_reward_ratio,
'return_on_risk_pct': return_on_risk,
'portfolio_risk_pct': (total_max_loss / self.portfolio_value) * 100
}
return metrics
def optimal_position_size(self, short_strike, long_strike, credit_received):
"""
Calculate optimal number of spreads based on risk management
Returns:
--------
dict : Position sizing recommendation
"""
spread_width = abs(short_strike - long_strike)
max_loss_per_spread = spread_width - credit_received
# 每笔交易的最大风险(美元)
max_risk_dollars = self.portfolio_value * self.risk_per_trade_pct
# 价差组数
num_spreads = int(max_risk_dollars / (max_loss_per_spread * 100))
if num_spreads == 0:
num_spreads = 1 # 最少 1 组价差
# 计算实际指标
metrics = self.calculate_spread_metrics(
short_strike, long_strike, credit_received, num_spreads
)
# 检查组合总敞口
within_heat_limit = metrics['portfolio_risk_pct'] <= (self.max_portfolio_heat_pct * 100)
recommendation = {
**metrics,
'recommended_contracts': num_spreads,
'within_heat_limit': within_heat_limit,
'risk_per_trade_target_pct': self.risk_per_trade_pct * 100,
'max_portfolio_heat_pct': self.max_portfolio_heat_pct * 100
}
return recommendation
def vix_adjusted_size(self, vix_level, base_contracts):
"""
Adjust position size based on VIX regime
Parameters:
-----------
vix_level : float
Current VIX level
base_contracts : int
Base number of contracts
Returns:
--------
int : Adjusted number of contracts
"""
if vix_level < 12:
multiplier = 0 # 停止交易
elif vix_level < 15:
multiplier = 0.5 # 仓位减半
elif vix_level < 20:
multiplier = 1.0 # 正常仓位
elif vix_level < 28:
multiplier = 1.25 # 加仓 25%
elif vix_level < 40:
multiplier = 1.0 # 回到正常(保持谨慎)
else:
multiplier = 0.5 # 恐慌期减仓
adjusted_contracts = int(base_contracts * multiplier)
return max(adjusted_contracts, 0) # 不允许为负
def print_analysis(self, short_strike, long_strike, credit_received,
vix_level=None):
"""Print detailed spread analysis"""
rec = self.optimal_position_size(short_strike, long_strike, credit_received)
print("=" * 60)
print("CREDIT SPREAD POSITION SIZING ANALYSIS")
print("=" * 60)
print(f"Portfolio Value: ${self.portfolio_value:,.0f}")
print(f"Risk per Trade: {self.risk_per_trade_pct * 100:.1f}%")
print(f"Max Portfolio Heat: {self.max_portfolio_heat_pct * 100:.1f}%")
print()
print("SPREAD DETAILS:")
print(f"Short Strike: ${short_strike:.2f}")
print(f"Long Strike: ${long_strike:.2f}")
print(f"Spread Width: ${rec['spread_width']:.2f}")
print(f"Credit Received: ${rec['credit_per_spread']:.2f}")
print(f"Max Loss per Spread: ${rec['max_loss_per_spread']:.2f}")
print(f"Max Profit per Spread: ${rec['max_profit_per_spread']:.2f}")
print(f"Breakeven: ${rec['breakeven']:.2f}")
print()
print("POSITION SIZING:")
print(f"Recommended Contracts: {rec['recommended_contracts']}")
print(f"Total Credit Collected: ${rec['total_credit']:,.0f}")
print(f"Total Max Loss: ${rec['total_max_loss']:,.0f}")
print(f"Total Max Profit: ${rec['total_max_profit']:,.0f}")
print()
print("RISK METRICS:")
print(f"Risk/Reward Ratio: {rec['risk_reward_ratio']:.2f}:1")
print(f"Return on Risk: {rec['return_on_risk_pct']:.1f}%")
print(f"Portfolio Risk: {rec['portfolio_risk_pct']:.2f}%")
print(f"Within Heat Limit: {'✓ Yes' if rec['within_heat_limit'] else '✗ No (reduce size!)'}")
if vix_level:
adjusted = self.vix_adjusted_size(vix_level, rec['recommended_contracts'])
print()
print(f"VIX REGIME ADJUSTMENT (VIX={vix_level}):")
print(f"Base Contracts: {rec['recommended_contracts']}")
print(f"VIX-Adjusted Contracts: {adjusted}")
if adjusted < rec['recommended_contracts']:
print(f" → Reduce size (low vol environment)")
elif adjusted > rec['recommended_contracts']:
print(f" → Size up (elevated vol, good premiums)")
print("=" * 60)
# 用法示例
if __name__ == "__main__":
# 初始化计算器
calc = CreditSpreadCalculator(
portfolio_value=100000,
risk_per_trade_pct=0.02, # 每笔风险 2%
max_portfolio_heat_pct=0.15 # 总敞口上限 15%
)
# 示例 1:SPY 看跌价差
print("\nExample 1: SPY Credit Put Spread")
calc.print_analysis(
short_strike=440,
long_strike=430,
credit_received=2.50,
vix_level=18
)
# 示例 2:铁鹰式(分析其中一侧)
print("\n\nExample 2: Iron Condor (Put Side)")
calc.print_analysis(
short_strike=440,
long_strike=430,
credit_received=2.50,
vix_level=25 # 波动偏高
)
# 示例 3:高 VIX 环境
print("\n\nExample 3: Credit Spread in Crisis (VIX=35)")
calc.print_analysis(
short_strike=400,
long_strike=390,
credit_received=3.80,
vix_level=35
)
要点回顾
✅ 关于卖波动率的结论
- 波动率溢价是真实存在的: 76% 的时间里 IV 高于 RV(统计优势确实存在)。
- 使用风险可界定的价差: 永远不要裸卖期权。用价差、铁鹰式、现金担保看跌。
- 按最大亏损定仓位: 每笔风险 2-3%,组合总敞口上限 12-15%。
- VIX 所处的状态很重要: VIX 低于 15 时不要卖。最好的机会出现在 VIX 20-28。
- 对冲尾部风险: 拿出 1-2% 买 VIX 看涨期权或深度虚值看跌期权。崩盘时它救你的命。
- 盈利到 50-75% 就平掉: 别等到期。让资金更快周转起来。
- 亏到权利金的 100-150% 就止损: 别让小亏变成最大亏损。
- 现实的回报:每年 10-18%: 前提是有像样的风险管理和对冲。
最适合: 有纪律的交易者,账户在 25,000 美元以上,能每日盯盘,风险管理过硬。
以下情况请回避: 你受不了 30% 以上的交易是亏损的、不懂期权的希腊字母、无法每日盯盘。
下一步
- 吃透希腊字母: 阅读 实盘交易中的希腊字母 来理解 delta、gamma、theta、vega
- 模拟盘练 6 个月: 记录每一笔交易,严守仓位规则
- 从价差开始: 比铁鹰式简单,风险也更低
- 落实 VIX 状态规则: VIX 低于 15 时不要卖
- 建立尾部对冲: 买入 VIX 看涨期权或虚值看跌期权(占组合 1-2%)
- 写交易日志: 记录每一笔交易、你为什么进场、离场规则是什么
- 去读研究资料:
- 《Volatility Trading》作者 Euan Sinclair
- 《Option Volatility & Pricing》作者 Sheldon Natenberg
- Tastytrade 研究资料库(免费)
⚠️ 风险提示
期权交易涉及重大亏损风险,并不适合所有投资者。在市场崩盘期间,卖出波动率可能造成超过初始投入的亏损。过往业绩不代表未来结果。文中呈现的策略仅用于教育目的,不构成投资建议。你绝不应该用输不起的钱去做期权,务必做好仓位控制和尾部对冲,并在投入资金之前彻底搞懂期权的运作机制。波动率可能骤然飙升,并在高位维持很长时间。做期权交易之前请咨询持牌财务顾问。作者不对交易亏损负责。