做市商风控体系:最大持仓限制、止损与熔断机制、波动率自适应调整、多交易所对冲策略

做市商这行,说白了就是在刀尖上跳舞。你赚的是流动性溢价,但一个不小心,黑天鹅就能把你账户清零。我见过太多团队,策略回测漂亮得不行,一上实盘就爆仓——为什么?风控没跟上。

今天咱们就聊聊做市商的风控体系。这不是什么花哨的东西,而是保命的底线。我个人习惯把风控分成四个维度:持仓限制、止损熔断、波动率自适应、多交易所对冲。一个一个来。

一、最大持仓限制:别把鸡蛋放在一个篮子里

最大持仓限制,听起来简单吧?就是规定每个币种最多能持有多少。但实际执行起来,坑特别多。

我记得有一次,团队在ETH上开了个大仓位,想着流动性好没事。结果某交易所突然宕机,ETH价格瞬间暴跌3%。我们想平仓,但交易所API连不上。那几分钟,账户浮亏直接吃掉了一个月的利润。

所以,我建议的持仓限制要分三层:

  • 单币种绝对上限:比如ETH最多持有500个,或者总价值不超过100万U。这是硬性红线,谁都不能超。
  • 单交易所上限:同一个币种,在不同交易所的持仓总和不能超过某个值。防止交易所单点故障。
  • 动态调整:根据市场波动率,自动降低持仓上限。波动大的时候,仓位要缩。

代码实现上,我一般会在风控模块里写个定时器,每秒检查一次当前持仓。一旦超限,立刻触发减仓指令。

// 伪代码示例:持仓检查逻辑
function checkPositionLimit(symbol, currentQty, maxQty) {
    if (currentQty > maxQty) {
        // 触发减仓
        reducePosition(symbol, currentQty - maxQty);
        logWarning("持仓超限,已自动减仓");
    }
}
注意:持仓限制不能只检查一次。行情剧烈波动时,几秒钟就能从安全变成爆仓。建议每100ms检查一次。

二、止损与熔断机制:该认输时就认输

止损,每个做市商都会设。但怎么设、设多少,差别很大。

我曾经见过一个团队,止损设得太紧,结果被市场来回扫,手续费亏了一大堆。止损设得太松呢?又起不到保护作用。这里有个经验值:止损幅度 = 日均波动率的2倍。比如ETH日均波动2%,那止损设在4%左右比较合理。

熔断机制呢?说白了就是「暂停交易」。当市场出现极端行情时,比如5分钟内价格波动超过10%,系统自动停止所有做市策略,只保留撤单功能。

为什么要熔断?因为极端行情下,做市商的报价模型会失效。你报的买价,可能瞬间变成卖价。我有个朋友,在312暴跌那天没设熔断,结果系统还在不断吃单,几分钟亏了200万U。

我的习惯:熔断触发后,不要立刻恢复。等市场稳定了,比如价格在某个区间震荡超过10分钟,再手动重启策略。自动恢复风险太大。

三、波动率自适应调整:让策略跟着市场走

做市商的核心是报价。但报价的价差(spread)不能一成不变。市场波动小的时候,价差可以收窄,赚点薄利。波动大的时候,价差必须拉宽,不然你就是在给市场送钱。

我常用的方法是:根据最近N分钟的波动率,动态调整报价价差

具体来说:

  • 计算过去5分钟的收益率标准差,作为当前波动率
  • 设定一个基准波动率,比如0.5%
  • 如果当前波动率是基准的2倍,价差就扩大2倍
  • 如果当前波动率是基准的0.5倍,价差就缩小一半

嗯,这里要注意:波动率计算窗口不能太短,否则会被噪音干扰。我一般用5分钟窗口,配合指数加权移动平均(EWMA),让波动率变化更平滑。

// 波动率自适应价差计算
function calculateSpread(price, volatility, baseVolatility, baseSpread) {
    let ratio = volatility / baseVolatility;
    // 限制ratio范围,防止价差过大或过小
    ratio = Math.max(0.5, Math.min(5, ratio));
    return baseSpread * ratio;
}
核心思想:波动率是市场的「脾气」。脾气好的时候,你多赚点;脾气差的时候,你躲远点。别跟市场对着干。

四、多交易所对冲策略:别把命拴在一棵树上

做市商通常会在多个交易所同时挂单。但不同交易所之间,价格会有差异。这个差异,就是套利空间,也是风险来源。

我建议的做法是:在A交易所做市,同时在B交易所对冲。比如你在币安做ETH的市,那就在OKX或者Bybit上开一个反向仓位。这样,无论ETH涨跌,你的净敞口都接近零。

但这里有个坑:对冲延迟。你在币安吃了一个大单,需要立刻在另一个交易所开对冲。如果延迟超过1秒,价格可能已经变了,对冲就变成了投机。

我曾经踩过这个坑。有一次,币安上突然出现一个大买单,我的系统花了2秒才在OKX上开好对冲。结果这2秒里,ETH涨了0.5%,对冲成本直接增加了不少。

解决方案呢?我后来改成了预对冲:在挂单的同时,就预先在另一个交易所挂好对冲单。虽然会占用一些保证金,但安全性高了很多。

下面这张图,是我个人常用的多交易所对冲流程:

多交易所对冲流程 主交易所(币安) 做市挂单 + 吃单 信号 风控中心 计算对冲量 + 检查限制 指令 对冲交易所 开反向仓位 延迟监控(<1秒) 超时则熔断 预对冲策略(推荐) • 在主交易所挂单的同时,预先在对冲交易所挂好反向单 • 主交易所成交后,立即激活对冲单,延迟可控制在50ms以内 • 缺点:占用双倍保证金,但安全性大幅提升

五、总结一下

做市商的风控,不是一套代码就能搞定的。它需要你理解市场、理解交易所、理解自己的策略极限。

我个人习惯,每天开盘前先检查一遍风控参数:持仓限制有没有被改过?止损阈值是不是合理?波动率自适应有没有开启?多交易所对冲的延迟是否正常?

这些检查,花不了5分钟。但关键时刻,能救你一命。

记住一句话:做市商赚的是概率的钱,不是赌命的钱。风控做不好,你赚的每一分钱,最后都会还给市场。

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