报价生成策略:固定价差策略、动态价差策略、基于波动率的报价、库存管理策略
做市商的核心工作是什么?说白了就两件事:怎么报价和怎么控风险。
报价策略决定了你赚不赚钱,库存管理决定了你活不活得久。这一章,我把这两块揉在一起讲。我个人习惯把报价策略分成四个层次:固定价差、动态价差、波动率报价、库存管理。它们不是互斥的,而是层层叠加的关系。
一、固定价差策略
这是最基础的策略,也是很多新手做市商的第一站。
逻辑很简单:买一价 = 中间价 - 价差/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)
我在项目中遇到过一个问题:固定价差在震荡行情里还好,一旦出现单边行情,你的单子会被瞬间吃掉。为什么?因为市场在动,你的报价没动。价差太窄,你成了别人的提款机。
二、动态价差策略
固定价差太死板,那怎么办?让价差跟着市场走。
动态价差的核心思想是:市场波动越大,价差越宽;市场越平静,价差越窄。这样既能保护自己,又能提高竞争力。
我常用的动态价差公式:
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 值不能设太大,否则你的报价会失去竞争力,单子挂不出去。
三、基于波动率的报价
动态价差只是第一步。真正进阶的做法是:把波动率直接融入报价模型。
什么意思?就是你的报价不仅要考虑价差,还要考虑报价深度和更新频率。
我见过很多团队,波动率一高就疯狂撤单重挂,结果被交易所的费率吃光利润。正确的做法是:
- 波动率低时:报价窄,深度浅,更新频率低。因为市场稳定,不需要频繁调整。
- 波动率高时:报价宽,深度深,更新频率高。因为市场剧烈,你需要快速反应。
这里有一个我常用的波动率分层策略:
| 波动率区间 | 价差倍数 | 报价深度 | 更新间隔(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%,我的策略没反应过来,还在用窄价差挂单。结果被一连串的大单打穿,库存瞬间变成负数。从那以后,我强制要求所有策略必须做波动率监控,一旦超过阈值,自动切换报价模式。
四、库存管理策略
报价策略赚的是价差,库存管理保的是命。
库存管理的目标很简单:让库存保持在一个安全范围内。既不能太多(暴露方向性风险),也不能太少(错失交易机会)。
我常用的库存管理方法有三种:
- 库存偏移法:根据当前库存偏离目标库存的程度,调整报价。比如你库存太多,就降低买价、提高卖价,鼓励卖出。
- 库存惩罚项:在报价公式里加入库存惩罚因子。库存偏离越大,报价越激进。
- 库存对冲:用期货或期权对冲现货库存风险。适合大资金做市商。
库存偏移法的伪代码:
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