章节 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)执行以下步骤:
- 加载AAPL订单簿和事件数据
- 构建与波动率模型笔记本相同的可解释特征
- 使用technical/labelling.py构建方向和波动率标签
- 加载保存的XGBoost模型
- 生成测试期间的预测
- 依次运行恒定价差、基准、扩展和先知策略的回测
- 报告论文使用的最终比较指标
评估指标与结果
核心评估指标
策略对比报告以下指标:
- pnl_final:最终盈亏(PnL)
- pnl_std:盈亏的标准差
- sharpe_1s:基于1秒收益的夏普比率
- avg_abs_inventory:平均绝对库存水平
- fill_rate:订单成交率
- volume:成交量
这些指标涵盖了盈利能力、风险调整收益、库存管理、流动性提供等多个维度。
研究发现
虽然项目文档没有提供具体的数值结果,但从方法论设计可以推断预期的研究发现:
库存管理的重要性:基准Stoikov策略应显著优于恒定价差策略,展示库存感知报价的价值
预测信息的价值:ML扩展策略应在风险调整收益(夏普比率)方面优于基准策略,证明短期预测的有效性
预测精度的限制:先知策略与ML策略之间的差距揭示了当前机器学习预测的改进空间
可解释性与性能的平衡:通过保持原始模型结构,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形式存在。
研究贡献与局限性
主要贡献
方法论创新:提出了一种将机器学习预测融入经典做市框架的谨慎方法,在提升性能的同时保持可解释性
实证验证:使用真实的高频LOB数据,系统比较了多种策略的表现
可复现性:开源代码和详细文档使得研究可以被其他学者复现和扩展
特征工程:设计了一套可解释的高频交易特征集,为后续研究提供参考
局限性
单资产研究:仅使用AAPL一只股票的数据,结论的普适性有待验证
简化假设:回测中的成交模拟、队列近似等环节做了简化假设,与真实交易存在差距
未考虑市场冲击:策略假设规模较小,不考虑订单对市场价格的影响
成本假设:可能未充分考虑交易费用、滑点等摩擦成本
扩展方向与应用前景
潜在改进
- 多资产扩展:将方法应用于更多股票、期货、加密货币等资产
- 更复杂的模型:尝试深度学习、强化学习等更先进的预测方法
- 实时部署:将回测系统改造为实时交易系统
- 风险管理:引入更复杂的风险约束和仓位管理规则
行业应用
该研究的方法论对以下场景具有参考价值:
- 高频做市商:优化现有做市策略,提升风险调整收益
- 量化对冲基金:作为短期预测模型的应用案例
- 学术研究者:为市场微观结构研究提供方法论参考
- 金融科技公司:开发智能做市算法和交易工具
总结
这项研究展示了如何将机器学习技术与经典金融理论相结合,在不牺牲可解释性的前提下提升做市策略的表现。通过精心设计的特征工程、谨慎的模型集成和严格的回测验证,项目为量化交易领域的机器学习应用提供了一个有价值的案例。其方法论设计——预测仅修改模型参数而非取代模型结构——为其他金融场景的机器学习应用提供了可借鉴的思路。