4. 价差策略设计:固定价差策略、动态价差策略、基于波动率的价差调整、基于订单簿不平衡的价差调整、价差与库存风险的平衡
做市商的核心工作,说白了就是「低买高卖」赚价差。但价差设多少,是个技术活。
设太宽,单子挂不出去,赚不到钱。设太窄,虽然成交快,但容易被高频玩家反复收割。我见过不少新手做市商,上来就把价差压到0.01%,结果被套利机器人来回摩擦,库存全亏光了。
这一章,我们来拆解价差设计的几种主流思路。我会结合实战经验,把每种策略的优缺点、适用场景都讲透。
4.1 固定价差策略
这是最基础的策略。说白了,就是不管市场怎么变,我就在中间价两边各挂一个固定宽度的单子。
比如BTC/USDT当前中间价是50000,我设价差0.1%,那么买单价就是49975,卖单价就是50025。就这么简单。
缺点:市场波动大时容易被吃掉,波动小时又赚不够。
我在项目中遇到过一个小团队,他们用固定价差做ETH/USDT,设了0.05%。结果那天ETH突然拉升3%,他们的卖单瞬间被扫光,库存全变成了USDT。嗯,这就是固定价差的典型风险——你无法适应市场变化。
4.2 动态价差策略
动态价差,就是让价差跟着市场走。市场波动大,我就把价差拉宽;市场平稳,我就收窄。
为什么这么做?你想想看,波动大的时候,价格跳来跳去,你设窄价差很容易被「插针」打穿。拉宽一点,给自己留点安全垫。
最简单的动态价差公式:
spread = base_spread + k * volatility
其中base_spread是基础价差,k是敏感系数,volatility是当前波动率。
我习惯用过去N笔成交的收益率标准差来算波动率。N取多少?我个人觉得20-50比较合适,太短了噪声大,太长了反应慢。
4.3 基于波动率的价差调整
这个策略是动态价差的升级版。核心思想是:用更精细的波动率模型来指导价差调整。
常用的波动率指标有:
- 历史波动率(HV):过去一段时间价格变动的标准差
- 已实现波动率(RV):用高频数据算的日内波动
- 隐含波动率(IV):从期权价格反推的波动率(如果有期权市场)
我个人比较喜欢用已实现波动率。为什么呢?因为它反应快,能捕捉到分钟级别的波动变化。
举个例子:
def calc_spread_by_volatility(mid_price, rv, base_spread=0.0005):
# rv: 已实现波动率,比如0.02表示2%
# 当rv < 0.01时,用基础价差
# 当rv在0.01-0.05之间,价差线性放大
# 当rv > 0.05时,价差设到最大0.002
if rv < 0.01:
return base_spread
elif rv < 0.05:
return base_spread + (rv - 0.01) * 0.03
else:
return 0.002
这段代码看着简单,但实际跑起来效果不错。我在做SOL/USDT时用过类似的逻辑,把价差从0.03%到0.15%动态调整,整体收益比固定价差高了大概30%。
4.4 基于订单簿不平衡的价差调整
这个策略关注的是订单簿的「形状」。说白了,就是看买单多还是卖单多。
订单簿不平衡指标(Order Book Imbalance, OBI)的计算方式:
OBI = (bid_volume - ask_volume) / (bid_volume + ask_volume)
OBI的取值范围是[-1, 1]。正值表示买单多,负值表示卖单多。
当OBI很大时(比如0.8),说明买方力量强,价格可能要涨。这时候你应该把卖单价差拉宽,把买单价差收窄。反过来也一样。
我见过一个很经典的实现:
def adjust_spread_by_obi(base_spread, obi, max_adjust=0.5):
# obi: -1 到 1
# 根据obi调整价差偏移
adjust = obi * max_adjust
bid_spread = base_spread * (1 - adjust) # 买单收窄
ask_spread = base_spread * (1 + adjust) # 卖单拉宽
return bid_spread, ask_spread
4.5 价差与库存风险的平衡
这是价差设计的终极难题。价差设得宽,库存风险小,但赚得少。价差设得窄,成交快,但库存风险大。
怎么平衡?核心思路是:让价差反映你的库存风险暴露。
具体来说,就是引入一个「库存惩罚因子」。当你的库存偏离目标水平时,价差自动调整。
比如你的目标库存是50% BTC、50% USDT。现在BTC库存变成了60%,说明你BTC多了,风险暴露大。这时候应该把BTC的卖单价差收窄(鼓励卖出),把买单价差拉宽(抑制买入)。
一个简单的实现:
def inventory_adjusted_spread(base_spread, inventory_ratio, target_ratio=0.5):
# inventory_ratio: 当前库存比例(比如BTC占比)
# target_ratio: 目标库存比例
deviation = inventory_ratio - target_ratio
# deviation为正,说明BTC多了,要鼓励卖出
bid_spread = base_spread * (1 + deviation * 2) # 买单价差拉宽
ask_spread = base_spread * (1 - deviation * 2) # 卖单价差收窄
return bid_spread, ask_spread
我个人的经验是,把库存风险调整和波动率调整结合起来用效果最好。比如:
- 先用波动率算出基础价差
- 再用OBI做方向性微调
- 最后用库存风险做最终修正
三层叠加,基本能应对大部分市场情况。
知识体系总览
下面这张图总结了价差策略的核心逻辑和相互关系:
这张图把价差策略的四个子策略和库存风险平衡的关系画清楚了。你可以看到,从最简单的固定价差,到动态价差,再到基于波动率和OBI的精细调整,最后都要回归到库存风险这个核心问题上。
嗯,价差设计没有银弹。不同的币种、不同的市场环境、不同的资金规模,适合的策略都不一样。我建议你从固定价差开始,逐步加入动态调整,最后再引入库存风险控制。一步一步来,别想一口吃成胖子。
公众号:蓝海资料掘金营,微信deep3321