3、做市策略设计基础:库存管理、价差设定、报价更新频率、风险敞口控制

做市策略听起来高大上,说白了就是「低买高卖,赚差价」。但真上手做,你会发现事情没那么简单。我刚开始做回测时,以为只要把买卖价差设好就能赚钱,结果回测曲线惨不忍睹。后来才明白,做市策略的核心其实是四个字:风险控制

今天我们就来拆解做市策略的四个基础模块。嗯,这四块东西,任何一个没处理好,你的策略都可能翻车。

核心观点:做市不是预测价格涨跌,而是管理库存和价差,在提供流动性的同时控制风险。

做市策略设计 库存管理 价差设定 报价更新频率 风险敞口控制 四个模块相互影响,缺一不可

3.1 库存管理:做市商的命门

库存管理,说白了就是你手里拿着多少货。做市商最怕什么?怕库存积压。你想想看,如果市场突然暴跌,你手里全是多单,那画面太美我不敢看。

我个人习惯把库存管理分成两个维度:库存水平库存成本

库存水平控制

做市策略必须设定一个目标库存区间。比如,你的策略只允许持有 -100 到 +100 单位的库存。超过这个范围,就要主动调整报价,把库存拉回来。

我的经验:我在做ETH做市时,曾经把库存上限设得太宽,结果一次黑天鹅事件直接亏了5%。后来我学乖了,库存上限不超过日均成交量的1%。

库存成本管理

库存成本就是你建仓的平均价格。如果库存成本偏离当前市价太多,说明你手里拿着「烫手山芋」。这时候需要加快出清速度。

# 库存成本计算示例
def calculate_inventory_cost(positions):
    total_cost = sum(p['price'] * p['quantity'] for p in positions)
    total_qty = sum(p['quantity'] for p in positions)
    if total_qty == 0:
        return 0
    return total_cost / total_qty

# 判断库存是否健康
def is_inventory_healthy(current_price, avg_cost, threshold=0.02):
    pnl_pct = (current_price - avg_cost) / avg_cost
    return abs(pnl_pct) < threshold  # 浮动盈亏不超过2%

3.2 价差设定:赚多赚少的关键

价差就是你的卖价减买价。价差设大了,单笔赚得多但成交少;设小了,成交多但赚得少。这里有个平衡点。

我建议用动态价差,而不是固定价差。为什么?因为市场波动率在变。波动大的时候,风险高,价差应该拉大;波动小的时候,价差可以收窄。

市场状态 波动率 建议价差 逻辑
平静 0.05% - 0.1% 薄利多销,赚频繁成交
正常 0.1% - 0.3% 平衡风险和收益
剧烈波动 0.3% - 0.8% 保护自己,避免被扫

避坑指南:我曾经在回测中用了固定价差,结果实盘时市场波动一上来,我的单子全被高频交易者吃掉,亏得我头皮发麻。动态价差不是可选项,是必选项。

3.3 报价更新频率:快还是稳?

报价更新频率,就是你多久重新计算一次买卖价格。这个参数很微妙。

频率太高(比如每毫秒更新),你的系统会变成「抖M」,被市场噪音牵着鼻子走。频率太低(比如每10秒更新),你又跟不上市场节奏,容易被套利者盯上。

我个人建议:根据市场流动性来定

  • 高流动性品种(如BTC/USDT):更新频率可以快,100ms - 500ms 一次
  • 低流动性品种(如一些小币种):更新频率慢一些,1s - 5s 一次

你想想看,如果某个币一天才成交100笔,你每秒更新报价有意义吗?没有。反而会增加你的计算成本和滑点。

核心原则:报价更新频率应该与市场微观结构匹配。太快是浪费,太慢是送钱。

3.4 风险敞口控制:最后的防线

风险敞口,就是你暴露在市场中的头寸大小。做市商不是赌徒,不能把全部资金押在一个方向上。

我常用的风险控制手段有三个:

  1. 最大持仓限制:单边持仓不超过总资金的20%
  2. 止损出清:当浮动亏损达到阈值时,强制平掉部分库存
  3. 对冲机制:在相关品种上做反向头寸
# 风险敞口检查函数
def check_risk_exposure(position, total_capital, max_ratio=0.2):
    exposure = abs(position) / total_capital
    if exposure > max_ratio:
        # 需要减仓
        reduce_qty = position - (total_capital * max_ratio * (1 if position > 0 else -1))
        return {'action': 'reduce', 'quantity': reduce_qty}
    return {'action': 'hold', 'quantity': 0}

我的教训:有一次我忘了设止损出清,结果库存越积越多,最后市场反向波动,一天亏掉了两周的利润。从那以后,我把止损出清写进了策略的硬编码里,不允许手动关闭。

3.5 四个模块的联动关系

这四个模块不是孤立的。库存管理会影响价差设定——库存偏多时,你应该收窄卖价、拉宽买价,加速出清。报价更新频率会影响风险敞口——更新太慢,风险敞口会失控。

我习惯在回测中把这四个参数做成可调的超参数,然后用网格搜索找到最优组合。嗯,这一步很费时间,但值得做。

总结一句话:做市策略设计,本质上是在「赚差价」和「控风险」之间找平衡。库存管住了,价差设对了,频率调好了,风险控死了,你的策略就稳了。


公众号:蓝海资料掘金营,微信deep3321