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 做市策略的一个特例。