Gamma scalping 是做市商和波动率交易员的核心策略之一。操作逻辑很直白:买入跨式期权获得正 Gamma 敞口,然后通过持续的 Delta 对冲把标的物的价格波动转化为锁定的利润。不赌方向,赚的是实现波动率和隐含波动率之间的差值。

做空波动率的逻辑正好相反。做空波动率的人希望标的不动,收取 Theta 衰减;gamma scalping 的人希望标的大幅波动,用对冲锁定的利润覆盖掉每天流失的时间价值。

Gamma Scalping 赚什么钱

买入一个 ATM straddle 后,你持有正 Gamma 头寸。Gamma 的作用是让你的 Delta 随着标的移动自动朝有利方向偏移:标的涨了,你的净 Delta 变正(相当于自动做多);标的跌了,你的净 Delta 变负(相当于自动做空)。

这种凸性(convexity)意味着:大幅波动对你有利,而且是非线性的有利。标的动 2 块钱的收益,比动 1 块钱的两倍还多。

Gamma scalping 的操作是反复"压平"这个自动产生的 Delta:标的涨了,卖股票把 Delta 压回零;标的跌了,买股票把 Delta 压回零。每次对冲就是一次"高抛低吸"。只要标的持续波动,你就持续在高卖低买。

代价是 Theta 衰减。你买的期权每天都在贬值。如果标的一天只动了几毛钱,你对冲赚的那点钱根本覆盖不了 Theta 的流失。

所以本质上,gamma scalping 是在做一个赌注:实现波动率会超过隐含波动率。你为隐含波动率付了钱(买期权的成本),然后通过对冲去"兑现"实现波动率带来的收益。

数学:Gamma P&L 和 Theta P&L 的对冲

这部分建立直觉:为什么标的动得够多就能赚钱,动得不够就亏。

持有一个 Delta 中性的期权组合,一小段时间 \(\Delta t\) 内的盈亏可以用 Taylor 展开近似为:

$$\text{P\&L} \approx \frac{1}{2} \Gamma (\Delta S)^2 + \Theta \cdot \Delta t$$

第一项是 Gamma P&L:标的变动 \(\Delta S\) 带来的凸性收益,跟 \((\Delta S)^2\) 成正比,永远为正(因为你是 long gamma)。第二项是 Theta P&L:时间流逝带来的损耗,永远为负(因为你买了期权)。

盈亏平衡条件:

$$\frac{1}{2} \Gamma (\Delta S)^2 + \Theta \cdot \Delta t = 0$$

解出每日需要的最小波动:

$$|\Delta S|_{\text{breakeven}} = \sqrt{\frac{-2\Theta}{\Gamma}}$$

Gamma P&L 凸性:标的波动越大,盈利加速

举个具体例子:你的组合 Gamma = 80(10 手 straddle),每天 Theta = -$160。

$$|\Delta S|_{\text{breakeven}} = \sqrt{\frac{2 \times 160}{80}} = \sqrt{4} = 2$$

标的每天至少要动 $2 才能打平。动超过 $2 就赚钱,动不到 $2 就亏钱。

把这个盈亏平衡点转换成年化波动率也很有用。如果标的价格是 $500,每日 $2 的波动对应的年化波动率约为:

$$\sigma_{\text{breakeven}} = \frac{2}{500} \times \sqrt{252} \approx 6.3\%$$

如果你买期权时付的隐含波动率是 18%,那你需要实现波动率超过 18% 才能赚钱。这跟买期权的直觉一致:你付了 18% 的 IV,需要市场至少实现 18% 的波动。

操作流程:一个完整的 Gamma Scalping 案例

建仓

标的:SPY,当前价 $502 买入:10 手 30 天 ATM straddle($502 行权价) 成本:Call $7.80 + Put $7.40 = $15.20/手,总成本 $15,200

初始 Greeks(10 手合计):

  • Delta:约 +20(接近零)
  • Gamma:+80
  • Theta:-$160/天
  • Vega:+$440

用 20 股空头把初始 Delta 压到零。

第一天:SPY 涨到 $504

涨了 $2,新 Delta ≈ 20 + 80 × 2 = +180。你现在相当于多了 180 股的多头暴露。

操作:卖出 180 股 SPY @ $504,Delta 回零。

第二天:SPY 回落到 $501

跌了 $3,Delta ≈ 0 + 80 × (-3) = -240。

操作:买入 240 股 SPY @ $501。

从对冲的角度看:第一天 $504 卖了 180 股,第二天 $501 买了 240 股。其中 180 股形成了一次完整的"高卖低买",每股赚 $3,利润 $540。

两天的 Theta 损耗:$160 × 2 = $320。

净盈亏:$540 - $320 = +$220。这两天的实现波动率够大,gamma scalping 赚钱了。

第三天:SPY 只动了 $0.50

Delta 变化 = 80 × 0.5 = 40。对冲 40 股赚了约 $0.50 × 40 / 2 = $10(近似)。

Theta 损耗:$160。

净盈亏:-$150。标的动得太少,Theta 吃掉了所有利润。

这就是 gamma scalping 的日常:大波动的日子攒利润,小波动的日子流血。最终胜负取决于整个持仓周期内的实现波动率是否超过了建仓时的隐含波动率。

对冲频率:多久调一次

这是个实操中非常关键的决策。对冲太频繁(每涨跌 $0.10 就调),交易成本会吃掉利润;对冲太稀疏(一天调一次),可能错过日内的大波动被回撤抹平。

三种常见策略:

固定时间间隔。每天收盘前对冲一次,或者每 4 小时一次。简单、好管理,但在快速波动的日子里反应太慢。

固定 Delta 阈值。当 Delta 偏移超过某个值(比如 ±50 股)时触发对冲。更灵活,但交易次数不可预测。

固定百分比移动。标的每移动 1% 对冲一次。折中方案,大多数做市商用类似的逻辑。

经验上,对于 30 天 ATM straddle,散户用固定阈值(Delta 偏移超过组合 Gamma × 1% 标的价格)比较合理。每天大概对冲 2~4 次,交易成本可控。

Gamma Scalping vs Theta Selling

维度Gamma ScalpingTheta Selling(卖跨式/Iron Condor)
核心 GreekLong GammaPositive Theta
市场假设标的会大幅波动标的会横盘或小幅波动
利润来源实现波动率 > 隐含波动率隐含波动率 > 实现波动率
日常体验大部分时间在流血,偶尔大赚大部分时间在收钱,偶尔大亏
操作频率高,需要频繁对冲低,开仓后等到期
最大风险标的不动,Theta 烧光期权标的暴涨暴跌,Gamma 放大亏损
资金效率低,需要付期权权利金高,收取权利金

两者互为镜像。大部分时间市场是均值回归的,做空波动率赢面更大。但在趋势行情和高波动事件(财报、FOMC、黑天鹅)前后,gamma scalping 的回报更好。

很多成熟的期权交易者同时运行两套策略:常态下做 theta portfolio,在特定事件窗口里开小仓位的 gamma scalp 做对冲。

Python 模拟:不同波动环境下的 Gamma Scalping 表现

下面的代码模拟标的的随机游走,在不同实现波动率水平下计算 gamma scalping 的盈亏。帮你直观理解"实现波动率多高才够"。

import numpy as np
import matplotlib.pyplot as plt

def simulate_gamma_scalp(
    S0=500,           # 初始标的价格
    K=500,            # 行权价
    IV=0.20,          # 买入期权的隐含波动率(年化)
    RV=0.25,          # 模拟的实现波动率(年化)
    T=30,             # 持仓天数
    gamma_per_dollar=0.16,  # 组合 Gamma(每$1标的变动,Delta变化多少)
    theta_per_day=-160,     # 每天的 Theta 损耗
    hedge_threshold=1.0,    # 标的移动多少触发对冲
    n_simulations=1000
):
    """
    模拟 gamma scalping 在给定实现波动率下的盈亏分布。
    简化假设:Gamma 和 Theta 在持仓期间恒定。
    """
    daily_vol = RV / np.sqrt(252)
    pnl_list = []
    
    for _ in range(n_simulations):
        price = S0
        cumulative_hedge_pnl = 0.0
        delta_position = 0.0  # 当前未对冲的 Delta(股数)
        
        for day in range(T):
            # 标的每日随机变动
            daily_return = np.random.normal(0, daily_vol)
            move = price * daily_return
            price += move
            
            # Delta 累积
            delta_position += gamma_per_dollar * move
            
            # 检查是否触发对冲
            if abs(delta_position) >= hedge_threshold * gamma_per_dollar:
                # 对冲:锁定 gamma profit
                # 近似:累积 Delta × 平均价格变动 / 2
                cumulative_hedge_pnl += 0.5 * gamma_per_dollar * move**2
                delta_position = 0.0
        
        # 总 P&L = 对冲利润 + Theta损耗
        total_pnl = cumulative_hedge_pnl + theta_per_day * T
        pnl_list.append(total_pnl)
    
    return np.array(pnl_list)

# --- 模拟不同实现波动率下的表现 ---
rv_levels = [0.12, 0.16, 0.20, 0.24, 0.28, 0.32]
iv_bought = 0.20  # 买入时的 IV

results = {}
for rv in rv_levels:
    pnls = simulate_gamma_scalp(RV=rv, IV=iv_bought)
    results[rv] = pnls

# --- 可视化 ---
fig, axes = plt.subplots(1, 2, figsize=(14, 5))

# 左图:不同 RV 下的平均 P&L
mean_pnls = [results[rv].mean() for rv in rv_levels]
colors = ["#ef4444" if m < 0 else "#22c55e" for m in mean_pnls]
axes[0].bar([f"{int(rv*100)}%" for rv in rv_levels], mean_pnls, color=colors)
axes[0].axhline(y=0, color="#6b7280", linewidth=0.8)
axes[0].set_xlabel("Realized Volatility", fontsize=11)
axes[0].set_ylabel("Average P&L ($)", fontsize=11)
axes[0].set_title("Gamma Scalping P&L vs Realized Volatility\n(IV at entry = 20%)",
                  fontsize=12)
axes[0].grid(True, alpha=0.3, axis="y")

# 右图:RV=24% 时的 P&L 分布
pnl_24 = results[0.24]
axes[1].hist(pnl_24, bins=40, color="#2563eb", alpha=0.7, edgecolor="white")
axes[1].axvline(x=0, color="#ef4444", linewidth=1.2, linestyle="--")
axes[1].axvline(x=pnl_24.mean(), color="#22c55e", linewidth=1.5,
               label=f"Mean: ${pnl_24.mean():.0f}")
axes[1].set_xlabel("P&L ($)", fontsize=11)
axes[1].set_ylabel("Frequency", fontsize=11)
axes[1].set_title("P&L Distribution (RV = 24%, IV = 20%)", fontsize=12)
axes[1].legend(fontsize=10)
axes[1].grid(True, alpha=0.3, axis="y")

plt.tight_layout()
plt.savefig("gamma-scalping-pnl-simulation.webp", dpi=150)
plt.close()

# --- 输出统计 ---
print("Gamma Scalping Simulation Results (IV = 20%, 30 days)")
print("=" * 55)
print(f"{'RV':<8} {'Mean P&L':<12} {'Win Rate':<10} {'Sharpe':<8}")
print("-" * 55)
for rv in rv_levels:
    pnl = results[rv]
    mean = pnl.mean()
    win_rate = (pnl > 0).mean()
    sharpe = pnl.mean() / pnl.std() if pnl.std() > 0 else 0
    print(f"{int(rv*100)}%{'':<5} ${mean:<10.0f} {win_rate:<10.1%} {sharpe:<8.2f}")

Gamma scalping 不同实现波动率下的盈亏

模拟的核心结论:

当实现波动率低于隐含波动率(RV < IV)时,平均亏损。RV = 12% 而 IV = 20% 的情况下,gamma scalping 几乎注定亏钱,因为标的动得不够覆盖 Theta。

当 RV ≈ IV 时,接近盈亏平衡。小赚小亏取决于路径,胜率大约 50%。

当 RV > IV 时,策略期望为正。RV 超过 IV 越多,赚得越多。RV = 28% 而 IV = 20%,已经是非常舒服的盈利环境。

什么时候该用 Gamma Scalping

大多数时间市场隐含波动率高于实现波动率(这是 VRP 存在的原因),所以大多数时间 gamma scalping 是负期望的。直接买 straddle 对冲,长期来看会亏。

适合开 gamma scalp 的窗口:

财报前。个股在财报公布前 1~2 天,如果 IV 定价的预期波动(straddle implied move)低于历史上实际的财报波动,买 straddle 做 gamma scalp 有正期望。

宏观事件前。FOMC、CPI 等高影响事件前,如果 VIX 期限结构陡峭(短期远低于历史正常水平),说明市场低估了近期波动。

波动率均值回归。当 IV Percentile 处于极低位(< 10%),历史上 IV 从底部回升的概率大。这时候买期权既赚 Gamma 又赚 Vega。

不要在 IV Rank 已经很高的时候开 gamma scalp。那意味着你在高价买入波动率,需要更极端的实现波动率才能打平。