一、做市商风险限额概述

什么是做市商风险

做市商风险,说白了就是你在双边报价时可能亏钱的各种情况。我做了这么多年风控,见过太多人把做市想得太简单——以为就是低买高卖赚差价。其实没那么轻松。

做市商的核心业务是同时报出买价和卖价,赚取价差。但在这个过程中,你会暴露在多种风险之下。我习惯把它们分成四类:

  • 库存风险——你手里囤了一堆资产,价格一跌就亏钱。我记得2018年那波行情,有个做市团队库存里全是某山寨币,一夜之间跌了60%,直接爆仓。
  • 方向性风险——你报的买卖价不对称,导致净头寸暴露在市场方向上。说白了就是你在赌方向,而不是在做市。
  • 流动性风险——市场突然没对手盘了,你报的价没人接,或者你想平仓平不掉。嗯,这个在极端行情下特别常见。
  • 操作风险——系统bug、网络延迟、人为误操作。我曾经见过一个交易员把买单数量多敲了一个零,直接导致系统超卖。

核心观点:做市商不是投机者。你的利润来源是价差和手续费返还,而不是赌方向。一旦开始赌方向,你就已经偏离了做市商的本质。

风险限额的定义与重要性

风险限额是什么?就是给你画一条红线,告诉你「过了这条线就别玩了」。我习惯把它理解成做市商的「安全带」。

你想想看,做市商每天要处理成千上万笔交易,如果每笔交易都没有上限,那一个黑天鹅事件就能让你归零。风险限额的作用就是:

  1. 防止单笔风险过大——比如单笔最大持仓不能超过总资金的5%。
  2. 控制整体风险敞口——所有持仓加起来不能超过某个阈值。
  3. 限制杠杆倍数——别想着用10倍杠杆做市,那是在玩火。
  4. 设定止损线——亏到一定程度必须砍仓,别幻想能扛回来。

我的经验:刚开始做风控时,我总觉得限额设得太保守会影响收益。后来有一次,一个同事没设止损线,结果一天亏掉了三个月的利润。从那以后,我再也不敢轻视限额了。

为什么风险限额这么重要?说白了,做市商的核心竞争力不是赚多少钱,而是能活多久。市场里每天都有新人进来,但能活过三年的团队少之又少。风险限额就是你活下去的保障。

风险限额体系的整体架构

一个完整的风险限额体系,我习惯把它分成三个层次。你可以把它想象成一个金字塔:

做市商风险限额体系架构 交易层面 单笔限额 · 持仓限额 · 止损限额 策略层面 敞口限额 · 杠杆限额 · 回撤限额 公司层面 资本限额 · 风险预算 越往下 越具体 越频繁 越往上 越宏观 越稳定

这个架构图我画了很多遍,每次给新团队培训时都会拿出来讲。它的核心逻辑是:从下到上,限额越来越宏观,调整频率越来越低

第一层:交易层面

这是最基础的一层,直接跟每笔交易挂钩。我习惯设这么几个限额:

  • 单笔最大数量——比如一次最多买100个BTC
  • 单笔最大金额——比如一次最多花10万USDT
  • 单品种最大持仓——比如某个币最多持有500个
  • 单笔止损——比如亏到2%必须平仓

注意:交易层面的限额要「硬编码」到系统里,不能让人工干预。我曾经见过一个团队,交易员发现限额快到了,就手动修改参数继续交易,结果...嗯,你懂的。

第二层:策略层面

这一层管的是整个做市策略的风险。举个例子:

限额类型 说明 典型值
净敞口限额 所有持仓的净方向暴露 总资金的20%
总敞口限额 所有持仓的绝对值之和 总资金的200%
杠杆倍数 总敞口 / 净资产 不超过3倍
最大回撤 策略净值从高点回撤的幅度 日回撤不超过5%

这里有个坑我要提醒你:净敞口和总敞口是两码事。净敞口看的是方向风险,总敞口看的是整体风险。比如你同时做多BTC和做空ETH,净敞口可能很小,但总敞口很大。如果市场整体暴跌,两边都亏。

第三层:公司层面

这一层是老板和风控委员会定的,通常不会频繁调整。主要包括:

  • 资本限额——整个做市业务最多能用多少资金
  • 风险预算——每天最多能亏多少钱
  • 压力测试限额——极端行情下能承受的最大损失

我的建议:公司层面的限额最好用「压力测试」来定。比如模拟一下2018年那种暴跌,看看你的策略能扛住吗?如果扛不住,就调低限额。别等到真出事才后悔。

限额体系的落地方式

光有理论不行,还得落地。我习惯用代码来实现限额检查。给你看个简单的例子:

class RiskLimitChecker:
    def __init__(self, config):
        self.max_single_qty = config['max_single_qty']  # 单笔最大数量
        self.max_position = config['max_position']      # 单品种最大持仓
        self.max_net_exposure = config['max_net_exposure']  # 净敞口限额
        self.stop_loss_pct = config['stop_loss_pct']    # 止损比例
    
    def check_order(self, order, current_position):
        """检查一笔订单是否合规"""
        # 检查单笔数量
        if order.qty > self.max_single_qty:
            return False, "超过单笔最大数量"
        
        # 检查持仓上限
        new_position = current_position + order.qty
        if abs(new_position) > self.max_position:
            return False, "超过持仓上限"
        
        # 检查净敞口
        new_exposure = self.calc_net_exposure(order)
        if abs(new_exposure) > self.max_net_exposure:
            return False, "超过净敞口限额"
        
        return True, "通过"
    
    def check_pnl(self, current_pnl, peak_pnl):
        """检查盈亏是否触发止损"""
        drawdown = (peak_pnl - current_pnl) / peak_pnl
        if drawdown > self.stop_loss_pct:
            return False, f"触发止损,回撤{drawdown:.2%}"
        return True, "正常"

这段代码看起来简单,但实际生产环境里要复杂得多。比如要考虑多个交易对同时检查、要考虑异步并发、要考虑性能延迟。我当年第一次上线时,就因为没处理好并发,导致限额检查成了系统的瓶颈。

总结一下:风险限额体系不是一堆死板的数字,而是一套动态的、分层的、可执行的管理机制。它保护的不是你的利润,而是你的生存能力。做市商这个行业,活得久比赚得多更重要。

专注资料整理