一、做市商风险限额概述
什么是做市商风险
做市商风险,说白了就是你在双边报价时可能亏钱的各种情况。我做了这么多年风控,见过太多人把做市想得太简单——以为就是低买高卖赚差价。其实没那么轻松。
做市商的核心业务是同时报出买价和卖价,赚取价差。但在这个过程中,你会暴露在多种风险之下。我习惯把它们分成四类:
- 库存风险——你手里囤了一堆资产,价格一跌就亏钱。我记得2018年那波行情,有个做市团队库存里全是某山寨币,一夜之间跌了60%,直接爆仓。
- 方向性风险——你报的买卖价不对称,导致净头寸暴露在市场方向上。说白了就是你在赌方向,而不是在做市。
- 流动性风险——市场突然没对手盘了,你报的价没人接,或者你想平仓平不掉。嗯,这个在极端行情下特别常见。
- 操作风险——系统bug、网络延迟、人为误操作。我曾经见过一个交易员把买单数量多敲了一个零,直接导致系统超卖。
核心观点:做市商不是投机者。你的利润来源是价差和手续费返还,而不是赌方向。一旦开始赌方向,你就已经偏离了做市商的本质。
风险限额的定义与重要性
风险限额是什么?就是给你画一条红线,告诉你「过了这条线就别玩了」。我习惯把它理解成做市商的「安全带」。
你想想看,做市商每天要处理成千上万笔交易,如果每笔交易都没有上限,那一个黑天鹅事件就能让你归零。风险限额的作用就是:
- 防止单笔风险过大——比如单笔最大持仓不能超过总资金的5%。
- 控制整体风险敞口——所有持仓加起来不能超过某个阈值。
- 限制杠杆倍数——别想着用10倍杠杆做市,那是在玩火。
- 设定止损线——亏到一定程度必须砍仓,别幻想能扛回来。
我的经验:刚开始做风控时,我总觉得限额设得太保守会影响收益。后来有一次,一个同事没设止损线,结果一天亏掉了三个月的利润。从那以后,我再也不敢轻视限额了。
为什么风险限额这么重要?说白了,做市商的核心竞争力不是赚多少钱,而是能活多久。市场里每天都有新人进来,但能活过三年的团队少之又少。风险限额就是你活下去的保障。
风险限额体系的整体架构
一个完整的风险限额体系,我习惯把它分成三个层次。你可以把它想象成一个金字塔:
这个架构图我画了很多遍,每次给新团队培训时都会拿出来讲。它的核心逻辑是:从下到上,限额越来越宏观,调整频率越来越低。
第一层:交易层面
这是最基础的一层,直接跟每笔交易挂钩。我习惯设这么几个限额:
- 单笔最大数量——比如一次最多买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, "正常"
这段代码看起来简单,但实际生产环境里要复杂得多。比如要考虑多个交易对同时检查、要考虑异步并发、要考虑性能延迟。我当年第一次上线时,就因为没处理好并发,导致限额检查成了系统的瓶颈。
总结一下:风险限额体系不是一堆死板的数字,而是一套动态的、分层的、可执行的管理机制。它保护的不是你的利润,而是你的生存能力。做市商这个行业,活得久比赚得多更重要。