第三章 报价策略核心:固定价差策略、动态价差策略、基于波动率的报价调整、库存风险与报价偏移
做市商的核心工作,说白了就是两件事:怎么报价,以及怎么管理风险。
报价策略,就是决定你挂在买单和卖单上的价格。这玩意儿要是搞不好,要么赚不到钱,要么亏得裤衩都不剩。我做了这么多年,见过太多人在这上面栽跟头。
今天咱们就把报价策略的四个核心模块拆开揉碎了讲。嗯,这章内容有点干,但都是实打实的干货。
3.1 固定价差策略:入门级选手的保命符
固定价差策略,就是不管市场怎么变,你的买卖价差始终不变。
比如你给ETH报价,买价1000,卖价1001,价差固定1个tick。市场涨也好跌也好,这个价差雷打不动。
优点很明显:
- 实现简单,几行代码搞定
- 逻辑清晰,不容易出bug
- 适合流动性好的品种
缺点也很致命:
- 波动大的时候,你就是在给市场送钱
- 波动小的时候,你赚不到钱
- 完全无视库存风险
核心公式:
bid_price = mid_price - spread / 2
ask_price = mid_price + spread / 2
其中spread是固定值,比如0.01或0.1个tick。
我个人习惯,在刚上线一个新市场时,先用固定价差跑几天。为什么?因为这时候你对市场特性还不了解,固定价差至少不会让你死得太难看。
小技巧:固定价差策略最适合用在高频、低波动的品种上。比如BTC/USDT在深夜横盘的时候,用固定价差吃手续费,稳得很。
3.2 动态价差策略:跟着市场节奏跳舞
动态价差,说白了就是让价差自己动。
市场活跃了,价差收窄一点,多接点单。市场冷清了,价差拉大一点,别被垃圾单砸到。
我常用的动态调整因子有三个:
| 因子 | 说明 | 调整方向 |
|---|---|---|
| 订单簿深度 | 买卖盘口的挂单量 | 深度大→价差收窄 |
| 成交频率 | 单位时间内的成交笔数 | 频率高→价差收窄 |
| 对手方行为 | 吃单方的激进程度 | 激进→价差拉大 |
举个例子。我记得有一次做MATIC的做市,晚上8点突然成交量暴增。固定价差的同行们被疯狂吃单,亏得妈都不认识。我这边动态价差策略自动把价差从0.01拉到了0.03,虽然少接了不少单,但每一单都是赚钱的。
动态价差伪代码:
def dynamic_spread(market_state):
base_spread = 0.01
depth_factor = 1 - min(order_book_depth / 100, 0.5)
volume_factor = 1 + min(trade_volume / 1000, 0.3)
spread = base_spread * depth_factor * volume_factor
return max(spread, min_spread)
注意:动态价差不是越复杂越好。我见过有人搞了十几个因子,结果策略跑起来比乌龟还慢,等它算完价差,行情都变了。你想想看,做市商拼的是什么?是速度啊!
3.3 基于波动率的报价调整:波动越大,价差越宽
这个策略的核心逻辑很简单:波动率越高,不确定性越大,价差就应该越宽。
为什么?因为波动大的时候,价格可能瞬间跳几个tick。你挂的单子,很可能被一个剧烈波动吃掉,然后价格一去不回头。这时候价差不够宽,你就是在给市场打工。
我常用的波动率指标是历史波动率(HV)和已实现波动率(RV)。
| 指标 | 计算方式 | 适用场景 |
|---|---|---|
| HV(历史波动率) | 过去N根K线的收益率标准差 | 判断整体波动水平 |
| RV(已实现波动率) | 高频采样下的瞬时波动 | 实时调整报价 |
波动率调整公式:
vol_adjusted_spread = base_spread * (1 + k * volatility)
# k是敏感系数,一般取1~5
# volatility是归一化后的波动率值
我曾经踩过一个坑。有一回做SOL的做市,波动率突然飙升,我的策略虽然拉大了价差,但拉得不够快。结果一个插针,我的买单被吃掉,价格直接砸穿。那一单亏了将近2000U。
后来我加了一个波动率突变检测:如果波动率在1秒内翻倍,直接暂停报价5秒钟。这个逻辑救了我好几次。
避坑指南:波动率指标不要用太长的窗口。我建议用10~20根1分钟K线算HV,用最近100笔成交算RV。太长的话,等你反应过来,行情都走完了。
3.4 库存风险与报价偏移:别让库存压死你
库存风险,是做市商最大的敌人。
你想想看,你手里攒了一堆ETH,结果ETH暴跌,你亏不亏?反过来,你把ETH全卖光了,结果ETH暴涨,你踏不踏空?
所以,报价必须根据库存做偏移。
核心逻辑:
- 库存多了 → 降低卖价,提高买价(鼓励卖出,抑制买入)
- 库存少了 → 提高卖价,降低买价(鼓励买入,抑制卖出)
库存偏移公式:
inventory_skew = (current_inventory - target_inventory) / max_inventory
adjusted_bid = mid_price - spread/2 - inventory_skew * skew_factor
adjusted_ask = mid_price + spread/2 - inventory_skew * skew_factor
skew_factor控制偏移力度,一般取0.1~0.5个tick。
我个人的经验是,库存偏移一定要和波动率联动。波动大的时候,偏移力度要加大,因为这时候库存风险更高。波动小的时候,偏移可以小一点,让策略多赚点手续费。
警告:库存偏移不是万能的。如果你发现偏移量已经拉到了极限,库存还在往危险方向跑,那就别硬扛了。该止损止损,该对冲对冲。我曾经因为舍不得止损,硬扛了3个小时,最后亏了5万U。嗯,那是我做市生涯最惨的一天。
3.5 四种策略如何组合?
实际生产中,没人只用一种策略。都是组合拳。
我常用的组合方式:
- 固定价差作为基础,保证最低利润
- 动态调整根据订单簿和成交情况微调
- 波动率因子在波动剧烈时大幅拉宽价差
- 库存偏移在最后环节修正报价
这四层叠加下来,报价逻辑大概是这样的:
final_bid = mid - (base_spread * dynamic_factor * vol_factor) / 2 - inventory_skew
final_ask = mid + (base_spread * dynamic_factor * vol_factor) / 2 - inventory_skew
你看,每个因子各司其职。固定价差保底,动态因子适应市场,波动率因子防黑天鹅,库存偏移管风险。缺一个都不行。
最后说一句:策略写好了,一定要回测。我习惯用过去30天的数据做回测,然后跑模拟盘跑一周。没问题了再上实盘。别一上来就真金白银干,那是找死。
公众号:蓝海资料掘金营,微信deep3321