4. 做市商策略框架:被动做市 vs 主动做市、报价策略分类、库存管理基础
做市商策略,说白了就是回答三个问题:什么时候报价?报什么价?报完价之后怎么管库存? 这三个问题搞定了,你的做市机器人基本就能跑起来了。
我个人习惯把做市策略分成两大类:被动做市和主动做市。别被名字吓到,其实理解起来很简单。
4.1 被动做市 vs 主动做市
被动做市,就是「挂单等成交」。你在买一卖一的位置挂上单子,等着别人来吃。这种策略的核心是赚取买卖价差。我在项目中遇到过不少新手,一上来就想着主动吃单,结果手续费交了一大堆,利润全没了。其实对于流动性好的币对,被动做市反而更稳。
主动做市,则是「主动去吃单」。当市场出现机会时,你主动吃掉对手的挂单,赚取的是价格回归的收益。比如某币突然被砸了一个大坑,你主动买入,等价格回来再卖出。
嗯,这里要注意:主动做市的风险比被动做市高得多。我曾经在一次ETH的闪崩中,主动做市策略直接亏了3%的仓位。从那以后,我给自己定了个规矩——主动做市的仓位绝不超过总资金的20%。
- 被动做市:赚价差,风险低,收益稳定
- 主动做市:赚回归,风险高,收益弹性大
4.2 报价策略分类
报价策略,说白了就是「怎么定你的买价和卖价」。我常用的报价策略有四种,你想想看,其实都是从不同角度去优化你的报价位置。
| 策略名称 | 核心逻辑 | 适用场景 |
|---|---|---|
| 固定价差策略 | 买卖价差固定,比如永远挂0.1%的价差 | 高流动性、波动小的币对 |
| 动态价差策略 | 价差随波动率变化,波动大时价差拉大 | 波动剧烈的市场 |
| 订单簿深度策略 | 根据买卖盘深度调整报价位置 | 深度不均匀的市场 |
| 时间加权策略 | 把大单拆成小单,随时间均匀挂出 | 大额做市、减少市场冲击 |
我个人最常用的是动态价差策略。为什么?因为市场不会一直平静。你想想看,如果波动率突然飙升,你还用固定价差,很容易被套住。我曾经在BTC波动率从20%飙到80%的那天,用固定价差策略亏了一整周的利润。从那以后,我就把动态价差写进了核心策略里。
4.3 库存管理基础
库存管理,是做市商策略里最容易被忽视的一环。很多人只盯着报价策略,结果库存越积越多,最后变成「被动持仓」。嗯,这里要敲黑板了。
库存管理的核心目标只有一个:让库存保持在中性水平。说白了,就是不要囤货,也不要空仓。你想想看,如果你囤了一堆ETH,突然ETH暴跌,你的做市利润全被库存亏损吃掉了。
我常用的库存管理方法有三种:
- 库存上限控制:设定一个最大库存比例,比如总资金的10%。超过这个比例,强制平仓一部分。
- 库存偏移调整:根据当前库存偏离中性水平的程度,动态调整报价。比如库存偏多,就降低卖价、提高买价,加速出货。
- 对冲策略:在期货或永续合约上做反向对冲。比如现货库存多了,就在合约上做空等量的仓位。
4.4 策略框架总览
下面这张图是我自己整理的做市商策略框架。你看一眼,就能把整个体系串起来。
你看这个框架,从上到下是层层递进的。先选策略类型(被动还是主动),再定报价策略,最后用库存管理兜底。缺了任何一层,你的做市策略都会出问题。
4.5 代码示例:一个简单的被动做市策略
下面这个代码是我早期项目里的一个简化版。它实现了最基本的被动做市逻辑——在买一卖一位置挂单,并动态调整价差。
class PassiveMarketMaker:
def __init__(self, base_spread=0.001, max_inventory=0.1):
self.base_spread = base_spread # 基础价差 0.1%
self.max_inventory = max_inventory # 最大库存比例 10%
self.current_inventory = 0.0
def calculate_prices(self, mid_price, volatility):
# 动态价差:波动率越大,价差越大
dynamic_spread = self.base_spread * (1 + volatility * 2)
bid_price = mid_price * (1 - dynamic_spread / 2)
ask_price = mid_price * (1 + dynamic_spread / 2)
return bid_price, ask_price
def adjust_for_inventory(self, bid_price, ask_price):
# 库存偏移调整
inventory_ratio = self.current_inventory / self.max_inventory
if inventory_ratio > 0.5:
# 库存偏多,降低卖价,提高买价
ask_price *= 0.999
bid_price *= 0.998
elif inventory_ratio < -0.5:
# 库存偏少,提高卖价,降低买价
ask_price *= 1.001
bid_price *= 1.002
return bid_price, ask_price
def place_orders(self, mid_price, volatility):
bid, ask = self.calculate_prices(mid_price, volatility)
bid, ask = self.adjust_for_inventory(bid, ask)
# 这里省略了实际下单的API调用
print(f"挂买单: {bid:.2f}, 挂卖单: {ask:.2f}")
return bid, ask
好了,这一章的内容就到这里。做市商策略框架的核心就是策略类型 + 报价策略 + 库存管理这三板斧。你先把这三块搞明白,后面的实战内容才能吃得透。