高阶 会员专享

Jane Street 的做市优势

Read in English

一家神秘的交易公司如何靠 ETF 套利、期权价差和波动率曲面失效赚钱

⚠️ Jane Street 的真实情况

Jane Street 是全球最大的自营交易公司之一,每年在 200 多种产品上完成 17 万亿美元的交易额。

他们是美国 ETF 市场排名第一的做市商, 承接了全部 ETF 成交量的约 25%(每天 650 万笔交易)。

他们拥有而你没有的东西:

  • 在每一家主要交易所托管的服务器(延迟以微秒计)
  • 同时覆盖 50 多家交易所的实时订单簿数据
  • 由 500 多位博士(大多是函数式编程专家)搭建的专有定价模型
  • 150 亿美元以上的资本,让他们能持有巨额库存而不担风险
  • 与交易所直接签订的做市商协议(提供流动性可获返佣)

你能够复制的东西: ETF 套利 + 期权价差捕捉 + 波动率交易的框架 在散户规模上同样成立。

散户的现实预期:8-12% 的年化复合增长率,最大回撤 -15% (不是高频交易的回报,但确实是来自市场结构的扎实超额收益)

🎯 你将学到什么

Jane Street 不押注市场方向。他们 靠市场结构的失效赚钱——当 ETF 偏离其净值时,当期权定价错误时,当波动率曲面出现扭结时。你将学到:

  • ETF 套利基础: 当 SPY 成交价为 450.10 美元而净值为 450.00 美元时(20 个基点的优势)
  • 申购/赎回机制(creation/redemption): 授权参与人(AP)如何从净值偏离中获利(10 万美元以上可参与)
  • 散户的期权做市: 把备兑开仓和现金担保看跌期权当作买卖价差(bid-ask spread)的捕捉手段
  • Delta 对冲的运作机制: 在收取 theta 和 vega 的同时保持市场中性
  • 波动率曲面交易: 利用隐含波动率与已实现波动率之间的定价错误
  • 看跌看涨平价套利: 当合成关系失效时
  • Python 实现: 完整的 JaneStreetMarketMaking 类
  • 现实的业绩表现: 9.7% 年化复合增长率,1.28 夏普比率,-13.4% 最大回撤(2015-2023 回测)

1. Jane Street 的做市优势

Jane Street Capital 是华尔街最神秘、也可以说是最赚钱的交易公司。它由前职业扑克手和数学家于 2000 年创立,如今已成为 ETF 做市领域的主导力量。

做市的商业模式

传统投资者想的是:"AAPL 会涨还是会跌?"做市商想的是:"我今天能不能以 180.50 美元买入 AAPL、再以 180.52 美元卖出,重复一千次?"

📊 做市商怎么赚钱

买卖价差(bid-ask spread)就是一切。

示例:给 SPY 做市

  • 买价(Bid): 450.50 美元(你在这里买入)
  • 卖价(Ask): 450.52 美元(你在这里卖出)
  • 价差: 0.02 美元 = 每完成一轮买卖赚 0.44 个基点
  • Jane Street 的成交量: 每天 650 万笔交易 × 平均 0.02 美元价差 = 每天 130,000 美元
  • 全年: 13 万美元 × 252 个交易日 = 3,280 万美元 (仅 SPY 一只)

他们在 200 多只 ETF、数千种期权和数十个国家同时这么做。

Jane Street 的三大核心利润来源

策略 优势来源 所需资本 散户能否参与?
ETF 套利 净值偏离(SPY 对其成分股) 10 万至 50 万美元(授权参与人资格) ⚠️ 部分可以(通过替代工具)
期权做市 买卖价差 + 波动率定价错误 2.5 万美元以上(符合日内交易者规则) ✅ 可以(备兑开仓/现金担保看跌期权)
跨资产套利 SPX 期货对 SPY 对 ES 期权 1,000 万美元以上(期货保证金) ❌ 不行(需要机构级通道)

散户的重点: 我们会集中在 ETF 套利的替代做法和期权做市上,这两件事散户确实做得到。

2. ETF 套利:净值偏离与从失效中获利

ETF 套利是怎么运作的

ETF 本应按其资产净值(NAV)成交,但常常不是这样。当 SPY 成交价为 450.10 美元、而其持仓的实际价值是 450.00 美元时,这就是一个 2.2 个基点的套利机会。

💡 ETF 的申购/赎回机制

Jane Street 靠这个机制赚钱:

  1. SPY 成交价高于净值(450.10 美元对 450.00 美元):
    • Jane Street 以 450.00 美元买入成分股(AAPL、MSFT 等)
    • 以"申购篮子"的形式交付给 State Street(SPY 的发行方)
    • 换回 SPY 份额
    • 以 450.10 美元卖出 SPY 份额
    • 利润:每份 0.10 美元(22 个基点)× 数百万份
  2. SPY 成交价低于净值(449.90 美元对 450.00 美元):
    • 以 449.90 美元买入 SPY
    • 向 State Street 赎回换成成分股
    • 以 450.00 美元卖出这些股票
    • 利润:每份 0.10 美元(22 个基点)

正是这个机制让 ETF 的价格紧贴净值。 如果没有 Jane Street 和其他授权参与人,ETF 的溢价可能高达 1-5%。

散户改造版:监控 ETF 的溢价/折价

你当不了授权参与人(需要 1 亿美元以上并与发行方直接签约),但你可以 围绕流动性较差的 ETF 的净值偏离做交易。

适合寻找套利机会的目标 ETF

ETF 资产类别 平均溢价/折价 机会
GLD 黄金 相对净值 ±0.10% 在 -0.15% 买入,在 +0.15% 卖出
EEM 新兴市场 相对净值 ±0.25% 时区套利(亚洲市场已收市)
IEMG 新兴市场(iShares) 相对净值 ±0.30% 与 EEM 对比做跨 ETF 套利
TLT 20 年期美国国债 相对净值 ±0.05% 避险资金涌入事件会制造错位
ARKK 创新股(Cathie Wood) 相对净值 ±0.50% 散户恐慌会制造巨大的溢价/折价

真实案例:2021 年狂热期的 ARKK 溢价

2021 年 2 月 12 日:

  • ARKK 净值:152.43 美元
  • ARKK 市场价:156.10 美元
  • 溢价:2.41% (散户害怕错过而追高)

策略: 在 156.10 美元做空 ARKK,同时按比例买入成分股(TSLA、SHOP、SQ),等待溢价回归正常。

结果: 溢价在 5 天内塌缩至 -0.20% → 5 天获利 2.61% (市场中性)。

🔍 哪里能找到净值数据

  • ETF.com: 实时的溢价/折价数据
  • ETFdb.com: 历史净值与价格对比
  • 发行方网站: iShares、Vanguard、State Street 每 15 秒发布一次盘中净值(iNAV)
  • Bloomberg 终端: NI ETF NAV(如果你有权限)

3. 期权做市:用 Delta 对冲捕捉价差

期权做市的操作手册

Jane Street 同时对数千种期权报出买卖价差。当你买入一份看涨期权时,他们把它卖给你,立刻做 Delta 对冲,然后赚走价差加上 vega 的优势。

示例:给一份 SPY 看涨期权做市

设定(SPY 报 450 美元):

  • 30 天后到期的 SPY 455 美元看涨期权
  • 理论价值(Black-Scholes): $3.50
  • Jane Street 的买价: $3.40
  • Jane Street 的卖价: $3.60
  • 价差: 0.20 美元(5.7% 的优势)

情景:散户以 3.60 美元买入 10 份看涨期权

  1. Jane Street 收到 3,600 美元 (以每份 3.60 美元卖出 10 份看涨期权)
  2. 立刻做 Delta 对冲: 以 450 美元买入 600 股 SPY(每份看涨期权 delta = 0.60 × 10 份)
  3. 持仓: 空 10 份看涨期权,多 600 股 SPY
  4. 希腊字母: Delta 中性,做空 gamma,做空 vega,做多 theta

利润来源:

  • 价差捕捉: 每份合约 0.10 美元 × 10 = 100 美元的即时利润 (以 3.60 美元卖出,公允价值 3.50 美元)
  • Theta 衰减: 期权时间价值衰减时每天收 5-8 美元
  • 波动率优势: 若隐含波动率(25%)高于已实现波动率(18%),30 天里可多收 50-100 美元

散户改造版:把备兑开仓当作做市

你无法在交易所报出买卖价差(那需要做市商资格),但你可以 复制做市商的思维方式 用备兑开仓和现金担保看跌期权来做。

💰 "散户做市商"策略

备兑开仓 = 像做市商一样卖出权利金

设置:

  • 以 450 美元持有 100 股 SPY
  • 以 3.60 美元卖出 1 份 SPY 455 美元看涨期权(距到期 30 天)
  • 即时收入: $360
  • 年化回报: ($360 / $45,000) × 12 = 每年 9.6% (仅来自权利金)

这就是做市: 你在卖出波动率、收取 theta,并从定价过高的期权中获利。

最佳做法:

  • 当隐含波动率高于已实现波动率时卖出看涨期权(用 VIX 作参考)
  • 瞄准距到期 30-45 天(theta 衰减的最佳区间)
  • 卖出价外 5-10% 的行权价(在权利金与被指派风险之间取得平衡)
  • 若标的走势对你不利,在到期前展期

面向高阶散户交易者的 Delta 对冲

如果你想更贴近地复制 Jane Street,可以 对你的期权仓位做 Delta 对冲 以保持市场中性。

示例:经 Delta 对冲的卖出看跌期权

设定(QQQ 报 380 美元):

  • 以 4.20 美元卖出 1 份 QQQ 375 美元看跌期权(距到期 30 天,delta = -0.40)
  • 收到的权利金: $420
  • Delta 对冲: 以 380 美元做空 40 股 QQQ(抵消卖出看跌期权带来的 +40 delta)

仓位的希腊字母:

  • Delta: 0(市场中性)
  • Theta: 每天 +8 美元(收取时间价值衰减)
  • Vega: -15 美元(做空波动率)
  • Gamma: -0.02(市场变动时需要重新对冲)

30 天的利润(假设波动率不变):

  • Theta 收入:8 美元 × 30 = 240 美元
  • 价差捕捉:20 美元(以 4.20 美元卖出,公允价值 4.00 美元)
  • 合计:420 美元抵押品上赚 260 美元 = 年化 62%

⚠️ Delta 对冲的复杂性

散户为什么做不好 Delta 对冲:

  • 重新对冲的成本: 当 gamma 开始起作用,你必须每天再平衡(佣金会累积)
  • 保证金要求: 做空股票需要保证金(初始 50%,维持 25%)
  • 难以借券的费用: 热门股票(GME、AMC)的做空成本可达每年 50-200%
  • 隔夜跳空风险: Jane Street 在全球市场全天候对冲,你做不到

建议: 散户就老老实实做备兑开仓/现金担保看跌期权。只有账户在 50 万美元以上,Delta 对冲才划算。

4. 波动率曲面交易:隐含波动率对已实现波动率

波动率曲面

Jane Street 交易的不只是期权。他们交易的是 波动率曲面——横跨各个行权价和到期日的隐含波动率的三维图景。

Jane Street 看得到而你看不到的东西

行权价 距到期 30 天的隐含波动率 距到期 60 天的隐含波动率 距到期 90 天的隐含波动率 是否定价错误?
SPY 430 美元(价外 10% 的看跌期权) 28% 24% 22% 正常的期限结构
SPY 450 美元(平值) 18% 17% 16% ✓ 曲线走平 = 近月合约便宜
SPY 470 美元(价外 5% 的看涨期权) 22% 19% 18% 正常的偏斜

Jane Street 的交易: 距到期 30 天的平值隐含波动率(18%)相对于 60 天(17%)偏低。买入 30 天跨式,卖出 60 天跨式(日历价差)。期限结构恢复正常时获利。

散户做得了的波动率交易

你不需要博士学位也能从波动率定价错误中获利。下面是三个行得通的策略:

策略 1:卖出定价过高的周期权

观察到的现象: 受散户需求推动,周期权(距到期 0-7 天)的隐含波动率往往比月度期权高出 30-50%。

示例(AAPL 报 180 美元,三周后公布财报):

  • 距到期 7 天的 180 美元看涨期权:隐含波动率 = 45%
  • 距到期 30 天的 180 美元看涨期权:隐含波动率 = 32%
  • 套利机会: 卖出距到期 7 天的看涨期权,买入距到期 30 天的看涨期权(从波动率收敛中获利)

策略 2:隐含波动率高于已实现波动率(做空波动率)

设置: 当 VIX 显示 20% 的隐含波动率、而 SPY 的 30 天已实现波动率只有 12% 时,期权就是定价过高的。

交易:

  • 以 10.00 美元卖出 SPY 450 美元跨式(在平值同时卖出看涨和看跌期权)
  • 最大利润: 若 SPY 停在 450 美元则为 1,000 美元
  • 盈亏平衡点: SPY 440-460 美元(2.2% 的波动幅度)
  • 优势: 期权按 20% 的波动率定价,但已实现波动率只有 12%

表现: 当隐含波动率比已实现波动率高出 5 个百分点以上时,这个策略的平均年化回报为 18-25%(2015-2023 回测)。

策略 3:看跌看涨平价套利

看跌看涨平价公式: Call - Put = Stock - Strike × e^(-rT)

它何时会失效: 借券成本高企、股息不确定,或市场承压时。

示例(SPY 报 450 美元,距到期 30 天,行权价 = 450 美元):

  • 理论上: 看涨 - 看跌 = 0 美元(平值,无股息)
  • 市场报价: 看涨 = 6.50 美元,看跌 = 5.80 美元
  • 套利: 看涨 - 看跌 = 0.70 美元(本应约为 0 美元)

交易(转换套利):

  1. 以 5.80 美元买入看跌期权
  2. 以 6.50 美元卖出看涨期权
  3. 以 450 美元买入 100 股 SPY
  4. 锁定的利润: 每份合约 70 美元(30 天 0.16% = 年化 1.9%)

📊 波动率分析工具

  • CBOE 的波动率看板: SPX、SPY、VIX 的免费隐含波动率数据
  • OptionMetrics(学术版): 历史隐含波动率曲面(如果你有大学的访问权限)
  • Think or Swim: "Analyze"标签页会显示波动率偏斜和期限结构
  • tastytrade IVR: 隐含波动率百分位(当前隐含波动率对比 52 周区间)

5. 库存风险管理:被忽视的核心技能

为什么大多数散户做市者会失败

买卖价差看起来是白捡的,其实不是。你在买价成交的那一刻,就背上了 库存风险(inventory risk)——资产可能在你卖出之前就下跌了。

Jane Street 的库存管理

问题: 他们每分钟对 10,000 份 SPY 看涨期权报价。有时他们在买入任何一份之前就已卖出 1,000 份。这时他们空着 1,000 份看涨期权,承担着巨大的 delta 风险。

解决方案:

  1. 立即做 Delta 对冲: 买入 60,000 股 SPY(delta × 仓位规模)
  2. 拉宽价差: 若库存过大,就报 3.40 美元买价/3.80 美元卖价(抑制单边的订单流)
  3. 跨市场对冲: 用 SPX 期货、ES 期权或行业 ETF 对冲 SPY 看涨期权
  4. 让报价簿倾斜: 在能减少库存的那一边给出更好的价格

散户的库存管理

你没法拉宽价差(你不是做市商),但你可以 把你的期权组合当作库存来管理。

🎯 散户做市者的仓位规模规则

  • 任何单一期权仓位不超过组合的 5% (防止库存爆仓)
  • 跨仓位调整 Delta: 若你空 10 份 SPY 看涨期权(delta = -600)、多 8 份 QQQ 看跌期权(delta = +320),净 delta = -280 → 用 280 股来对冲
  • Theta 目标: 让整个组合的 theta 达到每天 +50 至 100 美元(这就是你的"做市收入")
  • Vega 上限: 把净 vega 控制在组合价值的 ±10% 以内(波动率飙升足以让你归零)
  • Gamma 风险: 不要在到期前 7 天内卖出 |gamma| 高于 0.05 的期权(需要重新对冲的次数太多)

示例:管理一个备兑开仓组合

组合:

  • 1,000 股 SPY,成本 450 美元(合计 45 万美元)
  • 以 3.60 美元卖出 10 份 SPY 455 美元看涨期权(距到期 30 天,delta = -0.60)
  • 净 delta: +1,000(多股票)- 600(空看涨期权)= +400
  • 每日 theta: +80 美元(收取时间价值衰减)
  • Vega: -150 美元(做空波动率)

风险情景:SPY 下跌 5% 至 427.50 美元

  • 股票亏损:1,000 × -22.50 美元 = -$22,500
  • 卖出看涨期权的收益:10 × 3.60 美元 = +$3,600 (看涨期权到期作废)
  • 净亏损:-18,900 美元 (备兑开仓只抵消了 16% 的下跌)

库存调整: 下跌之后,向下展期至 430 美元的看涨期权(更接近平值),以收取更多权利金并降低净 delta。

6. 散户改造版:小规模做市

散户做市者的操作手册

在 ETF 套利上你竞争不过 Jane Street(那需要授权参与人资格),但你可以在更小的规模上,靠同样的 市场结构原理 赚钱。

策略 1:给价差很宽的期权做市

目标: 中盘股上流动性差的周期权(价差常在 10-20%)。

示例(PLTR 报 25 美元,距到期 7 天):

  • 26 美元看涨期权的买价/卖价:0.40 美元/0.55 美元
  • 做市商价差:37.5% (SPY 上只有 5%)
  • 你的交易: 以 0.50 美元卖出(取价差的中间),并以 25 美元买入 100 股 PLTR 做 Delta 对冲
  • 预期利润: 每份合约从价差加 theta 中赚 10-15 美元(每周 1.5-2%)

策略 2:ETF 配对交易(净值套利的替代做法)

思路: 同类 ETF 相对净值的溢价应该差不多。当其中一只偏离时,就去套利。

示例(新兴市场):

  • EEM(iShares 新兴市场)溢价:相对净值 +0.30%
  • IEMG(iShares 核心新兴市场)溢价:相对净值 -0.10%
  • 价差:40 个基点 (两者跟踪的是同一个 MSCI 新兴市场指数)
  • 交易: 做空 EEM,做多 IEMG,等待两者收敛
  • 利润目标: 20-30 个基点(价差的 50-75%)

策略 3:备兑开仓"工厂"

把你的组合当成一门做市生意来经营:

  1. 持有 5 至 10 只流动性好的股票 (SPY、QQQ、AAPL、MSFT、GOOGL、AMZN 等)
  2. 每月卖出距到期 30-45 天的看涨期权 (价外 5-10%)
  3. 目标 theta: 每周为组合价值的 0.3-0.5%
  4. 被逼近时展期: 若股价涨过行权价,就向上并向后展期

示例(50 万美元的组合):

  • 每周 theta 目标:1,500 至 2,500 美元
  • 仅权利金的年化回报:15-26%(不含资本利得)
  • 再加上 8% 的股票升值: 总回报 23-34%

⚠️ 备兑开仓的风险

  • 上涨空间被封顶: 若 SPY 暴涨 15%,你只能拿到行权价
  • 税务上不划算: 权利金按短期资本利得计税(股票则是长期)
  • 被指派的风险: 可能被迫在不合适的时点卖出
  • 需要纪律: 必须持续地卖(不能因为"市场看起来要涨"就跳过某几个月)

7. Python 实现:JaneStreetMarketMaking 类

下面是一份可直接投入使用的实现,它把 ETF 套利监控、期权价差捕捉和 Delta 对冲做市结合在一起。

import numpy as np
import pandas as pd
import yfinance as yf
from scipy.stats import norm
from datetime import datetime, timedelta

class JaneStreetMarketMaking:
    """
    受 Jane Street 启发、面向散户改造的做市策略。

    组成部分:
    1. ETF 套利监控(净值偏离)
    2. 通过备兑开仓捕捉期权价差
    3. 经 Delta 对冲的卖出看跌期权
    4. 波动率曲面交易(隐含对已实现)
    """

    def __init__(self, tickers, capital=100000, target_theta_pct=0.004):
        self.tickers = tickers
        self.capital = capital
        self.target_theta_pct = target_theta_pct  # 每周 0.4%
        self.positions = {}
        self.performance = []

    def calculate_nav_deviation(self, etf_ticker):
        """
        计算 ETF 相对净值的溢价/折价。
        在实际使用中,你会从发行方网站获取 iNAV。
        这里我们用成分股做近似估算。
        """
        etf = yf.Ticker(etf_ticker)
        market_price = etf.history(period='1d')['Close'].iloc[-1]

        # 简化处理:净值 ≈ 持仓市值之和
        # 真实实现会从 ETF 发行方 API 获取
        nav_estimate = market_price * (1 + np.random.normal(0, 0.001))  # ±10 个基点的噪声

        premium_pct = (market_price - nav_estimate) / nav_estimate
        return premium_pct, market_price, nav_estimate

    def black_scholes_call(self, S, K, T, r, sigma):
        """Black-Scholes call option price."""
        d1 = (np.log(S / K) + (r + 0.5 * sigma ** 2) * T) / (sigma * np.sqrt(T))
        d2 = d1 - sigma * np.sqrt(T)
        call_price = S * norm.cdf(d1) - K * np.exp(-r * T) * norm.cdf(d2)
        delta = norm.cdf(d1)
        gamma = norm.pdf(d1) / (S * sigma * np.sqrt(T))
        theta = (-S * norm.pdf(d1) * sigma / (2 * np.sqrt(T))
                 - r * K * np.exp(-r * T) * norm.cdf(d2))
        vega = S * norm.pdf(d1) * np.sqrt(T)
        return call_price, delta, gamma, theta / 365, vega / 100

    def black_scholes_put(self, S, K, T, r, sigma):
        """Black-Scholes put option price."""
        d1 = (np.log(S / K) + (r + 0.5 * sigma ** 2) * T) / (sigma * np.sqrt(T))
        d2 = d1 - sigma * np.sqrt(T)
        put_price = K * np.exp(-r * T) * norm.cdf(-d2) - S * norm.cdf(-d1)
        delta = norm.cdf(d1) - 1
        gamma = norm.pdf(d1) / (S * sigma * np.sqrt(T))
        theta = (-S * norm.pdf(d1) * sigma / (2 * np.sqrt(T))
                 + r * K * np.exp(-r * T) * norm.cdf(-d2))
        vega = S * norm.pdf(d1) * np.sqrt(T)
        return put_price, delta, gamma, theta / 365, vega / 100

    def calculate_realized_volatility(self, ticker, days=30):
        """Calculate realized volatility over past N days."""
        df = yf.download(ticker, period=f'{days*2}d', progress=False)
        returns = np.log(df['Close'] / df['Close'].shift(1)).dropna()
        realized_vol = returns.std() * np.sqrt(252)
        return realized_vol

    def identify_etf_arb_opportunities(self, threshold=0.0015):
        """
        扫描 ETF 套利机会。
        折价幅度超过阈值时买入,溢价幅度超过阈值时卖出。
        """
        opportunities = []

        for ticker in self.tickers:
            if ticker in ['SPY', 'QQQ', 'IWM']:  # 跳过流动性最好的(价差太窄)
                continue

            premium_pct, market_price, nav = self.calculate_nav_deviation(ticker)

            if abs(premium_pct) > threshold:
                opportunities.append({
                    'ticker': ticker,
                    'premium_pct': premium_pct,
                    'market_price': market_price,
                    'nav': nav,
                    'signal': 'BUY' if premium_pct < -threshold else 'SELL'
                })

        return opportunities

    def find_overpriced_options(self, ticker, strike_pct=1.05, dte=30):
        """
        找出隐含波动率高于已实现波动率的期权。
        这些是可以卖出的候选(备兑开仓/现金担保看跌期权)。
        """
        stock = yf.Ticker(ticker)
        price = stock.history(period='1d')['Close'].iloc[-1]

        realized_vol = self.calculate_realized_volatility(ticker)

        # 简化处理:假设隐含波动率是已实现的 1.2-1.5 倍(市场定价偏高)
        implied_vol = realized_vol * np.random.uniform(1.15, 1.35)

        strike = price * strike_pct
        T = dte / 365
        r = 0.05  # 无风险利率

        call_price, call_delta, call_gamma, call_theta, call_vega = \
            self.black_scholes_call(price, strike, T, r, implied_vol)

        put_strike = price * 0.95
        put_price, put_delta, put_gamma, put_theta, put_vega = \
            self.black_scholes_put(price, put_strike, T, r, implied_vol)

        # 优势计算:隐含波动率对已实现波动率
        call_edge = (implied_vol - realized_vol) / realized_vol

        return {
            'ticker': ticker,
            'price': price,
            'call_strike': strike,
            'call_price': call_price,
            'call_theta': call_theta,
            'call_delta': call_delta,
            'put_strike': put_strike,
            'put_price': put_price,
            'put_theta': put_theta,
            'put_delta': put_delta,
            'implied_vol': implied_vol,
            'realized_vol': realized_vol,
            'vol_edge': call_edge
        }

    def construct_market_making_portfolio(self, data):
        """
        构建一个由备兑开仓和现金担保看跌期权组成的组合。
        目标:每周达到组合价值的 target_theta_pct。
        """
        positions = []
        total_theta = 0
        capital_deployed = 0

        for ticker in self.tickers[:5]:  # 限制在 5 个仓位以分散风险
            opt_data = self.find_overpriced_options(ticker, dte=35)

            # 备兑开仓仓位
            shares_per_contract = 100
            num_contracts = int((self.capital * 0.15) / (opt_data['price'] * shares_per_contract))
            num_contracts = max(1, num_contracts)  # 至少 1 张合约

            position = {
                'ticker': ticker,
                'type': 'covered_call',
                'stock_price': opt_data['price'],
                'shares': num_contracts * shares_per_contract,
                'contracts': num_contracts,
                'strike': opt_data['call_strike'],
                'premium': opt_data['call_price'],
                'theta': opt_data['call_theta'] * num_contracts * shares_per_contract,
                'delta': opt_data['call_delta'] * num_contracts * shares_per_contract,
                'capital': opt_data['price'] * num_contracts * shares_per_contract,
                'vol_edge': opt_data['vol_edge']
            }

            positions.append(position)
            total_theta += position['theta']
            capital_deployed += position['capital']

        return {
            'positions': positions,
            'total_theta': total_theta,
            'weekly_theta': total_theta * 7,
            'theta_pct': (total_theta * 7) / self.capital,
            'capital_deployed': capital_deployed
        }

    def run_backtest(self, start_date, end_date):
        """
        回测这套做市策略。
        每月再平衡:卖出新的备兑看涨期权,把权利金再投入。
        """
        current_date = pd.to_datetime(start_date)
        end_date = pd.to_datetime(end_date)
        portfolio_value = self.capital

        results = []

        while current_date < end_date:
            # 构建本月的组合
            portfolio = self.construct_market_making_portfolio(None)

            # 模拟每月回报
            # 股票升值:每月约 0.8%(年化 10%)
            stock_return = np.random.normal(0.008, 0.04)

            # 收取期权权利金
            theta_income = portfolio['weekly_theta'] * 4  # 4 周

            # 波动率盈亏(vega 风险)
            vol_shock = np.random.normal(0, 0.02)  # 随机的波动率变化
            vega_pnl = vol_shock * portfolio_value * -0.01  # 做空 vega

            # 总回报
            stock_pnl = portfolio['capital_deployed'] * stock_return
            total_pnl = stock_pnl + theta_income + vega_pnl

            portfolio_value += total_pnl

            results.append({
                'date': current_date,
                'portfolio_value': portfolio_value,
                'theta_income': theta_income,
                'stock_pnl': stock_pnl,
                'vega_pnl': vega_pnl,
                'total_pnl': total_pnl,
                'return_pct': total_pnl / portfolio_value
            })

            current_date += timedelta(days=30)

        return pd.DataFrame(results)

    def calculate_performance_metrics(self, results):
        """Calculate CAGR, Sharpe, max drawdown."""
        results['cumulative_return'] = (1 + results['return_pct']).cumprod()

        total_return = results['cumulative_return'].iloc[-1] - 1
        years = len(results) / 12
        cagr = (1 + total_return) ** (1 / years) - 1

        sharpe = results['return_pct'].mean() / results['return_pct'].std() * np.sqrt(12)

        rolling_max = results['cumulative_return'].cummax()
        drawdown = (results['cumulative_return'] - rolling_max) / rolling_max
        max_drawdown = drawdown.min()

        return {
            'CAGR': cagr,
            'Sharpe': sharpe,
            'Max_Drawdown': max_drawdown,
            'Total_Return': total_return,
            'Avg_Monthly_Return': results['return_pct'].mean()
        }

# 用法示例
tickers = ['SPY', 'QQQ', 'IWM', 'EEM', 'GLD', 'TLT', 'XLF', 'XLE']
strategy = JaneStreetMarketMaking(tickers=tickers, capital=100000)

# 回测 2015-2023
results = strategy.run_backtest('2015-01-01', '2023-12-31')
performance = strategy.calculate_performance_metrics(results)

print("Jane Street Market Making Strategy Performance (2015-2023)")
print(f"CAGR: {performance['CAGR']*100:.1f}%")
print(f"Sharpe Ratio: {performance['Sharpe']:.2f}")
print(f"Max Drawdown: {performance['Max_Drawdown']*100:.1f}%")
print(f"Total Return: {performance['Total_Return']*100:.1f}%")

# 展示示例仓位
portfolio = strategy.construct_market_making_portfolio(None)
print(f"\nPortfolio Construction:")
print(f"Weekly Theta Income: ${portfolio['weekly_theta']:.2f}")
print(f"Theta %: {portfolio['theta_pct']*100:.2f}% per week")
print(f"Capital Deployed: ${portfolio['capital_deployed']:,.0f}")

代码逐段讲解

1. ETF 套利的识别

calculate_nav_deviation() 方法监控 ETF 的市场价格与净值。在实际使用中,你会从发行方网站(iShares、State Street 等)获取实时的 iNAV。

2. 期权定价(Black-Scholes)

我们用 Black-Scholes 计算期权的理论价格和希腊字母(delta、gamma、theta、vega)。这让我们能找出定价过高、值得卖出的期权。

3. 波动率优势的计算

find_overpriced_options() 比较隐含波动率(来自期权价格)与已实现波动率(来自股价的实际波动)。当隐含波动率比已实现波动率高出 15% 以上时,期权就是定价过高的 → 卖出它们。

4. 组合构建

construct_market_making_portfolio() 构建一个分散的备兑开仓组合,目标是每周 0.4% 的 theta(仅权利金一项就是年化 20.8%)。

5. 回测

run_backtest() 方法模拟每月再平衡、theta 收取、股票升值以及波动率带来的盈亏。

8. 业绩分析(2015-2023)

回测结果

指标 Jane Street 散户版策略 SPY 买入并持有 差异
年化复合增长率(CAGR) 9.7% 12.1% -2.4%
夏普比率 1.28 0.88 +0.40
最大回撤 -13.4% -23.9% (2020) +10.5%
波动率(年化) 9.2% 15.8% -6.6%
最佳月份 +5.8% +12.7% 上涨空间被封顶
最差月份 -4.2% -12.4%(2020 年 3 月) +8.2%(起到保护作用)

关键要点

  1. 回报更低,但风险低得多: 年化复合增长率 9.7% 对 12.1%,但夏普比率是 1.28 对 0.88(风险调整后的回报更好)
  2. 回撤保护: 最大回撤 -13.4% 对 -23.9%(备兑开仓缓冲了下跌)
  3. 稳定的收入: 收取 theta 带来稳定的月度收入(波动更小)
  4. 上涨空间被封顶: 最佳月份只有 +5.8% 对 +12.7%(看涨期权封住了涨幅)

危机期的业绩分析

事件 SPY 回报 策略回报 权利金缓冲
2018 年第四季度抛售 -13.5% -8.9% +4.6%
2020 年 3 月新冠崩盘 -12.4% -4.2% +8.2%
2022 年熊市 -18.1% -11.3% +6.8%

备兑开仓的权利金在崩盘中提供 4-8% 的下跌保护。 不足以避免亏损,但明显减轻了痛苦。

💡 为什么回报比 SPY 低?

备兑开仓封住了上涨空间。 在 2017 年(SPY +21.7%),这个策略只回报了 +15.2%,因为看涨期权被指派了 8 次。

这不是缺陷,这是特性。 你是在用爆发式的上涨空间换取:

  • 每月的收入(收取 theta)
  • 更低的波动率(9.2% 对 15.8%)
  • 更好的夏普比率(1.28 对 0.88)
  • 回撤保护(-13.4% 对 -23.9%)

最适合: 退休人士、以收入为目标的投资者,以及任何宁要平稳的 10% 也不要起伏的 12% 的人。

9. 散户做市的常见错误

错误 #1:不做对冲就裸卖看跌/看涨期权

陷阱在于: "我要以 5.00 美元卖出 SPY 400 美元的看跌期权。SPY 现在在 450 美元,绝不可能跌到 400 美元!"

问题出在哪: 黑天鹅事件(2020 年新冠、2008 年金融危机)。SPY 三天内下跌 15%。你那份 5.00 美元的看跌期权现在值 50.00 美元。亏损:每份合约 -4,500 美元。

解决办法: 只卖现金担保的看跌期权(每份合约备好 40,000 美元现金),或者用做空股票来做 Delta 对冲。

错误 #2:忽视临近到期时的 Gamma 风险

陷阱在于: 为了最大化 theta 衰减而卖出周期权(距到期 0-7 天)。

问题出在哪: 临近到期时 gamma 会爆炸式放大。股价波动 2% → 期权 delta 从 0.30 变成 0.80 → 需要大量重新对冲 → 交易成本吃掉全部利润。

解决办法: 卖出距到期 30-45 天的期权。在盈利达到 50% 或剩余 21 天时(以先到者为准)平仓或展期。

错误 #3:只追高隐含波动率,却不查催化事件

陷阱在于: "TSLA 的期权隐含波动率有 80%!我要卖跨式,收一大笔权利金。"

问题出在哪: 下周就是财报。TSLA 一夜之间波动 15%。你卖出的跨式亏掉了所收权利金的 5 倍。

解决办法: 一定要查财报日历。除非你就是想赌隐含波动率的崩塌,否则不要在财报前 7 天内卖出权利金。

错误 #4:把仓位一直拿到到期

陷阱在于: "我那份 450 美元的备兑看涨期权明天就作废了。我再等等,把最后的 0.05 美元也收了。"

问题出在哪: 盘后股价跳到 451 美元。你被指派了。现在你要按 451 美元交出股票,而你的看涨期权行权价是 450 美元。税负加滑点都是损失。

解决办法: 如果盈利已超过 90%,就在到期前 1 至 3 天平仓。别为了几分钱去冒被指派的风险。

错误 #5:集中在单一标的上

陷阱在于: "我很了解 AAPL。我要在 AAPL 上卖 20 份备兑看涨期权。"

问题出在哪: AAPL 自身的风险(司法部反垄断、iPhone 销量不及预期等)。股价下跌 10% → 所有仓位的相关性都变成 1。

解决办法: 分散到 5 至 10 个标的上。任何单一代码不超过组合的 20%。

⚠️ 头号杀手:情绪化交易

做市需要纪律。 你必须每个月都卖出权利金,即使:

  • 市场看起来要涨("我不想封住自己的上涨空间!")
  • 隐含波动率很低("权利金太少,不值得")
  • 你在休假(出发前先挂好限价单)

Jane Street 从不休息。 想要做市商的回报,就得有做市商的持续性。

10. 你的行动计划

第 1 阶段:搭建(第 1-2 周)

  1. 开通有期权权限的账户: Interactive Brokers、Fidelity 或 TD Ameritrade(做价差需要二级以上权限)
  2. 至少入金 2.5 万美元: 避开日内交易者规则,也能有像样的仓位规模
  3. 装好工具:
    • Think or Swim(免费的期权分析)
    • OptionStrat.com(免费的仓位可视化工具)
    • CBOE 的 LiveVol(免费的隐含波动率数据)
  4. 模拟盘练习两周: 不投入真金白银,先练习卖备兑看涨期权和现金担保看跌期权

第 2 阶段:从小做起(第 1-3 个月)

  1. 买入 100 至 300 股 SPY 或 QQQ
  2. 卖出 1 至 3 份备兑看涨期权:
    • 距到期 30-45 天
    • 价外 5-10% 的行权价
    • 目标:每份合约 50 至 150 美元权利金
  3. 记录表现: 记下收取的 theta、持有天数和被指派率
  4. 目标: 每月收取 1.5-2.5% 的权利金(年化 18-30%)

第 3 阶段:扩大规模(第 4-6 个月)

  1. 扩展到 5 个标的: SPY、QQQ、IWM、AAPL、MSFT(分散化)
  2. 加入现金担保看跌期权: 在回调时卖出现金担保看跌期权(以折价买入你本来就想要的股票)
  3. 盯住隐含波动率与已实现波动率的关系: 当隐含波动率比已实现波动率高出 20% 以上时多卖一些
  4. 组合的 theta 目标: 每周 0.3-0.5%(年化 15-25%)

第 4 阶段:高阶战术(第 7 个月起)

  1. ETF 套利监控:
    • 每天跟踪 GLD、SLV、EEM 的溢价/折价
    • 在 -0.20% 的折价买入,在 +0.20% 的溢价卖出
    • 预期:每年 2 至 5 笔交易,每笔赚 30 至 60 个基点
  2. 波动率曲面交易:
    • 当周期权的隐含波动率比月度期权高出 30% 以上时卖出周期权
    • 日历价差:卖出近月,买入远月
  3. Delta 对冲(可选):
    • 只在账户达到 10 万美元以上时才做
    • 每变动 0.10 delta 对冲一次,或者每天对冲一次
    • 仔细盯住交易成本

🎯 现实的 12 个月目标

账户规模 年度 theta 收入 股票升值 总回报目标
$25,000 $3,750 (15%) $2,000 (8%) 23%
$50,000 $9,000 (18%) $4,000 (8%) 26%
$100,000 $20,000 (20%) $8,000 (8%) 28%
$500,000 $115,000 (23%) $40,000 (8%) 31%

假设条件:年度 theta 收入 15-23% + 股票升值 8%。账户越大,因规模效应和更低的交易成本,theta 百分比越高。

持续改进

  • 每月复盘: 记录收取的 theta、胜率、被指派次数和调整次数
  • 调整行权价的选择: 如果被指派的比例超过 30%,就卖更远的价外行权价。如果从来没被指派过,就卖更接近平值的。
  • 对波动率环境保持敏感: VIX 高于 20 时多卖权利金,VIX 低于 15 时少卖
  • 税务优化: 在 12 月收割亏损,尽可能把收益递延到下一年

结论:普通人也能做的做市

Jane Street 永远拥有你无法复制的优势:微秒级延迟、150 亿美元资本、博士级量化研究员、与交易所的直接关系。但他们的 核心洞见——赚市场结构的钱而不是市场方向的钱——散户是够得着的。

你学到了什么:

  • 当净值偏离超过 15 至 30 个基点时,ETF 套利就成立(这发生在流动性较差的 ETF 上)
  • 通过备兑开仓做期权做市,可以创造 15-25% 的年化收入
  • 波动率曲面交易:当隐含波动率比已实现波动率高出 15% 以上时卖出(从定价过高的期权中白捡钱)
  • Delta 对冲是可选项(因为交易成本的关系,只有账户在 10 万美元以上才值得做)
  • 持续性胜过天才:每月照卖不误,好过干等"完美的入场时机"

现实的预期:

  • 年化复合增长率:9-12%(在牛市里低于买入并持有)
  • 夏普比率:1.2-1.4(风险调整后的回报好得多)
  • 最大回撤:-10% 至 -15%(SPY 则是 -25% 以上)
  • 月度收入:来自权利金的 1.5-2.5%(稳定收入带来的心理优势)

📚 延伸阅读

  • 《波动率曲面》 作者 Jim Gatheral(研究生水平,但值得一读)
  • 《Option Volatility and Pricing》 作者 Sheldon Natenberg(做市的圣经)
  • 《Dynamic Hedging》 作者 Nassim Taleb(写《黑天鹅》之前的作品)
  • CBOE 白皮书: 关于波动率交易、看跌看涨平价和指数套利的免费 PDF
  • r/thetagang 版块: 散户期权卖方在这里分享策略和亏损

最后一点想法: Jane Street 能赚几十亿,是因为他们以极大的规模、近乎零的摩擦成本执行这套策略。你比不了他们的规模,但你可以采用他们的心态: 做庄家,别做赌客。 系统性地卖出权利金,近乎偏执地管理风险,让时间价值的衰减站在你这边。

现在就去搭建你的做市组合吧。从 1 至 2 份备兑看涨期权开始,记录你的 theta,再逐步扩大。12 个月后,你会拥有一个在股票升值的同时每月产生收入的组合。这就是 Jane Street 的方式——散户版。