3、做市策略设计基础:对称做市策略、非对称做市策略、库存基准模型(Avellaneda-Stoikov)、做市策略参数(价差宽度、订单规模、更新频率)

做市策略,说白了就是怎么在买卖两边同时挂单,赚那个差价。很多人一开始觉得这事简单——两边挂单等着吃差价就行。但真上手了你会发现,这里面的门道比想象中深得多。我最早做做市的时候,就吃过不少亏,今天把这些基础给你掰开揉碎了讲清楚。

3.1 对称做市策略:最朴素的玩法

对称做市策略,是所有做市策略的起点。它的逻辑非常直白:

  • 在中间价两侧,对称地挂买单和卖单
  • 买单和卖单的价差宽度一样
  • 订单规模也相同

举个例子,假设当前BTC价格是50000 USDT,你设置价差宽度为100 USDT,那么:

  • 买单挂在49950 USDT
  • 卖单挂在50050 USDT
  • 两边各挂1个BTC

嗯,这里要注意——对称策略有个致命问题。我在项目中遇到过,市场一旦出现单边行情,你的库存会迅速失衡。比如价格一直涨,你的买单不断成交,卖单却一直没被吃掉。结果就是手里全是货,浮亏越来越大。

核心要点:对称做市策略适用于震荡市,不适合趋势行情。它的优点是简单、容易实现,缺点是库存风险完全暴露。

3.2 非对称做市策略:聪明一点的玩法

非对称做市策略,说白了就是根据你的库存情况,动态调整买卖单的价差和规模。你想想看,如果你手里已经有很多货了,是不是应该把卖单挂近一点、买单挂远一点?

我个人的习惯是,把库存偏离度作为调整依据:

  • 库存为正(手里货多):卖单价差缩小,买单价差扩大
  • 库存为负(手里货少):买单价差缩小,卖单价差扩大
  • 库存为零:回归对称策略

举个例子,假设你目标库存是10个ETH,现在手里有15个:

  • 卖单价差从0.1%缩小到0.05%
  • 买单从0.1%扩大到0.15%
  • 卖单规模从5个增加到8个
  • 买单规模从5个减少到3个

这样做的好处很明显——你主动把货甩出去,同时减少进货。我曾经在ETH上用过这个策略,效果比对称策略好不少,至少库存不会失控。

小技巧:非对称调整的幅度不要太大。我建议每次调整不超过基准值的20%,否则容易造成订单频繁撤改,增加交易成本。

3.3 库存基准模型:Avellaneda-Stoikov

说到做市策略,就绕不开Avellaneda-Stoikov模型。这是2008年提出来的,到现在还是很多量化团队的基础框架。为什么?因为它把做市问题数学化了。

这个模型的核心思想是:做市商应该在库存偏离目标时,主动调整报价来引导库存回归。它给出了一个明确的公式:

# Avellaneda-Stoikov 模型核心公式
# 最优报价 = 中间价 - 库存偏移项 - 风险规避项

# 库存偏移项 = gamma * sigma^2 * (T - t) * q_t
# 风险规避项 = gamma * sigma^2 * (T - t) * (1/2)

# 其中:
# gamma: 风险厌恶系数
# sigma: 波动率
# T - t: 剩余时间
# q_t: 当前库存偏离度

我刚开始看这个公式的时候,也觉得头大。但实际用起来,你只需要关注几个关键参数:

参数 含义 经验值
gamma 风险厌恶系数 0.01 - 0.1
sigma 波动率 根据历史数据计算
T 做市周期 1小时 - 1天
q_t 库存偏离度 实时计算

为什么这个模型这么重要?因为它给出了一个理论上的最优解。你想想看,如果你能精确计算出每个时刻的最优报价,那做市就变成了一个数学问题,而不是凭感觉。

避坑指南:我曾经在实盘中使用Avellaneda-Stoikov模型时,发现gamma参数设得太大会导致报价频繁跳动。建议先用历史数据回测,找到合适的gamma范围。一般来说,波动率越大的品种,gamma应该越小。

3.4 做市策略参数:价差宽度、订单规模、更新频率

做市策略的核心参数就三个:价差宽度、订单规模、更新频率。这三个参数决定了你的策略是赚是赔。

3.4.1 价差宽度

价差宽度,就是买单和卖单之间的价格差距。它直接影响你的盈利和成交概率:

  • 价差越大:单笔盈利高,但成交概率低
  • 价差越小:单笔盈利低,但成交概率高

我个人的经验是,价差宽度应该根据市场波动率动态调整。波动率大的时候,价差要放宽;波动率小的时候,价差可以收窄。一个常用的公式是:

# 动态价差宽度计算
spread = base_spread * (1 + k * (current_volatility / avg_volatility - 1))

# 其中:
# base_spread: 基准价差,通常设为0.1% - 0.5%
# k: 调整系数,通常设为1 - 3
# current_volatility: 当前波动率
# avg_volatility: 平均波动率

3.4.2 订单规模

订单规模决定了你每次挂多少量。这里有个常见的误区——很多人觉得规模越大越好。其实不是。

订单规模受两个因素制约:

  • 你的资金量:总资金决定了你能承受的最大库存
  • 市场深度:订单规模不能超过市场深度的10%,否则容易造成滑点

我记得有一次在某个小币种上做市,订单规模设得太大,结果一个买单直接把价格拉高了2%。从那以后,我每次都会先看市场深度再决定规模。

3.4.3 更新频率

更新频率,就是你多久重新计算一次报价。这个参数很微妙:

  • 更新太快:容易造成订单频繁撤改,增加交易成本
  • 更新太慢:报价跟不上市场变化,容易吃大亏

我建议的更新频率是:

市场状态 更新频率 说明
正常波动 1 - 5秒 足够应对大部分情况
高波动 0.1 - 1秒 需要快速响应
低波动 10 - 30秒 减少不必要的操作
经验之谈:这三个参数不是孤立的。价差宽度、订单规模、更新频率之间要相互配合。比如价差收窄时,订单规模可以适当放大;更新频率提高时,价差可以稍微放宽。我一般会先固定两个参数,然后优化第三个,找到最优组合。

3.5 知识体系总览

为了让你更直观地理解这些概念之间的关系,我画了一张图:

做市策略设计基础 - 知识体系 做市策略设计 对称做市策略 非对称做市策略 Avellaneda-Stoikov模型 策略参数 对称价差 对称规模 动态价差 动态规模 库存偏移项 风险规避项 价差宽度 订单规模 更新频率 图:做市策略设计基础 - 四大核心模块及其子项

这张图把今天讲的内容串起来了。你可以看到,对称和非对称策略是基础玩法,Avellaneda-Stoikov模型提供了理论支撑,而三个参数则是你实际调优的抓手。

做市策略设计,说白了就是在盈利和风险之间找平衡。没有完美的策略,只有适合当前市场的策略。我建议你从对称策略开始,逐步加入非对称调整,最后再用Avellaneda-Stoikov模型做精细化优化。一步一个脚印,别想一口吃成胖子。

专注资料整理