第三章 做市策略核心原理:双边报价、价差收入、库存管理、风险敞口、盈亏平衡分析
做市策略,说白了就是「两边吃价差」的生意。我刚开始接触这个领域时,觉得不就是低价买、高价卖嘛,有什么难的?后来真金白银砸进去才发现,这里面的门道深着呢。
今天咱们就把做市策略的五个核心模块拆开揉碎了讲。你想想看,一个做市商每天面对的是什么?是不断跳动的盘口,是随时可能出现的巨量订单,还有那个永远在变化的库存风险。
3.1 双边报价:做市商的立身之本
双边报价,就是同时在买一和卖一挂单。我习惯把买价叫Bid,卖价叫Ask。这两个价格之间的差距,就是我们的利润来源。
举个例子,假设螺纹钢期货当前市价是4000元/吨。我可能会这样挂单:
Bid: 3998元 挂单量: 10手
Ask: 4002元 挂单量: 10手
这里价差是4个点。如果市场波动不大,两边都成交了,我就赚了4个点乘以每点乘数。听起来很美好对吧?
核心要点:双边报价不是简单挂两个单子就完事了。你需要考虑三个维度:
- 价差宽度:太宽了成交不了,太窄了利润薄
- 挂单深度:每边挂多少手?挂多了风险大,挂少了赚不到钱
- 更新频率:多久调整一次报价?高频做市可能每秒更新几十次
我在项目中遇到过最头疼的事,就是双边报价被「吃掉」一边。比如市场突然拉升,我的Ask单被扫光,但Bid单还挂着。这时候我就变成了单向持仓,风险敞口瞬间暴露。
3.2 价差收入:算清楚这笔账
价差收入,就是做市商的核心收入来源。但怎么算?很多人以为就是Ask减Bid那么简单。
实际上,真实收入要扣除手续费、滑点、还有未成交部分的成本。我给大家一个公式:
净价差收入 = (成交均价_卖 - 成交均价_买) × 成交量 - 手续费 - 滑点成本
举个例子,假设我一天做了1000手双边交易:
| 项目 | 数值 |
|---|---|
| 平均买入价 | 3998.5 |
| 平均卖出价 | 4001.5 |
| 每手价差 | 3个点 |
| 总成交量 | 1000手 |
| 手续费 | 5000元 |
| 滑点成本 | 2000元 |
| 净收入 | 3000 × 10 - 5000 - 2000 = 23000元 |
个人经验:我建议新手做市商把目标价差设在最小变动价位的2-3倍。比如螺纹钢最小变动是1元,那价差至少设2-3元。太窄了,一次滑点就能吃掉你一周的利润。
3.3 库存管理:做市商的生死线
库存管理,说白了就是控制你手里有多少货。做市商不是投机者,我们不想赌方向。理想状态是:收盘时库存为零。
但现实哪有那么完美?市场波动时,你的库存会不断变化。我常用的库存管理策略有三种:
- 对称报价调整:库存为正(手里有多单)时,把Bid价格压低,Ask价格也压低,鼓励卖出
- 库存上限控制:设定一个最大持仓量,到了就停止做市
- 对冲策略:用相关品种的期货或期权对冲库存风险
# 一个简单的库存调整逻辑
def adjust_quote(inventory, base_bid, base_ask):
# inventory: 当前库存,正数表示多单,负数表示空单
# 库存每增加10手,价差中心偏移1个tick
inventory_impact = inventory / 10 * tick_size
adjusted_bid = base_bid - inventory_impact
adjusted_ask = base_ask - inventory_impact
return adjusted_bid, adjusted_ask
避坑指南:我曾经吃过一次大亏。当时螺纹钢库存到了200手多单,我觉得行情还会涨就没及时调整。结果下午跳水,一天亏了30万。从那以后,我给自己定了个铁律:库存超过50手,必须强制减仓。
3.4 风险敞口:看不见的敌人
风险敞口,就是你的持仓暴露在市场波动中的那部分。做市商最怕的不是亏钱,而是不知道自己在亏钱。
我习惯把风险敞口分成三类:
- 方向性风险:单边持仓带来的涨跌风险
- 基差风险:不同合约之间的价差变化风险
- 流动性风险:想平仓时没人接盘的风险
怎么量化风险敞口?我常用VaR(在险价值)来衡量。比如95%置信度下,一天最大可能亏损是多少。
# 计算风险敞口
def calculate_var(positions, market_data, confidence=0.95):
# positions: 持仓列表 [(合约, 手数, 方向)]
# 假设波动率是20%
daily_volatility = 0.20 / sqrt(252)
total_exposure = sum(pos[1] * pos[2] for pos in positions)
var = total_exposure * daily_volatility * norm.ppf(confidence)
return var
我的做法:每天开盘前,我会检查三个数字:当前库存、净风险敞口、VaR值。任何一个超过阈值,当天就只做减仓不做加仓。
3.5 盈亏平衡分析:你到底赚不赚钱
盈亏平衡分析,就是算清楚你的策略在什么情况下能赚钱。很多人只看价差收入,忽略了成本。
做市商的成本包括:
- 手续费(交易所+期货公司)
- 滑点成本(尤其是大单)
- 资金成本(保证金占用)
- 系统成本(服务器、数据、开发)
- 库存风险成本(波动带来的潜在亏损)
我给大家一个简单的盈亏平衡公式:
盈亏平衡价差 = (总成本 + 预期库存亏损) / 预期成交量
举个例子:
| 成本项 | 每日金额 |
|---|---|
| 手续费 | 5000元 |
| 滑点成本 | 2000元 |
| 资金成本 | 1000元 |
| 系统成本 | 500元 |
| 库存风险预留 | 1500元 |
| 总成本 | 10000元 |
如果预期每天成交1000手,那每手至少要赚10元才能保本。换算成螺纹钢,就是10个点。
实战建议:我建议每周末做一次盈亏平衡分析。把实际成交价差和盈亏平衡价差对比。如果实际价差长期低于平衡点,说明你的策略需要调整了。要么降低成本,要么提高报价效率。
3.6 核心逻辑框架图
下面这张图,把做市策略的五个核心模块串起来了。我画这张图时,特意把库存管理放在中间——因为它确实是整个策略的枢纽。
嗯,这张图其实已经说得很清楚了。双边报价产生价差收入,价差收入反过来影响报价策略。库存管理居中调度,既要控制风险敞口,又要做盈亏平衡分析。任何一个环节出问题,整个策略都会崩。
我记得刚开始做做市策略时,只盯着价差收入看,觉得只要价差够大就能赚钱。结果库存越积越多,风险敞口越来越大,最后被一波行情打回原形。所以我现在做策略,第一件事就是设计好库存管理逻辑,然后才是优化报价。