报价生成策略:固定价差策略、动态价差策略、基于波动率的报价、库存管理策略

做市商的核心工作是什么?说白了就两件事:怎么报价怎么控风险

报价策略决定了你赚不赚钱,库存管理决定了你活不活得久。这一章,我把这两块揉在一起讲。我个人习惯把报价策略分成四个层次:固定价差、动态价差、波动率报价、库存管理。它们不是互斥的,而是层层叠加的关系。

一、固定价差策略

这是最基础的策略,也是很多新手做市商的第一站。

逻辑很简单:买一价 = 中间价 - 价差/2,卖一价 = 中间价 + 价差/2。价差是固定的,比如0.01 USDT。

// 固定价差策略伪代码
mid_price = (bid_depth + ask_depth) / 2  // 或者用最新成交价
spread = 0.01  // 固定价差
bid_price = mid_price - spread / 2
ask_price = mid_price + spread / 2
place_order(bid_price, ask_price, volume)

我在项目中遇到过一个问题:固定价差在震荡行情里还好,一旦出现单边行情,你的单子会被瞬间吃掉。为什么?因为市场在动,你的报价没动。价差太窄,你成了别人的提款机。

避坑指南:固定价差策略只适合波动率极低的市场,比如某些稳定币对。千万别用在BTC/ETH这种高波动品种上,否则你会亏到怀疑人生。

二、动态价差策略

固定价差太死板,那怎么办?让价差跟着市场走。

动态价差的核心思想是:市场波动越大,价差越宽;市场越平静,价差越窄。这样既能保护自己,又能提高竞争力。

我常用的动态价差公式:

spread = base_spread + k * volatility

其中 volatility 可以用最近N笔交易的收益率标准差来算。k 是一个调节系数,我一般设0.5到1.5之间。

举个例子:

def dynamic_spread(mid_price, trades, k=1.0, base_spread=0.005):
    # 计算最近100笔交易的波动率
    returns = [np.log(trades[i] / trades[i-1]) for i in range(1, len(trades))]
    vol = np.std(returns[-100:])  # 最近100笔
    spread = base_spread + k * vol
    return spread

你想想看,如果市场突然暴跌,波动率飙升,你的价差自动变宽。这样你就不容易被「插针」打穿。嗯,这里要注意:k 值不能设太大,否则你的报价会失去竞争力,单子挂不出去。

经验之谈:动态价差策略里,波动率的计算窗口很关键。窗口太短,容易被噪音干扰;窗口太长,反应太慢。我个人习惯用30-100笔交易作为窗口,具体看交易对的活跃度。

三、基于波动率的报价

动态价差只是第一步。真正进阶的做法是:把波动率直接融入报价模型

什么意思?就是你的报价不仅要考虑价差,还要考虑报价深度更新频率

我见过很多团队,波动率一高就疯狂撤单重挂,结果被交易所的费率吃光利润。正确的做法是:

  1. 波动率低时:报价窄,深度浅,更新频率低。因为市场稳定,不需要频繁调整。
  2. 波动率高时:报价宽,深度深,更新频率高。因为市场剧烈,你需要快速反应。

这里有一个我常用的波动率分层策略:

波动率区间 价差倍数 报价深度 更新间隔(ms)
< 0.1% 1x 基础量 500
0.1% - 0.5% 1.5x 1.5x 200
0.5% - 1% 2x 2x 100
> 1% 3x 3x 50

我曾经在某个山寨币上吃过亏。波动率突然从0.2%飙到2%,我的策略没反应过来,还在用窄价差挂单。结果被一连串的大单打穿,库存瞬间变成负数。从那以后,我强制要求所有策略必须做波动率监控,一旦超过阈值,自动切换报价模式。

核心要点:基于波动率的报价,本质上是把「市场风险」量化成「报价参数」。波动率是你的朋友,不是敌人。学会用它,你就能在风暴中赚钱。

四、库存管理策略

报价策略赚的是价差,库存管理保的是命。

库存管理的目标很简单:让库存保持在一个安全范围内。既不能太多(暴露方向性风险),也不能太少(错失交易机会)。

我常用的库存管理方法有三种:

  1. 库存偏移法:根据当前库存偏离目标库存的程度,调整报价。比如你库存太多,就降低买价、提高卖价,鼓励卖出。
  2. 库存惩罚项:在报价公式里加入库存惩罚因子。库存偏离越大,报价越激进。
  3. 库存对冲:用期货或期权对冲现货库存风险。适合大资金做市商。

库存偏移法的伪代码:

def inventory_adjusted_price(mid_price, inventory, target_inventory, k_inv=0.1):
    # inventory > target_inventory 表示库存过多,需要降价卖出
    offset = k_inv * (inventory - target_inventory) / target_inventory
    bid_price = mid_price - spread/2 - offset
    ask_price = mid_price + spread/2 - offset
    return bid_price, ask_price

你想想看,如果库存偏移系数 k_inv 设得太大,你的报价会变得非常激进,可能被市场吃掉。设得太小,库存风险又控制不住。我一般从0.05开始调,观察库存回归速度,慢慢找到最优值。

注意:库存管理不是独立运行的。它必须和报价策略联动。比如波动率高时,库存容忍度应该降低,因为市场方向性风险更大。

五、策略组合与实战经验

在实际系统中,我不会只用单一策略。而是把上面四种策略组合起来:

  • 基础层:固定价差作为保底
  • 调节层:动态价差根据波动率调整
  • 优化层:波动率报价控制深度和频率
  • 风控层:库存管理兜底

下面这张图展示了它们之间的关系:

报价生成策略四层架构 第一层:固定价差策略 基础报价框架,设定最小价差 第二层:动态价差策略 根据波动率动态调整价差宽度 第三层:基于波动率的报价 控制报价深度、更新频率、撤单策略 第四层:库存管理策略 策略深度递增 →

我记得有一次做ETH做市,波动率突然飙升到3%。固定价差策略直接崩了,动态价差虽然撑住了,但库存管理没跟上,导致库存方向性暴露。最后靠波动率报价的快速撤单机制才保住本金。嗯,从那以后,我要求所有策略必须四层联动,缺一不可。

实战建议:刚开始做市时,先用固定价差+简单库存管理跑起来。等稳定了,再逐步加入动态价差和波动率报价。别一上来就搞复杂模型,容易翻车。

最后说一句:报价策略没有银弹。不同市场、不同品种、不同资金量,适合的策略都不一样。我的经验是:先活下去,再想怎么赚钱。库存管理永远是第一优先级,报价策略只是锦上添花。


公众号:蓝海资料掘金营,微信deep3321