跳至内容

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

cover

在我们之前的博客文章中,我们介绍了新的 avellaneda_market_making 策略。这一次,我们将深入探讨该策略的数学原理。我们旨在解释如何将原始的 Avellaneda-Stoikov 模型适配到加密货币市场,并简化关键参数(即希腊字母)的计算。

本文从数学上论证了使该模型更适用于 Hummingbot 交易者的假设与计算过程。

原始模型与我们提出的扩展

让我们首先回顾一下 Avellaneda-Stoikov 论文 中的核心公式:

原始模型

保留价格(市场价,根据目标库存水平调整):

\[ r(s,q,t,\sigma)=s-q\gamma\sigma^{2}(T-t) \]
\[ \operatorname{ker} f=\{g\in G:f(g)=e_{H}\}{\mbox{.}} \]

围绕保留价格的最优价差:

\[ \delta^{a}+\delta^{b}=\gamma\sigma^{2}(T-t)+\frac{2}{\gamma}ln(1+\frac{\gamma}{\kappa}) \]

其中:

  • s [报价资产] = 当前中间价格
  • q [无单位] = 基础资产库存数量(多头/空头头寸可为正/负)
  • \(\gamma\) [1/报价资产] = 库存风险厌恶参数
  • \(\sigma\) [报价资产] = 波动率
  • T [无单位] = 结束时间(方便地归一化为 1)
  • t [无单位] = 当前时间(T 已归一化为 1,因此 t 是时间比例)
  • \(\delta^{a}, \delta^{b}\) [报价资产] = 买卖价差(它们相对于保留价格对称 → \(\delta^{a}=\delta^{b}\)
  • \(\kappa\) [1/报价资产] = 订单簿流动性参数

建议的扩展

该论文的模型基于一些可能与加密交易者需求不完全契合的假设。为解决此问题,我们提出若干修改:

  1. Hummingbot 允许交易者指定订单数量,因此我们引入 order_amount_shape_factor (\(\eta\)),如 2018 年最优高频做市论文所述。
  2. 鉴于加密市场的波动性变化迅速,我们建议设置一个波动率阈值 vol_to_spread_multiplier,当超过该阈值时触发策略参数的重新计算。
  3. 如第 2 点所述的重新计算。
  4. 考虑到机器人可能长期运行,我们建议设定一个有限的 closing_timeT),并配合周期性时间片段 t,每次 t=T 时进行参数重校准。

\(\gamma\)\(\kappa\)\(\eta\) 的计算

引言

原始的 Avellaneda 方程包含多个变量。为建立约束,我们以买卖价差相对于中间价作为机器人主要参考值。此外,\(\gamma\) 是用于管理库存风险的风险厌恶参数,因此我们寻求一个“调节旋钮”参数,在遵循用户定义价差的前提下控制该因子。

\(\gamma\) 的计算

假设用户已设置 min_spreadmax_spread,我们基于这些价差计算最大可能的风险因子(\(\gamma\)):

当 q>0 时(应降低库存比例)

为符合用户定义的价差:

\[ Spread\ optimal\_ask_{t=0}\ge Min\ Spread \]
\[ Spread\ optimal\_bid_{t=0}\le Max\ Spread \]

由此推导出:

\[ (\frac{1}{2}-q)\gamma\sigma^{2}+\frac{1}{2}ln(1+\frac{\gamma}{\kappa})\ge Min\ Spread \]
\[ (\frac{1}{2}+q)\gamma \sigma ^{2}+\frac{1}{2}ln(1+\frac{\gamma}{\kappa}) \le Max\ Spread \]

合并这些不等式:

\[ 2q\gamma\sigma^{2} \le Max\ Spread - Min\ Spread \]

当 q<0 时(应增加库存比例)

对于 q<0:

\[ -2q\gamma\sigma^{2} \le Max\ Spread - Min\ Spread \]

两种情况均导出以下不等式:

\[ \gamma \le \frac{Max\ Spread-Min\ Spread}{2\|q\|\sigma^{2}}=\gamma_{max} \]

inventory_risk_aversion(IRA)设为 0 到 1 之间的系数,我们定义 \(\gamma\) 为:

\[ \gamma=\gamma_{max}*IRA=\frac{Max\ Spread-Min\ Spread}{2\|q\|\sigma^{2}}*IRA \]

\(\kappa\) 的计算

我们选择 order_book_depth_factor (\(\kappa\)),使得在 t=0 时从最大可能的价差开始。这一决策旨在遍历更广泛的价差范围以实现最大利润。计算公式如下:

\[ spread_{t=0}=\frac{\delta_{a}+\delta_{b}}{2}\pm \Delta \]
\[ (\delta_{a}+\delta_{b})_{max}=(2-IRA)*Max\ Spread+IRA*Min\ Spread \]

\(\kappa\) 的最终公式为:

\[ \kappa\bigg((\delta_{a}+\delta_{b})_{t=0}\bigg)=\frac{\gamma}{exp\{\frac{(\delta_{a}+\delta_{b})_{t=0}\gamma-\sigma^{2}\gamma^{2}}{2}\}-1} \]

\(\eta\) 的计算

order_amount_shape_factor (\(\eta\)) 根据实际库存 q 与目标库存的距离调整订单规模。通过使用 inventory_risk_aversion(IRA),我们确定:

\[ q_{decay}=\frac{Total\,inventory\,in\,base\_asset}{IRA}\newline\\[0.1in]\eta=\frac{1}{q_{decay}} \]

\(IRA \to 0 \implies \gamma \to 0\)

\(IRA \to 0\)(等价于 \(\gamma \to 0\))时,保留价格将对称于中间价格,最终价差由以下公式决定:

\[ IRA \to 0 \implies \gamma \to 0 \newline\\[0.1in] t=0 \implies (T-t)=1 \newline\\[0.3in] \lim_{\gamma \to 0} r(s,q,t=0,\sigma) = s \\[0.3in] \lim_{\gamma \to 0} \delta^{a}+\delta^{b}(q,t=0,\sigma) = \frac{2}{\kappa}\\[0.1in] \]

因此,若 \(\gamma \to 0\),围绕 r = 中间价格的价差将固定为:

\[ r = s\\[0.1in] If\ \gamma \to 0 \implies IRA \to 0\ \therefore\\[0.1in] (\delta_{a}+\delta_{b})=2*Max\ Spread \]

在此情况下,纯做市策略是 Avellaneda 做市策略的一个特例。

参考文献

限价订单簿中的高频交易(Avellaneda 和 Stoikov,2006)

最优高频做市策略(Fushimi、Gonzalez Rojas 和 Herman,2018)