24、做市商利润模型中的机器学习应用:订单流预测、波动率预测、最优执行
做市商这行当,说白了就是靠「预测」吃饭的。你预测得准,就能在别人还没反应过来的时候把利润揣进兜里。传统模型靠的是数学公式和统计假设,但市场越来越复杂,那些假设经常被打破。我做了这么多年,越来越觉得——机器学习不是锦上添花,而是生存必需品。
今天咱们就聊聊三个最核心的应用场景:订单流预测、波动率预测、最优执行。这三个东西,就像做市商的三根支柱,缺一根都站不稳。
订单流预测:提前看到对手的底牌
做市商最怕什么?怕被「吃」。你刚挂了个买单,下一秒大单就砸下来把你吃掉。如果你能提前知道接下来几秒谁会买、谁会卖,你就能提前调整报价,避免被狙击。
我个人习惯用LSTM(长短期记忆网络)来做订单流预测。为什么?因为订单流数据是典型的时间序列,而且有长期依赖关系。一个大的机构订单,往往会在几分钟内拆成几十笔小单慢慢执行。LSTM能捕捉到这种「拆单」的痕迹。
举个例子,我曾在某个ETF做市项目中遇到过这种情况:
# 简化版特征工程
features = [
'last_trade_direction', # 上一笔方向:1买 -1卖
'last_trade_size', # 上一笔大小
'time_since_last_trade', # 距上一笔时间(ms)
'bid_ask_spread', # 当前买卖价差
'order_imbalance_5s', # 过去5秒订单不平衡度
'volume_ratio_1min' # 过去1分钟成交量/均值
]
# 模型输出:下一笔是买单的概率
# 阈值0.6以上,我倾向于认为接下来会有买单涌入
嗯,这里要注意一点:不要只预测方向。我见过很多团队只预测「买还是卖」,结果准确率60%多,但实际交易中根本赚不到钱。为什么?因为大小也很关键。一笔大买单和十笔小买单,对价格的影响完全不同。
波动率预测:给报价定个「安全垫」
做市商的利润来源是买卖价差。但价差设多大?设小了,容易被波动吃掉;设大了,没人跟你交易。波动率预测就是用来解决这个矛盾的。
传统方法用GARCH模型,但GARCH对非线性关系捕捉能力有限。我建议试试梯度提升树(XGBoost/LightGBM)。为什么?因为波动率的影响因素很多——隔夜跳空、宏观数据发布、期权到期日、甚至推特上的情绪。树模型能自动处理这些特征的交互作用。
我记得有一次,某个做市项目里,我们加入了「期权隐含波动率」和「VIX期货期限结构」作为特征,波动率预测的R²直接从0.3跳到了0.55。效果非常明显。
| 特征类别 | 具体特征 | 重要性评分 |
|---|---|---|
| 历史波动 | 过去5分钟、30分钟、2小时的已实现波动率 | 高 |
| 衍生品市场 | 隐含波动率、波动率偏斜、期限结构斜率 | 高 |
| 微观结构 | 买卖价差、订单簿深度、成交频率 | 中 |
| 宏观事件 | 距下次FOMC会议天数、非农数据发布倒计时 | 中 |
| 情绪指标 | 推特情绪得分、新闻情感极性 | 低(但有时很关键) |
最优执行:把利润「挤」出来
订单流预测和波动率预测,最终都要服务于一个目标——怎么执行。你预测到有大买单要来,你是现在就提高报价,还是等它来了再调?你预测到波动率要飙升,你是缩小价差还是扩大价差?
这就是最优执行要解决的问题。我个人习惯用强化学习(RL)来做。为什么?因为执行决策是序列化的——你今天的决策会影响明天的库存,而库存又会影响后天的报价。RL天然适合这种「多步决策」问题。
具体来说,我常用深度Q网络(DQN)或者近端策略优化(PPO)。状态空间包括:当前库存、订单簿状态、预测的订单流方向、预测的波动率。动作空间包括:调整买价、调整卖价、调整双边报价、等待。
你想想看,RL模型训练好了之后,它会学到一些人类很难直觉感知的策略。比如:当预测到有大买单要来时,它不会立刻拉高卖价,而是先小幅提高买价,吸引更多卖单进来,把库存补足,然后再拉高卖价去赚那波大买单的钱。这种「先吸筹再出货」的策略,人工很难持续执行,但RL可以。
下面这张图展示了三个模块之间的关系:
说白了,这三个模块不是孤立的。订单流预测告诉你「谁会来」,波动率预测告诉你「市场有多颠」,最优执行告诉你「怎么接招」。三者配合好了,做市商的利润才能稳定。
最后说一句,机器学习模型不是万能的。市场结构会变,模型会过时。我每隔三个月会重新训练一次模型,并且每天监控预测误差。一旦发现某个特征的预测能力下降,立刻排查原因——是市场变了,还是数据出了问题?
做市商这行,赚的是「信息差」和「速度差」的钱。机器学习帮你把信息差拉大,把速度提上去。但最终拍板的,还是你这个人。