第28章:微观结构与量化策略
各位,咱们今天聊点真家伙。
前面讲了那么多微观结构的基础知识——订单簿、价差、冲击成本、信息比率……但说到底,这些东西如果不能落地到策略上,那就是纸上谈兵。我个人习惯是,每学一个微观结构概念,脑子里立刻想:这东西能不能用来赚钱?怎么赚?
这一章,我就把这三条路给你拆开揉碎了讲:因子构建、统计套利、做市策略。这三条路,说白了就是微观结构知识变现的三个主流方向。
28.1 基于微观结构的因子构建
先聊因子。传统因子多来自价格、成交量、基本面。但微观结构因子,盯的是订单流、价差、深度这些更底层的东西。
我在项目中遇到过最典型的例子:订单簿不平衡因子。你想想看,如果买单深度远大于卖单深度,说明什么?说明市场短期买压大,价格大概率要往上走。反过来也一样。
这个因子怎么用?我一般这样处理:
- 实时计算:每收到一次订单簿快照,就计算当前的不平衡值
- 归一化:用过去N个快照的均值和标准差做Z-score
- 信号生成:当Z-score超过阈值(比如2.0),生成方向信号
还有一个我特别喜欢的因子:价差弹性。说白了就是——当大单进来时,价差会怎么变?如果价差扩张很快,说明流动性差,这时候进去就是送钱。如果价差几乎不变,说明流动性好,可以放心做。
代码实现其实不复杂。我贴一段核心逻辑:
def order_book_imbalance(bid_volumes, ask_volumes):
total_bid = sum(bid_volumes)
total_ask = sum(ask_volumes)
if total_bid + total_ask == 0:
return 0
return (total_bid - total_ask) / (total_bid + total_ask)
def z_score_factor(current_imbalance, history):
mean = np.mean(history)
std = np.std(history)
if std == 0:
return 0
return (current_imbalance - mean) / std
嗯,这里要注意:历史窗口的长度很关键。太短了噪声大,太长了反应慢。我个人习惯用50-100个快照,大概对应5-10秒的数据。
28.2 统计套利策略
统计套利,说白了就是找两个或多个资产之间的稳定关系,然后等它们偏离时下注回归。
微观结构视角下的统计套利,跟传统的不太一样。传统统计套利看的是价格序列的协整关系。但微观结构版本,盯的是订单流和价差的短期失衡。
我举个例子:期货与ETF之间的套利。
期货和ETF理论上价格应该高度相关。但微观结构上,两者的订单流到达速度不一样。期货可能先动,ETF慢半拍。这个时间差,就是套利空间。
具体怎么做?我一般分三步:
- 建立基准关系:用过去N天的1分钟数据,做线性回归,得到期货和ETF的价差均值
- 监控实时价差:当价差偏离均值超过2个标准差时,触发信号
- 执行对冲:做多被低估的,做空被高估的,等待价差回归
代码示例:
def spread_trading_signal(future_price, etf_price, mean_spread, std_spread):
current_spread = future_price - etf_price
z = (current_spread - mean_spread) / std_spread
if z > 2.0:
return "SHORT_FUTURE_LONG_ETF"
elif z < -2.0:
return "LONG_FUTURE_SHORT_ETF"
else:
return "NO_TRADE"
这里有个坑:交易成本。统计套利的单笔利润通常很薄,如果交易成本太高,可能连手续费都覆盖不了。我建议在回测时,把滑点和手续费算得狠一点,别太乐观。
28.3 做市策略
做市策略,是微观结构知识最直接的应用场景。说白了就是:同时挂买单和卖单,赚取价差。
但做市不是傻傻地挂单。你得考虑几个核心问题:
- 挂多宽的价差? 价差太宽,成交不了;太窄,利润薄还容易亏
- 挂多大的量? 量太大,容易被聪明钱吃掉;量太小,赚不到钱
- 什么时候调整? 市场波动大时,价差要放宽;波动小时,可以收窄
我习惯用Avellaneda-Stoikov模型做基础框架。这个模型的核心思想是:做市商的最优报价,取决于当前库存和风险偏好。
最优买价 = 中间价 - 价差/2 - 库存调整项
最优卖价 = 中间价 + 价差/2 - 库存调整项
库存调整项怎么算?我一般这样:
def inventory_adjustment(inventory, max_inventory, risk_aversion):
# inventory: 当前库存(正数表示多头,负数表示空头)
# max_inventory: 最大允许库存
# risk_aversion: 风险厌恶系数
return risk_aversion * (inventory / max_inventory)
举个例子:假设中间价100元,基础价差0.2元,风险厌恶系数0.1,当前库存是最大库存的50%(多头)。那么:
- 库存调整项 = 0.1 * 0.5 = 0.05
- 最优买价 = 100 - 0.1 - 0.05 = 99.85
- 最优卖价 = 100 + 0.1 - 0.05 = 100.05
你看,因为库存偏多,买价被压低(不想再买),卖价也被压低(想快点卖出去)。这就是库存管理的核心逻辑。
知识体系总览
下面这张图,把本章的核心逻辑串起来了:
这张图把三条路径的关系讲清楚了。因子构建是基础,统计套利和做市策略是应用。三者之间不是孤立的——你构建的因子,可以直接用在统计套利里做信号;做市策略里的库存管理,也可以反过来优化因子设计。
好了,这一章的内容就到这里。记住:微观结构的知识,最终要落到策略上才算有价值。多动手,多回测,多踩坑——踩过的坑,都是你的护城河。