第十五章:曲面套利策略十:高频做市商视角下的曲面套利,订单流与曲面微观结构
做市商这活儿,说白了就是在刀尖上跳舞。我刚开始做期权做市那会儿,总觉得曲面套利就是看看模型,算算价差,挂个单等着成交。后来被市场狠狠教育了几次才明白——曲面上每一分钱的偏差,背后都是真金白银的订单在流动。
这一章,咱们聊聊高频做市商怎么利用订单流信息,去捕捉曲面上的微观结构套利机会。嗯,这里面的门道,比单纯看模型要深得多。
一、做市商的曲面视角:跟普通交易者有什么不同?
普通交易者看曲面,关心的是「哪个合约被高估了,哪个被低估了」。做市商看曲面,关心的是「谁在买,谁在卖,买卖的节奏如何」。
我举个例子。你发现某个虚值看涨期权的隐含波动率比相邻行权价高了2个点。普通交易者会想:「这是个套利机会,我要卖它。」做市商会想:「这2个点的溢价是谁推起来的?是大户在买,还是散户在追?这个买单是主动吃单还是挂单?」
为什么会这样?因为做市商赚的不是「判断对错」的钱,而是「流动性提供」的钱。你想想看,如果一个大户正在持续买入这个期权,你贸然卖给他,很可能被一路轧上去。反过来,如果只是散户的零星买单,那这个溢价很快就会回归。
二、订单流与曲面微观结构:我关注哪些信号?
我个人习惯把订单流信号分成三类。每一类对应着不同的曲面套利策略。
| 信号类型 | 具体指标 | 对曲面的影响 |
|---|---|---|
| 订单流不平衡 | 主动买/卖单比率、大单占比 | 短期推高或压低局部波动率 |
| 挂单深度变化 | 买卖盘口厚度、价差宽度 | 反映做市商对风险的定价意愿 |
| 成交速度 | 每秒成交笔数、平均每笔成交量 | 判断是趋势性行情还是噪音交易 |
我在项目中遇到过这样的情况:某个深度虚值期权的买卖价差突然从0.5个波动率点扩大到2个点。表面上看是流动性变差了,但仔细看订单流,发现是几个做市商同时在撤单。这说明什么?说明有人知道一些我们不知道的信息,正在提前避险。这时候,曲面上的任何「套利机会」我都不会碰。
三、高频做市商的曲面套利策略:实战框架
下面这个框架,是我自己打磨了好几年的东西。说白了就三步:感知 → 判断 → 执行。
四、代码实战:订单流驱动的曲面套利信号
光说不练假把式。下面这段代码,是我用来监控曲面微观结构的一个核心模块。它做的事情很简单:实时计算每个期权合约的「订单流压力指数」。
import numpy as np
import pandas as pd
from collections import deque
class OrderFlowSurfaceMonitor:
"""订单流驱动的曲面微观结构监控器"""
def __init__(self, window_size=100):
self.window_size = window_size
# 存储每个合约的订单流数据
self.order_books = {}
def update_trade(self, contract, price, volume, side, timestamp):
"""
更新一笔成交数据
side: 'buy' 表示主动买入, 'sell' 表示主动卖出
"""
if contract not in self.order_books:
self.order_books[contract] = {
'trades': deque(maxlen=self.window_size),
'buy_volume': 0,
'sell_volume': 0,
'imbalance': 0.0
}
book = self.order_books[contract]
book['trades'].append({
'price': price,
'volume': volume,
'side': side,
'timestamp': timestamp
})
# 更新买卖量
if side == 'buy':
book['buy_volume'] += volume
else:
book['sell_volume'] += volume
# 计算订单流不平衡度
total_volume = book['buy_volume'] + book['sell_volume']
if total_volume > 0:
book['imbalance'] = (book['buy_volume'] - book['sell_volume']) / total_volume
def get_surface_pressure(self):
"""获取整个曲面的订单流压力分布"""
pressure_map = {}
for contract, book in self.order_books.items():
# 压力指数:正数表示买方压力大,负数表示卖方压力大
pressure_map[contract] = {
'imbalance': book['imbalance'],
'trade_count': len(book['trades']),
'avg_trade_size': (book['buy_volume'] + book['sell_volume']) / max(len(book['trades']), 1)
}
return pressure_map
def detect_arbitrage_signal(self, surface_model, threshold=0.6):
"""
检测曲面套利信号
当订单流压力与曲面偏差方向一致时,信号更强
"""
pressure = self.get_surface_pressure()
signals = []
for contract, data in pressure.items():
# 从曲面模型中获取该合约的理论波动率
theo_vol = surface_model.get_theo_vol(contract)
# 获取当前市场波动率
market_vol = surface_model.get_market_vol(contract)
# 偏差
vol_deviation = market_vol - theo_vol
# 订单流压力
imbalance = data['imbalance']
# 核心逻辑:如果买方压力大且波动率被低估,或者卖方压力大且波动率被高估
if abs(imbalance) > threshold:
if imbalance > 0 and vol_deviation < -0.01:
signals.append({
'contract': contract,
'action': 'buy',
'strength': abs(imbalance) * abs(vol_deviation),
'reason': '买方压力推高,但波动率仍被低估'
})
elif imbalance < 0 and vol_deviation > 0.01:
signals.append({
'contract': contract,
'action': 'sell',
'strength': abs(imbalance) * abs(vol_deviation),
'reason': '卖方压力压低,但波动率仍被高估'
})
# 按信号强度排序
signals.sort(key=lambda x: x['strength'], reverse=True)
return signals
threshold。设得太低,你会被噪音淹没;设得太高,你会错过真正的机会。我一般会根据历史数据回测,找到最优阈值。嗯,不同品种、不同时间段,这个值都不一样。
五、避坑指南:我曾经踩过的三个坑
做高频曲面套利,坑太多了。我挑三个最典型的说说。
- 坑一:把订单流信号当成万能钥匙。 我曾经有一段时间,完全依赖订单流信号来做决策。结果遇到一次大机构用算法交易拆单,故意制造虚假的订单流不平衡,把我骗进去接了盘。后来我学乖了——订单流信号必须和曲面模型交叉验证。
- 坑二:忽略跨合约的订单流联动。 有一次,我发现某个平值看涨期权的买方压力很大,就跟着做多。结果没几分钟,相邻行权价的看跌期权也被大量买入。我当时没在意,后来才反应过来——这是有人在构建一个复杂的价差组合。如果我能早点识别这种联动,就不会被单个合约的信号误导。
- 坑三:在高波动环境下过度交易。 市场剧烈波动的时候,订单流信号会变得极其嘈杂。我刚开始做的时候,总想着每个信号都要抓住,结果手续费和滑点吃掉了大部分利润。现在我的原则是:波动率越高,我的交易频率反而要降低。
六、总结:做市商视角下的曲面套利本质
说了这么多,其实核心就一句话:曲面上的每一分偏差,都是订单流博弈的结果。
普通交易者看到的是「价格」,做市商看到的是「价格背后的交易行为」。当你把订单流信息融入到曲面分析中,你会发现很多以前看不到的机会——那些转瞬即逝的微观结构套利窗口。
我个人觉得,这个领域最迷人的地方在于:它永远在变化。今天的策略,明天可能就失效了。你需要不断地去理解市场参与者的行为模式,去适应新的交易环境。嗯,这也是为什么我一直觉得做市商这行,永远有学不完的东西。
公众号:蓝海资料掘金营,微信deep3321