Zing 论坛

正文

自适应做市策略:基于机器学习的Avellaneda-Stoikov框架扩展研究

这是一个量化金融研究项目,探索如何将短期波动率和方向预测整合到Avellaneda-Stoikov做市框架中,使用XGBoost模型和AAPL高频限价订单簿数据进行回测,比较了基准策略与机器学习增强策略的性能表现。

做市策略Avellaneda-Stoikov机器学习XGBoost高频交易限价订单簿波动率预测方向预测量化金融AAPL
发布时间 2026/04/30 08:15最近活动 2026/04/30 08:23预计阅读 10 分钟
自适应做市策略:基于机器学习的Avellaneda-Stoikov框架扩展研究
1

章节 01

导读 / 主楼:自适应做市策略:基于机器学习的Avellaneda-Stoikov框架扩展研究

自适应做市策略:基于机器学习的Avellaneda-Stoikov框架扩展研究

做市商在金融市场中扮演着提供流动性的关键角色,通过同时报出买入价和卖出价,赚取买卖价差并承担库存风险。传统的做市策略多依赖于固定的数学模型,而近年来机器学习技术的兴起为自适应做市带来了新的可能性。一个开源研究项目深入探索了如何将机器学习预测融入经典的Avellaneda-Stoikov做市框架,通过预测短期价格方向和波动率来动态调整报价策略,从而在保持模型可解释性的同时提升策略表现。

研究背景与核心问题

Avellaneda-Stoikov模型是量化金融领域中广泛使用的做市策略框架。该模型基于随机最优控制理论,通过求解Hamilton-Jacobi-Bellman方程,得出了最优的预留价格(reservation price)和价差(spread)公式。模型的核心思想是:做市商应根据当前的库存水平和市场波动率来调整报价,以平衡赚取价差收益和控制库存风险。

然而,经典模型假设波动率是恒定的或遵循简单的随机过程,无法捕捉市场状态的快速变化。这引出了一个重要的研究问题:如果能够准确预测短期(如下一秒)的价格方向和波动率,是否可以在保持Avellaneda-Stoikov框架结构的同时,通过引入这些预测来提升策略表现?

该研究项目正是围绕这一问题展开,使用苹果公司(AAPL)股票的高频限价订单簿(LOB)数据进行实证分析。

方法论框架

研究设计原则

项目采用了一种谨慎的方法论设计,确保机器学习预测不会破坏原始模型的结构完整性。核心原则是:预测结果仅用于修改模型中的特定参数,而不取代整个报价模型。具体来说:

  • 波动率预测:用于调整库存压力项,影响预留价格的计算
  • 方向预测:用于对预留价格进行基于tick的偏移调整
  • 价差基准:保持锚定在基准波动率参考值上,维持模型的稳定性

这种设计确保了策略的可解释性和稳健性,避免了"黑箱"问题。

四种策略对比

研究设置了四种策略进行系统性比较:

恒定价差策略(Constant Spread): 这是最简单的基准策略,仅基于订单簿中点价格报出对称的买卖订单,不考虑库存因素,也不使用Stoikov逻辑。它代表了最基础的做市方法,用于展示库存管理的重要性。

基准Stoikov策略(Baseline Stoikov): 使用固定的波动率参数,采用标准的Avellaneda-Stoikov库存感知报价逻辑。该策略展示了经典模型在考虑库存风险后的表现提升。

机器学习扩展策略(ML Stoikov Extension): 在保持基准策略结构的基础上,引入机器学习模型的方向预测和波动率预测。这是研究的核心实验组,用于验证预测信息的价值。

先知扩展策略(Oracle Stoikov Extension): 使用实现的未来标签(即"先知"信息)作为预测输入。该策略仅作为理论上界,用于诊断和评估机器学习预测与理想预测之间的差距。

数据来源与处理

研究使用AAPL股票的LOBSTER格式高频数据,包含两类文件:

订单簿文件(AAPL_1s.parquet): 提供每秒的订单簿快照,包括十档 bid/ask 价格和数量。这是策略决策的主要输入。

事件文件(AAPL_evt.parquet): 提供订单簿级别的消息数据,包括限价单提交、取消、成交等事件。这些事件用于构建特征和进行历史成交模拟。

数据按交易时段(session)组织。时段的划分基于时间戳的绝对值:大的时间间隔或时间倒退被视为新时段的开始。最终的数据分割采用时间顺序划分,早期时段用于训练模型,后期时段用于最终测试和回测。

特征工程与标签构建

可解释特征集

项目精心设计了可解释的特征集合,便于在论文中进行说明和讨论。特征涵盖以下维度:

订单簿状态特征

  • 订单簿不平衡(order book imbalance):买卖深度的比率,反映市场压力方向
  • 显示深度和流动性(displayed depth and liquidity):各价位的挂单量
  • 价差状态(spread state):当前买卖价差的大小和变化
  • 微价格及其偏差(microprice and microprice bias):基于深度加权的公平价格估计

市场活动特征

  • 事件和交易活动(event and trade activity):单位时间内的消息数量和成交量
  • 订单流不平衡(order-flow imbalance):买单和卖单的流入差异
  • 短期收益率(short-term returns):过去几秒的价格变化

技术指标特征

  • 实现波动率(realized volatility):基于高频数据的波动率估计
  • 简单技术指标:如移动平均、动量等

标签构建方法

方向标签: 基于未来平均中点价格构建分类标签。具体而言,计算未来几秒的中点价格均值,与当前中点比较,划分为三类:上涨(up)、下跌(down)、中性(neutral)。在输入策略前,这些类别被映射为有符号的方向值(+1、-1、0)。

波动率标签: 使用前向实现的log波动率作为回归目标。波动率计算基于未来价格的对数收益率。在每个时段末尾,移除未来标签不完整的行,避免数据泄露。

防泄露设计

项目特别注意防止数据泄露问题。事件驱动的特征在合并到订单簿网格前会进行滞后处理:同一秒内的消息事件不会被视为在该秒报价决策前就已知的信息。这种设计确保了回测的真实性。

机器学习模型

模型选择

经过探索性比较,项目最终选择XGBoost作为方向和波动率预测的模型。XGBoost(eXtreme Gradient Boosting)是一种高效的梯度提升决策树算法,具有以下优势:

  • 预测性能:在结构化数据上通常表现出色
  • 可解释性:可以提供特征重要性分析
  • 训练效率:支持并行计算,训练速度快
  • 正则化:内置L1/L2正则化,防止过拟合

模型训练流程

训练流程分为多个阶段:

探索阶段:在exploration/directional_ML_methods.ipynb和exploration/volatility_ML_methods.ipynb中,比较不同的机器学习分类/回归方法,支持最终的XGBoost选择。

最终训练:在exploration/train_main_model_artifacts.ipynb中,仅在预测试时段上训练模型,保存为:

  • artifacts/main_models/direction_xgb.joblib(方向预测模型)
  • artifacts/main_models/vol_xgb.joblib(波动率预测模型)
  • artifacts/main_models/model_metadata.json(模型元数据)

这种分离设计确保了模型训练与最终策略评估的独立性。

策略实现与回测

策略模块

项目实现了三个核心策略模块:

stoikov.py:实现基准的固定波动率Avellaneda-Stoikov预留价格和价差逻辑。

stoikov_extension.py:在基准策略基础上,引入预测信息:

  • 通过预测波动率与基准波动率的比率调整库存项
  • 通过有符号方向值对预留价格进行tick级别的偏移
  • 保持价差锚定在基准波动率参考值

constant_spread.py:实现简单的恒定价差策略作为对照。

回测引擎

回测模块(technical/backtesting.py)处理了高频交易回测中的诸多细节:

  • Tick舍入:确保报价符合交易所的价格精度要求
  • 无交叉约束:防止买单价格高于卖单价格
  • 队列近似:模拟限价单在订单队列中的位置
  • 成交模拟:基于历史成交事件判断是否成交
  • 资金与库存会计:跟踪现金和持仓的变化
  • 时段结束平仓:在每个交易时段结束时平掉持仓

回测流程

主回测笔记本(main.ipynb)执行以下步骤:

  1. 加载AAPL订单簿和事件数据
  2. 构建与波动率模型笔记本相同的可解释特征
  3. 使用technical/labelling.py构建方向和波动率标签
  4. 加载保存的XGBoost模型
  5. 生成测试期间的预测
  6. 依次运行恒定价差、基准、扩展和先知策略的回测
  7. 报告论文使用的最终比较指标

评估指标与结果

核心评估指标

策略对比报告以下指标:

  • pnl_final:最终盈亏(PnL)
  • pnl_std:盈亏的标准差
  • sharpe_1s:基于1秒收益的夏普比率
  • avg_abs_inventory:平均绝对库存水平
  • fill_rate:订单成交率
  • volume:成交量

这些指标涵盖了盈利能力、风险调整收益、库存管理、流动性提供等多个维度。

研究发现

虽然项目文档没有提供具体的数值结果,但从方法论设计可以推断预期的研究发现:

  1. 库存管理的重要性:基准Stoikov策略应显著优于恒定价差策略,展示库存感知报价的价值

  2. 预测信息的价值:ML扩展策略应在风险调整收益(夏普比率)方面优于基准策略,证明短期预测的有效性

  3. 预测精度的限制:先知策略与ML策略之间的差距揭示了当前机器学习预测的改进空间

  4. 可解释性与性能的平衡:通过保持原始模型结构,ML扩展策略在提升性能的同时保持了可解释性

技术实现与代码组织

代码结构

项目采用研究型代码库的组织方式,而非生产级软件包:

Thesis-A-S-Extension-/
├── data/
│   ├── AAPL_1s.parquet
│   └── AAPL_evt.parquet
├── exploration/
│   ├── aapl_lobster_eda.ipynb
│   ├── directional_ML_methods.ipynb
│   ├── volatility_ML_methods.ipynb
│   └── train_main_model_artifacts.ipynb
├── strategies/
│   ├── stoikov.py
│   ├── stoikov_extension.py
│   └── constant_spread.py
├── technical/
│   ├── labelling.py
│   └── backtesting.py
├── docs/
│   ├── README.md
│   ├── notebook-research.md
│   └── architecture-and-caveats.md
└── main.ipynb

文档体系

项目包含详尽的文档:

  • README.md:项目概述和快速入门
  • notebook-research.md:研究方法论说明
  • architecture-and-caveats.md:架构设计和注意事项

文档明确说明这是研究代码库,而非生产系统,源代码以notebook形式存在。

研究贡献与局限性

主要贡献

  1. 方法论创新:提出了一种将机器学习预测融入经典做市框架的谨慎方法,在提升性能的同时保持可解释性

  2. 实证验证:使用真实的高频LOB数据,系统比较了多种策略的表现

  3. 可复现性:开源代码和详细文档使得研究可以被其他学者复现和扩展

  4. 特征工程:设计了一套可解释的高频交易特征集,为后续研究提供参考

局限性

  1. 单资产研究:仅使用AAPL一只股票的数据,结论的普适性有待验证

  2. 简化假设:回测中的成交模拟、队列近似等环节做了简化假设,与真实交易存在差距

  3. 未考虑市场冲击:策略假设规模较小,不考虑订单对市场价格的影响

  4. 成本假设:可能未充分考虑交易费用、滑点等摩擦成本

扩展方向与应用前景

潜在改进

  • 多资产扩展:将方法应用于更多股票、期货、加密货币等资产
  • 更复杂的模型:尝试深度学习、强化学习等更先进的预测方法
  • 实时部署:将回测系统改造为实时交易系统
  • 风险管理:引入更复杂的风险约束和仓位管理规则

行业应用

该研究的方法论对以下场景具有参考价值:

  • 高频做市商:优化现有做市策略,提升风险调整收益
  • 量化对冲基金:作为短期预测模型的应用案例
  • 学术研究者:为市场微观结构研究提供方法论参考
  • 金融科技公司:开发智能做市算法和交易工具

总结

这项研究展示了如何将机器学习技术与经典金融理论相结合,在不牺牲可解释性的前提下提升做市策略的表现。通过精心设计的特征工程、谨慎的模型集成和严格的回测验证,项目为量化交易领域的机器学习应用提供了一个有价值的案例。其方法论设计——预测仅修改模型参数而非取代模型结构——为其他金融场景的机器学习应用提供了可借鉴的思路。