上个月,研究团队有人问我,为什么我们的期权智能体总在拒绝一个看起来完全合理的长伽马想法。信号没问题,波动率预测也没问题。问题出在行情数据流里的两个字段,以及一个根本不在数据流中的数字。
所以,下面就是当时我们争论的那个实际对象。Deribit 行情响应,BTC-25SEP26-110000-C,周一 11:20 UTC 抓取,距离合约到期还有 18 天。我删掉了已弃用的字段,只保留所有重要内容。
{
"instrument_name": "BTC-25SEP26-110000-C",
"index_price": 96412.18,
"underlying_price": 96980.44,
"underlying_index": "SYN.BTC-25SEP26",
"estimated_delivery_price": 96412.18,
"mark_price": 0.0041,
"mark_iv": 42.14,
"best_bid_price": 0.0038, "best_bid_amount": 4.9,
"best_ask_price": 0.0045, "best_ask_amount": 12.1,
"bid_iv": 40.42, "ask_iv": 43.94,
"last_price": 0.0043,
"interest_rate": 0.0,
"open_interest": 812.7,
"greeks": {
"delta": 0.0962, "gamma": 0.0000189,
"vega": 36.77, "theta": -42.91, "rho": 4.61
},
"stats": { "volume": 61.2, "high": 0.0051, "low": 0.0036 }
}
instrument_name:一个字符串,四条信息
BTC-25SEP26-110000-C。标的为 BTC,到期日为 2026 年 9 月 25 日,行权价 110,000,看涨期权。这个字符串没说的是,而每个新的期权回测至少都会错一次的是,其余合约规格:每张合约对应 1 BTC 标的,权利金以 BTC 报价并支付,到期时间是 08:00 UTC,而不是当地时间 16:00。
以 BTC 报价是这里容易踩坑的地方。标记价格 0.0041 就是 0.0041 BTC,按指数价格算大约是 $395。如果你把这一列存成价格,之后再和以 USD 计价的策略盈亏合并,就会悄悄构建出一个仓位:即便期权本身没动,其美元价值也会随现货价格变化。我见过一份回测,BTC 下跌的当天看涨期权多头腿却盈利,纯粹是因为权利金列被当成美元,而研究人员实际上是在美元记账框架下做空以币计价的权利金。我们花了两天才查出来。
index_price 与 underlying_price:相差 568 美元,但只有一个是对的
这两个价格相差 $568.26,而且这并不是错误。index_price 是 Deribit BTC 指数,也就是现货参考价,由多家大型交易所的价格混合而成,也是合约最终结算所依据的价格。underlying_price 则是该特定到期日合成远期的价格,即 SYN.BTC-25SEP26,由同一到期日的期货市场推算得出。按年化约 12% 计算,18 天的持有成本就能带来这 $568 的差额。
数据中的每个希腊值,以及标记 IV,都是基于远期价格计算的。如果你因为手头加载的是现货序列,就用现货自行反推隐含波动率,那么每个行权价算出来的数都会不同,而且误差有系统性的方向:看涨期权的波动率看起来比实际便宜,看跌期权看起来比实际贵。在基差为 0.6% 的 18 天期合约上,这个行权价的标记 IV 会被你算偏约 1.5 个点。这已经超过多数人据以构建策略的波动率优势。
interest_rate: 0.0 表示 Deribit 通过远期价格而非利率进行贴现。别去找无风险利率曲线来套用,否则会重复计算。
mark_price 和 mark_iv:没有交易对手方的价格
0.0041 BTC。没人以这个价格成交。Deribit 根据拟合的波动率曲面计算标记价格,以订单簿为锚点,同时在不同执行价和到期日之间做平滑处理,这样单个宽幅报价变动时,保证金和强平就不会跟着大幅跳动。保证金计算用它,未实现盈亏计算用它,每个持仓接口也都会返回它。
因此,它成了加密货币期权研究中最诱人的成交价,也最不靠谱。以标记价买入、再以标记价卖出的回测,实际上是在和一条平滑样条曲线交易。它会算出一个 Sharpe。这个 Sharpe 描述的是曲面拟合器,无法说明你是否真的能成交。
我们最后写进系统的规则是:标记价格用于保证金、风险和中间价到中间价的归因,绝不作为成交价。如果回测需要成交价,而该时间戳没有订单簿快照,就将这次运行标记为未定价,而不是按标记价成交。我们宁可舍弃这一行。
best_bid 0.0038 / best_ask 0.0045:用三种单位看价差
按 BTC 计是 7 个最小价位。对一张价值 $395 的期权来说,这是 $67.50,也就是权利金的 17%。按波动率计则是 3.5 个点,买价 40.4,卖价 43.9;你问期权交易员某个合约的价差有多宽,他们实际会报这个数字。
数量和价格同样重要:买盘 4.9 张,卖盘 12.1 张。Deribit 期权的数量单位是合约,因此 4.9 BTC 标的,名义价值约 $472k,但在这个行权价上只有 0.47 BTC 的delta。如果策略需要有意义的伽马敞口,就得下几十张合约,而触价位可见的订单簿数量只够其中一小部分。第二档通常还要再差两三个最小价位。任何带有数量模型的期权回测都需要逐档吃单,或假设通过 RFQ/大宗交易定价;这两种假设得出的结果大不相同。
last_price: 0.0043 是过去 24 小时内某个时点发生的交易,可能是 19 小时前,成交时的现货价格也可能完全不同。对于每天交易 61 张合约的品种来说,这个价格天然就过时了。不要用它构造收益序列。
greeks:五个数字,四套单位约定
这个区块造成的隐性损害比其余所有数据加起来都多,因为每个值的量纲都没错,但单位都不是你会猜的那种。
| 字段 | 数值 | 单位 | 常见误读 |
|---|---|---|---|
| delta | 0.0962 | 每张合约对应的 BTC 标的数量 | 被当成美元 delta |
| gamma | 0.0000189 | 标的价格每变动 $1 时 delta 的变化量 | 被当成每变动 1% 时的数值 |
| vega | 36.77 | 波动率每变动 1 个点对应的 USD 金额 | 被当成波动率变动 100% 时的数值,或 BTC 金额 |
| theta | -42.91 | 每个日历日对应的 USD 金额 | 被当成每个交易日的数值 |
| rho | 4.61 | 利率每变动 1% 对应的 USD 金额 | 被忽略,这倒是没错 |
Delta 以币计价,vega 和 theta 以美元计价,gamma 按现货每美元的变动计算。把以币计价的 delta 混进以美元计价的风险汇总里,就会让一个看似敞口平衡的组合,最后实际上持有 40 BTC 多头。theta 按日历日计算,最容易坑到周末策略:周五收盘到周一开盘之间会衰减 3 天,这里每张合约约 $129,而期间没有任何交易时段。如果你的回测按 K 线步进、每一步应用一次 theta,周末就会消失,所有卖出权利金的策略都会被悄悄算得比实际更差。
open_interest 812.7、volume 61.2:真实的链上活跃度
一个行权价的未平仓量有 800 张,昨天成交了 61 张。这是一个真实活跃的行权价:距离到期还有 3 周时,110,000 是整数关口,资金流正好集中在这里。再往外走两个行权价到 120,000,未平仓量就会降一个数量级;如果换成非整数关口、非月度到期日,你会发现有些品种虽然有买价,卖价却高出 40%,而且一周都没有成交。
如果逐一遍历所有已挂牌品种做全链回测,回测会欣然假设你能在每个品种上成交。我们最后采用了联合筛选条件:报价价差低于标记价格的 20%,买卖两侧至少各有 1 张合约,且过去 24 小时成交量不为零。典型交易日里,大约只有 BTC 期权链上三分之一的品种能通过筛选。剩下的三分之二,正是假 alpha 藏身的地方。
数据里没有的那个字段
这个对象里没有任何信息告诉你一笔交易的成本。Deribit 每张期权合约收取 0.0003 BTC,maker 和 taker 费率相同,按标的金额的 0.03% 计算,而不是按权利金计算;费用上限为期权价格的 12.5%。这张合约每边费用是 $28.92,未触及上限,因为 0.0041 的 12.5% 是 0.000513,而固定费用更低。
费用按名义价值计算,权利金却随波动率变化,所以越是价外,费用占已付金额的比例就越高。
以 0.0045($434)买入卖价,按 0.0038($366)卖出,再付两次费用:这张标记价格为 $395 的合约,完整往返交易成本是 $125.80。你的判断必须至少值权利金的 31%,交易才能打平。这就是长伽马想法遭到拒绝的全部原因,与信号毫无关系。
如果你问每单位 delta 的成本,情况会更有意思,因为费用随合约张数增长,而所需张数与 delta 成反比。为便于计算,假设各行权价的标记 IV 固定为 42.1%(真实期权链有偏斜;在加密货币市场,看涨翼的交易价格通常高于平值期权,因此这张表给出的估算偏乐观):
| 品种 | 标记价格(BTC) | Delta | 每 1 BTC delta 所需合约张数 | 每边费用 | 每 BTC delta 的成本 |
|---|---|---|---|---|---|
| 97000-C(平值) | 0.0373 | 0.518 | 1.93 | $28.92 | $55.80 |
| 110000-C | 0.0041 | 0.096 | 10.4 | $28.92 | $301 |
| 120000-C | 0.0004 | 0.013 | 79.4 | $4.82(达到上限) | $383 |
| BTC 永续合约 | — | 1.0 | 1.0 | $48.21 | $48.21 |
最后一行里的 12.5% 上限确实起了作用;没有这个上限,深度虚值翼的成本会达到每 BTC delta $2,300,彩票式策略在算术上就会变得不可能,而不只是表现糟糕。即使有上限,通过 120,000 行权价买入敞口的成本仍约为永续合约的 8 倍。期权不是表达方向观点的廉价方式,凡是得出相反结论的回测,都漏掉了这张表。
08:00 UTC,9 月 25 日
行情数据没告诉你的最后一件事,是仓位如何了结。Deribit 根据到期日 08:00 UTC 前 30 分钟的指数均价结算期权,并对实值合约收取 0.00015 BTC 的交割费用,该费用同样设有结算价值 12.5% 的上限。
这会给回测带来两个影响。第一,均价计算时段是真实存在的风险来源:一张在 07:59 仍有 $300 实值的期权,如果最后半小时行情难看,也可能结算为零。若回测按 08:00 的瞬时价格结算,那么多数到期日的结果会与模拟账户相差几个基点,少数到期日则会差很多。第二,无论你是否想要结算,交割费用都会收取,所以持有到期的策略每个周期要付 3 次费用,而在 07:30 平仓的策略要付 2 次费用外加价差。哪种更便宜取决于行权价,在权利金约为 0.0012 BTC 的位置附近会发生逆转。我们按每个仓位单独计算,不设统一规则。
我原本想写一篇关于波动率预测的文章。结果花了一周研究单位和费用上限,这大概才是期权研究中光鲜程度与现实占比的正确比例。
二十个字段。两个按设计就不一致的价格,一个从未成交的价格,四套单位的希腊值,以及完全在数据对象之外、只存在于文档页面中的成本模型。如果你正在搭建期权回测,第一天就该先写一个函数,把这类对象转成一笔计入全部成本、币种单位正确的仓位——包括价差、费用、上限、交割,以及币本位还是美元本位。你之后写的每个策略,都会沿用这个函数的假设。
← 全部文章

