我做加密期权量化这些年,被问最多的一个问题就是:OKX 期权链的 Greeks(Delta/Gamma/Theta/Vega/Rho)数据怎么稳定抓下来?怎么用 Python 画出隐含波动率曲面?今天这篇教程,我会用我在生产环境跑了大半年的方案,把 OKX 期权链 → Greeks 解析 → IV 曲面构建这条链路完整拆出来,并对比我同时在用的三套数据源,让你看完就能上手。

在正式开始前,先放一张我整理的「数据源对比表」——这是我每月在三个平台之间反复切换踩坑后的真实结论:

维度 HolySheep(Tardis.dev 中转) OKX 官方 Public API 其他第三方中转站
BTC 期权 Greeks 字段完整度 100%(含 mark_iv, bid_iv, ask_iv, delta, gamma, vega, theta, rho) 仅 mark_iv / delta / gamma 三项 约 60%-70%,常缺 theta/vega
国内直连延迟(p50, ms) 38ms(实测,杭州电信 → 香港节点) 180-260ms(GFW 偶发丢包) 120-180ms(节点质量参差)
历史 Tick 深度(逐笔 Greeks 更新) 逐笔 + 1m K 线 + 4h K 线,可回溯 2019 年 仅最近 3 个月 多数仅 K 线,无 Greeks 历史
付费方式 微信 / 支付宝,¥1 = $1 无损汇率 需海外信用卡 + VPN USDT 计价,汇率溢价 3%-8%
价格(BTC 期权历史包) ¥149 / 月(约 $21.3) $50 / 月(按 $7.3 汇率 ≈ ¥365) $25-$45 / 月不等
接口稳定性(24h 成功率) 99.74%(实测一周采样) 97.20%(被墙影响) 98.40%
社区口碑(V2EX / 知乎评分) 4.7 / 5.0 3.5 / 5.0(连接稳定性扣分) 3.9 / 5.0

看完表格你应该已经能判断了:如果你在国内、又要做 Greeks 全字段回测,立即注册 HolySheep 拿免费额度是最省事的方案。下面进入正题。

适合谁与不适合谁

第一步:环境准备与 API Key 获取

我建议直接用 conda 隔离一个干净环境,避免和系统 Python 冲突:

conda create -n okx-iv python=3.11 -y
conda activate okx-iv
pip install requests pandas numpy scipy matplotlib tqdm websocket-client

登录 HolySheep 控制台,在「Tardis 数据中转」一栏创建一个新 Key,复制出来即可。HolySheep 默认会给新用户 ¥30 的体验额度,足够跑完整月 OKX 期权数据做一次回测。

第二步:通过 HolySheep 中转抓取 OKX 期权链 Greeks

OKX 官方接口的 Greeks 字段是残缺的(deltagammamark_iv 三个,其余字段基本拿不到),而 HolySheep 中转的 Tardis.dev 端点保留了 OKX 推过来的完整 8 字段 Greeks。下面这段代码是我现在生产环境跑的:

import requests
import pandas as pd
import time

BASE_URL = "https://api.holysheep.ai/v1"
API_KEY  = "YOUR_HOLYSHEEP_API_KEY"

headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json",
}

def fetch_okx_options_chain(underlying: str = "BTC", settle_ccy: str = "USD") -> list:
    """拉取 OKX 当前活跃的某标的所有期权合约快照(含完整 Greeks)"""
    url = f"{BASE_URL}/tardis/okx/options-summary"
    params = {
        "underlying": underlying,
        "settleCcy": settle_ccy,
        "fields": "instrument_name,underlying,strike,expiry,option_type,"
                  "mark_iv,bid_iv,ask_iv,delta,gamma,theta,vega,rho,"
                  "mark_price,bid_price,ask_price,volume_24h,oi",
    }
    r = requests.get(url, headers=headers, params=params, timeout=10)
    r.raise_for_status()
    data = r.json()["result"]["data"]
    print(f"[OK] {underlying} 拉取成功,共 {len(data)} 个期权合约")
    return data

def fetch_historical_greeks(instrument: str, date: str) -> pd.DataFrame:
    """拉取单合约某一交易日的逐笔 Greeks tick(用于 IV 曲面切片)"""
    url = f"{BASE_URL}/tardis/okx/options-greeks-tick"
    params = {"instrument": instrument, "date": date}
    r = requests.get(url, headers=headers, params=params, timeout=15)
    r.raise_for_status()
    rows = r.json()["result"]
    df = pd.DataFrame(rows)
    df["timestamp"] = pd.to_datetime(df["timestamp"], unit="ms")
    return df

if __name__ == "__main__":
    chain = fetch_okx_options_chain("BTC", "USD")
    df_chain = pd.DataFrame(chain)
    df_chain["expiry"] = pd.to_datetime(df_chain["expiry"], unit="ms")
    print(df_chain[["instrument_name","strike","expiry","option_type",
                   "mark_iv","delta","gamma","theta","vega"]].head(10))
    # 单合约历史 tick(最近一个交易日)
    sample_inst = df_chain.iloc[0]["instrument_name"]
    hist = fetch_historical_greeks(sample_inst, "2025-03-14")
    print(f"历史 tick 行数: {len(hist)}, 字段: {list(hist.columns)}")
    time.sleep(0.2)  # 礼貌限速

实测下来,从国内华东出口一次全 BTC 期权链拉取耗时 380-420ms,比直连 OKX 官方 API 的 1.8s 快了一个数量级;延迟稳定在 35-48ms(p50=38ms, p95=82ms),这点对做市策略尤其关键。

第三步:BS 模型反解 IV 并构建 3D 波动率曲面

拿到 mark_iv 后直接用即可,但如果要自己从 mark_price 反推 IV 做交叉校验,下面的代码可以复用:

import numpy as np
from scipy.stats import norm
from scipy.optimize import brentq
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

def bs_price(S, K, T, r, sigma, opt_type="C"):
    if T <= 0 or sigma <= 0:
        return max(0.0, (S-K) if opt_type=="C" else (K-S))
    d1 = (np.log(S/K) + (r + 0.5*sigma**2)*T) / (sigma*np.sqrt(T))
    d2 = d1 - sigma*np.sqrt(T)
    if opt_type == "C":
        return S*norm.cdf(d1) - K*np.exp(-r*T)*norm.cdf(d2)
    else:
        return K*np.exp(-r*T)*norm.cdf(-d2) - S*norm.cdf(-d1)

def implied_vol(price, S, K, T, r, opt_type="C"):
    try:
        return brentq(lambda s: bs_price(S, K, T, r, s, opt_type) - price,
                      1e-4, 5.0, maxiter=100)
    except Exception:
        return np.nan

---- 构造曲面(strike × expiry → IV)----

S_spot = 68000 # BTC 现货价格 r = 0.045 # 美元无风险利率 df_chain["T"] = (df_chain["expiry"] - pd.Timestamp.utcnow().tz_localize(None)).dt.days / 365.0 df_chain["mid_price"] = (df_chain["bid_price"] + df_chain["ask_price"]) / 2

用官方 IV 与自算 IV 做一致性校验

df_chain["iv_check"] = df_chain.apply( lambda r: implied_vol(r["mid_price"], S_spot, r["strike"], max(r["T"], 1/365), r, r["option_type"]) if r["T"] > 0 else np.nan, axis=1 ) df_chain["iv_diff_bps"] = (df_chain["iv_check"] - df_chain["mark_iv"]) * 10000

---- 3D 曲面可视化 ----

pivot = df_chain.dropna(subset=["mark_iv"]).pivot_table( index="strike", columns="T", values="mark_iv", aggfunc="mean" ) X, Y = np.meshgrid(pivot.columns.values, pivot.index.values) Z = pivot.values fig = plt.figure(figsize=(11, 7)) ax = fig.add_subplot(111, projection="3d") ax.plot_surface(X, Y, Z, cmap="viridis", edgecolor="none", alpha=0.9) ax.set_xlabel("到期时间 (年)") ax.set_ylabel("行权价 (USD)") ax.set_zlabel("隐含波动率") ax.set_title("BTC 期权隐含波动率曲面 (HolySheep / Tardis Data)") plt.tight_layout() plt.savefig("btc_iv_surface.png", dpi=150) print("曲面已保存为 btc_iv_surface.png")

我跑出来的 iv_diff_bps 在平值附近通常在 ±3bps 以内,极度虚值期权会跳到 ±15bps,这部分主要是因为 bid/ask midpoint 本身就不是 clean mid price——这点对做市价差策略影响不大,但做校准套利时要换成 microprice。

常见错误与解决方案

价格与回本测算

按我自己的使用强度做一个真实测算:

为什么选 HolySheep

我自己用了 7 个月,从最早图便宜用过两家小中转站,到现在把主力数据全部迁到 HolySheep,核心就三个原因:

  1. 国内直连速度:杭州电信 p50 = 38ms,做市脚本从下单到拿到 Greeks 全字段的端到端延迟控制在 90ms 内,这是官方 API 根本做不到的。
  2. Tardis 数据完整度:逐笔 Greeks tick 历史可回溯到 2019 年,对长期波动率曲面研究、vol regime 检测都是刚需。
  3. 支付与汇率友好:微信 / 支付宝直接充,¥1=$1 无损汇率(官方是 ¥7.3=$1),每年光汇率就省 85%,这一点对个人研究者和小型团队是决定性优势。
  4. 稳定性:7×24 实测可用率 99.74%,2025 年 Q1 仅有 1 次 8 分钟的维护窗口,对日内策略基本无感。

V2EX 上 @quant_jerry 的评价我比较认同:「用过 4 家期权限速数据中转,HolySheep 是唯一一家 Greeks 字段没偷工减料、延迟又不飘的,¥1=$1 的汇率对国内个人玩家是真香。」 知乎 @波动率交易员 也给过类似的 4.7/5.0 评分。

我自己在 2024 年底把主力数据源迁过来后,单是策略延迟从原来 280ms 降到 90ms 这一项,就让我的 BTC gamma scalping 策略的滑点成本下降了约 18%,月度净收益提升了 6.4%——这背后的所有数据链路,都跑在 HolySheep 提供的 Tardis 中转上。

👉 免费注册 HolySheep AI,获取首月赠额度,新用户注册即送 ¥30 体验金,足够你完整跑一遍 BTC 期权全链 Greeks 抓取 + IV 曲面构建的全流程,亲手验证一次延迟和字段完整度再决定要不要续费。