做市策略核心逻辑:买卖双边报价策略、库存风险管理、报价更新频率、盈亏平衡分析
各位同学,欢迎来到《高频做市算法开发实战》的第一章。
做市策略,说白了就是「低买高卖」的极致版本。但真上手做,你会发现事情没那么简单。我当年刚入行时,以为写个双边挂单的程序就能赚钱,结果第一个月亏得差点被老板请去喝茶。嗯,这里面的坑,咱们今天一个一个说清楚。
一、买卖双边报价策略:做市商的吃饭家伙
做市商的核心工作,就是同时报出买价和卖价。你想想看,如果比特币现价 30000 USDT,我报 29990 买入、30010 卖出,只要市场波动不大,两边都能成交,我就赚这 20 块的差价。
但问题来了——报多少价差合适?
我个人习惯用动态价差模型。简单说,就是根据市场波动率来调整。波动大的时候,价差拉大一点,给自己留安全垫;波动小的时候,价差收窄,争取多成交。
买价 = 中间价 - (价差 / 2) × 波动率调整因子
卖价 = 中间价 + (价差 / 2) × 波动率调整因子
我在项目中遇到过一种情况:某个山寨币流动性极差,按固定价差挂单,结果一整天都没成交。后来改成基于订单簿深度的动态价差,成交率直接翻了三倍。
二、库存风险管理:别让货砸手里
做市商最怕什么?不是亏钱,是库存失控。
你想想看,如果比特币一直涨,你手里全是空单,那不就爆仓了吗?反过来,一直跌你手里全是多单,一样完蛋。
库存风险管理的核心就一句话:让库存围绕目标值波动,别跑偏。
我常用的方法是「库存偏移定价法」。举个例子:
- 目标库存:100 个 ETH
- 当前库存:120 个 ETH(超了)
- 策略:主动压低卖价,抬高买价,让卖单更容易成交,买单更难成交
代码实现其实不复杂:
def adjust_price(base_price, inventory, target_inventory, max_inventory):
# 计算库存偏移量
offset = (inventory - target_inventory) / max_inventory
# 偏移量映射到价差调整 [-0.5, 0.5]
spread_adjust = offset * 0.5
bid_price = base_price * (1 - (0.001 + spread_adjust))
ask_price = base_price * (1 + (0.001 - spread_adjust))
return bid_price, ask_price
三、报价更新频率:快还是稳?
这个问题我纠结了很久。报得太快,容易被交易所当刷单;报得太慢,又抢不到好价格。
高频做市领域,更新频率通常分三个档次:
| 频率等级 | 更新间隔 | 适用场景 |
|---|---|---|
| 超高频 | 1-10 毫秒 | 主流币种,流动性极好 |
| 中频 | 10-100 毫秒 | 二线币种,有一定流动性 |
| 低频 | 100-1000 毫秒 | 小币种,流动性差 |
我个人习惯的做法是:事件驱动 + 定时刷新。什么意思呢?就是当市场有重大变化时(比如大单成交、价格跳变),立即更新报价;如果市场平静,就按固定间隔刷新。
这样做的好处很明显——既不会错过行情,又不会浪费系统资源。
四、盈亏平衡分析:你到底赚不赚钱?
做市策略的盈亏,不能只看单笔交易。你得算总账。
我一般用三个指标来衡量:
- 净价差收入:所有买卖价差的总和,减去手续费
- 库存损益:因为持有库存而产生的价格波动损益
- 总盈亏 = 净价差收入 + 库存损益
举个例子你就明白了:
假设我今天做了 1000 笔交易,每笔赚 0.1 USDT 价差,净价差收入就是 100 USDT。但因为我手里一直拿着 50 个 ETH,今天 ETH 跌了 2 USDT,库存亏损 100 USDT。一算总账,白忙活一场。
盈亏平衡价差 = 手续费率 × 2 + 库存风险成本
其中库存风险成本 = 预期波动率 × 库存量 / 成交量
我在项目中遇到过最惨的一次:某个币种手续费极低,我以为稳赚,结果忽略了库存风险。那天行情剧烈波动,库存亏损直接吃掉了一个月的利润。从那以后,我把库存风险成本纳入了报价模型,再也没犯过同样的错误。
知识体系总览
说了这么多,咱们用一张图把核心逻辑串起来:
这张图把今天讲的内容串起来了。双边报价是基础,库存风险是命门,更新频率是技巧,盈亏分析是检验标准。四个模块缺一不可。
好了,第一章的内容就到这里。记住,做市不是简单的挂单撤单,而是一个系统工程。下一章咱们会深入代码实现,把今天讲的逻辑变成真正能跑的程序。