Avellaneda & Stoikov 策略的技术深度解析¶

在我们之前的博客文章中,我们介绍了新的 avellaneda_market_making 策略。这一次,我们将深入探讨该策略的数学原理。我们旨在解释如何将原始的 Avellaneda-Stoikov 模型适配到加密货币市场,并简化关键参数(即希腊字母)的计算。
本文从数学上论证了使该模型更适用于 Hummingbot 交易者的假设与计算过程。
原始模型与我们提出的扩展¶
让我们首先回顾一下 Avellaneda-Stoikov 论文 中的核心公式:
原始模型¶
保留价格(市场价,根据目标库存水平调整):
围绕保留价格的最优价差:
其中:
- s [报价资产] = 当前中间价格
- q [无单位] = 基础资产库存数量(多头/空头头寸可为正/负)
- \(\gamma\) [1/报价资产] = 库存风险厌恶参数
- \(\sigma\) [报价资产] = 波动率
- T [无单位] = 结束时间(方便地归一化为 1)
- t [无单位] = 当前时间(T 已归一化为 1,因此 t 是时间比例)
- \(\delta^{a}, \delta^{b}\) [报价资产] = 买卖价差(它们相对于保留价格对称 → \(\delta^{a}=\delta^{b}\))
- \(\kappa\) [1/报价资产] = 订单簿流动性参数
建议的扩展¶
该论文的模型基于一些可能与加密交易者需求不完全契合的假设。为解决此问题,我们提出若干修改:
- Hummingbot 允许交易者指定订单数量,因此我们引入 order_amount_shape_factor(\(\eta\)),如 2018 年最优高频做市论文所述。
- 鉴于加密市场的波动性变化迅速,我们建议设置一个波动率阈值 vol_to_spread_multiplier,当超过该阈值时触发策略参数的重新计算。
- 如第 2 点所述的重新计算。
- 考虑到机器人可能长期运行,我们建议设定一个有限的 closing_time(T),并配合周期性时间片段 t,每次 t=T 时进行参数重校准。
\(\gamma\)、\(\kappa\) 和 \(\eta\) 的计算¶
引言¶
原始的 Avellaneda 方程包含多个变量。为建立约束,我们以买卖价差相对于中间价作为机器人主要参考值。此外,\(\gamma\) 是用于管理库存风险的风险厌恶参数,因此我们寻求一个“调节旋钮”参数,在遵循用户定义价差的前提下控制该因子。
\(\gamma\) 的计算¶
假设用户已设置 min_spread 和 max_spread,我们基于这些价差计算最大可能的风险因子(\(\gamma\)):
当 q>0 时(应降低库存比例)¶
为符合用户定义的价差:
由此推导出:
合并这些不等式:
当 q<0 时(应增加库存比例)¶
对于 q<0:
两种情况均导出以下不等式:
将 inventory_risk_aversion(IRA)设为 0 到 1 之间的系数,我们定义 \(\gamma\) 为:
\(\kappa\) 的计算¶
我们选择 order_book_depth_factor (\(\kappa\)),使得在 t=0 时从最大可能的价差开始。这一决策旨在遍历更广泛的价差范围以实现最大利润。计算公式如下:
\(\kappa\) 的最终公式为:
\(\eta\) 的计算¶
order_amount_shape_factor (\(\eta\)) 根据实际库存 q 与目标库存的距离调整订单规模。通过使用 inventory_risk_aversion(IRA),我们确定:
\(IRA \to 0 \implies \gamma \to 0\)¶
当 \(IRA \to 0\)(等价于 \(\gamma \to 0\))时,保留价格将对称于中间价格,最终价差由以下公式决定:
因此,若 \(\gamma \to 0\),围绕 r = 中间价格的价差将固定为:
在此情况下,纯做市策略是 Avellaneda 做市策略的一个特例。
 
                