4、风控规则分类:交易前、交易中、交易后

做市商的风控规则,说白了就是三道防线。

我习惯把它们按时间轴切分:交易前交易中交易后。这三类规则,各自盯着不同的风险点。你想想看,如果只做交易前检查,那滑点风险谁来管?如果只做交易后监控,那爆仓了才报警,黄花菜都凉了。

所以,一个成熟的风控系统,必须把这三类规则串起来。今天我就把每一类拆开,讲讲里面的门道。

4.1 交易前规则:把风险挡在门外

交易前规则,是风控的第一道闸门。订单还没进市场,就先过一遍筛子。我个人习惯把这类规则叫做「准入检查」——不合格的订单,直接拒掉,不给交易所添乱。

4.1.1 价格偏离检查

这个最简单,也最容易被忽略。我记得刚入行时,有个同事的脚本出了bug,往市场里丢了一笔价格偏离市场中间价30%的买单。结果呢?瞬间被高频玩家吃掉,亏了十几万美金。

从那以后,我设计的系统里,价格偏离检查永远是第一优先级。逻辑是这样的:

// 伪代码示例:价格偏离检查
function checkPriceDeviation(order, marketPrice, thresholdPercent) {
    const deviation = Math.abs(order.price - marketPrice) / marketPrice;
    if (deviation > thresholdPercent) {
        return { passed: false, reason: `价格偏离 ${(deviation * 100).toFixed(2)}%,超过阈值 ${thresholdPercent * 100}%` };
    }
    return { passed: true };
}

阈值怎么设?我建议分品种:

  • 主流币种(如BTC/ETH):0.5% - 1%
  • 流动性较差的币种:2% - 5%
  • 新上线/波动剧烈的币种:5% - 10%
注意: 价格偏离检查不能只看绝对数值。市场剧烈波动时,偏离阈值要动态调整。我曾经见过一个系统,在312暴跌时因为阈值太死板,把大量本该成交的订单全拒了,导致做市商完全没吃到反弹。

4.1.2 数量限制

数量限制,说白了就是「别一次下太多」。做市商的核心是提供流动性,不是赌方向。如果一笔订单的量太大,会把你的库存风险瞬间拉高。

我一般设两层限制:

  • 单笔最大数量:比如不超过该币种24小时交易量的0.1%
  • 单账户累计数量:比如某个账户在1分钟内累计下单量不超过某个值

这里有个坑:数量限制要和你的库存挂钩。如果你库存已经很大了,那单笔限制应该更严。我见过一个做市商,库存已经占了市场总量的5%,还在按正常阈值下单,结果被对手盯上,硬生生被逼仓了。

4.1.3 频率限制

频率限制,防的是「手滑」和「程序bug」。你想想看,如果某个策略模块出了死循环,一秒发一千笔订单,交易所不封你才怪。

我常用的频率限制策略:

维度 典型阈值 说明
每秒订单数 50笔/秒 超过直接熔断该策略
每分钟撤单率 80% 撤单率过高说明策略有问题
单品种并发订单 20笔 防止订单簿被刷屏
我的经验: 频率限制最好做成「软限制+硬限制」两层。软限制是报警,硬限制是直接熔断。我曾经遇到过一次,软限制报警了但运维没看到,结果硬限制触发,整个策略停了5分钟,错过了行情。后来我改成:软限制报警+自动降频,硬限制才熔断。

4.2 交易中规则:动态盯防

交易中规则,是风控的第二道防线。订单已经发出去了,但还没成交或正在成交中。这时候要盯什么?两个核心:滑点和保证金。

4.2.1 滑点控制

滑点,就是「你看到的价」和「你成交的价」之间的差距。做市商最怕什么?怕的是挂单被吃掉后,市场瞬间反向波动,导致你补仓时滑点巨大。

我一般用两种方式控制滑点:

  • 预期滑点检查:下单前,估算当前市场深度,如果预期滑点超过阈值(比如0.1%),就拒绝这笔订单
  • 实际滑点监控:成交后,实时计算实际滑点。如果连续多笔滑点超标,自动降低下单频率或缩小报价价差

嗯,这里要注意:滑点控制和价格偏离检查是两回事。价格偏离检查看的是订单价格本身,滑点控制看的是成交过程中的市场冲击。我见过有人把这两个混为一谈,结果滑点控制形同虚设。

4.2.2 保证金检查

保证金检查,说白了就是「看看你还有多少钱」。做市商通常用杠杆,如果保证金不够,交易所会强平。那画面太美我不敢看。

我建议做两件事:

  1. 实时计算当前占用保证金:包括所有未成交订单的冻结保证金
  2. 设置预警线和平仓线:比如保证金率低于150%时报警,低于120%时自动减仓
核心逻辑: 保证金检查不能只看账户总余额。要看「可用保证金」——也就是扣除所有冻结后的余额。我见过一个系统,只看总余额,结果用户以为还有钱,继续下单,最后爆仓了才发现可用保证金早就是负数了。

4.3 交易后规则:事后复盘与止损

交易后规则,是风控的最后一道防线。订单已经成交了,风险已经发生了。这时候要做的,是控制损失、防止风险扩大。

4.3.1 持仓限额

持仓限额,就是「别在一个品种上押太多」。做市商的核心是赚价差,不是赌方向。如果某个品种的持仓量过大,一旦市场反向,亏损会非常恐怖。

我一般设三个维度的限额:

  • 单品种净持仓:比如不超过该品种24小时交易量的2%
  • 总净持仓:所有品种加起来,不超过总资产的某个比例(比如30%)
  • 方向敞口:多头和空头的差值,不能超过某个绝对值

这里有个实战技巧:持仓限额要和波动率挂钩。波动率大的品种,限额要更小。我做过一个回测,如果把BTC的持仓限额设成和稳定币一样,那风险敞口会大得吓人。

4.3.2 盈亏监控

盈亏监控,是风控的「最后一道光」。如果前面所有规则都失效了,至少盈亏监控能告诉你:兄弟,你亏钱了,赶紧跑。

我常用的监控指标:

指标 计算方式 报警阈值
累计盈亏 所有已实现盈亏之和 当日亏损超过总资产的2%
浮动盈亏 当前持仓的未实现盈亏 浮动亏损超过总资产的5%
最大回撤 从峰值到当前值的跌幅 超过10%时强制减仓
避坑指南: 我曾经犯过一个错误——只看累计盈亏,不看浮动盈亏。结果呢?累计盈亏是正的,但浮动亏损已经快爆仓了。后来我改成:浮动盈亏和累计盈亏都要监控,而且浮动盈亏的报警阈值要比累计盈亏更敏感。因为浮动盈亏是「还没发生的损失」,但往往比已实现的亏损更致命。

4.4 三类规则的联动逻辑

这三类规则不是孤立的。它们必须联动起来,才能形成完整的风控闭环。

我画了一张图,展示它们之间的关系:

风控规则联动逻辑图 交易前规则 价格偏离检查 数量限制 频率限制 通过 交易中规则 滑点控制 保证金检查 通过 交易后规则 持仓限额 盈亏监控 反馈回路:交易后数据调整交易前阈值 拒绝/熔断:任意规则触发,订单被拒或策略暂停

从图里你能看到:

  • 订单先过交易前规则,不合格直接拒
  • 通过后进入交易中规则,动态监控滑点和保证金
  • 成交后进入交易后规则,检查持仓和盈亏
  • 交易后的数据会反馈给交易前规则,动态调整阈值
  • 任意环节触发规则,都会导致订单被拒或策略熔断

这个联动逻辑,我花了两年才打磨成熟。一开始我只做了交易前规则,结果交易中出了问题;后来加了交易中规则,又发现交易后没人管。直到把这三类规则串成闭环,风控才算真正「硬」起来。

一个小建议: 刚开始做风控系统时,别追求大而全。先把交易前规则做扎实,再逐步加交易中和交易后。我见过太多团队,一上来就想搞「全链路风控」,结果每个环节都做得不深,漏洞百出。风控这东西,宁可慢,不能错。

专注资料整理