跳转至内容

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_time (T) 和重复的时间分数 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)