做市商业务体系全景图:业务模块划分

大家好,我是你们的老朋友。今天咱们聊聊做市商业务体系的全景图。

说实话,我刚入行那会儿,对做市商的理解特别狭隘。我以为就是挂单、吃单、赚价差。后来真正上手搭建系统,才发现这玩意儿是个系统工程。你想想看,一个完整的做市业务体系,至少得包含五个核心模块:策略、风控、交易执行、清算、监控。每个模块都有自己的脾气,彼此之间还得配合默契。

嗯,咱们一个一个来看。

策略模块:做市的大脑

策略模块是整个体系的核心。说白了,它就是决定「什么时候报价、报什么价、报多少量」的决策中心。

我个人习惯把策略模块拆成三层:

  • 信号层:负责计算各种指标,比如订单簿不平衡度、波动率、库存偏离度。我在项目中遇到过一个问题——信号层计算太慢,导致报价跟不上市场变化。后来我们改用事件驱动架构,把计算延迟从毫秒级降到了微秒级。
  • 定价层:根据信号生成报价。这里有个经典公式——报价 = 参考价 + 库存调整 + 风险溢价。我曾经踩过一个坑:库存调整系数设得太激进,结果一次大行情直接把我打穿了。避坑指南:系数一定要做压力测试。
  • 参数层:管理策略参数,比如最大持仓、报价宽度、撤单频率。这些参数不能写死,得支持热加载。我建议用配置中心统一管理,方便动态调整。

核心要点:策略模块的输出是「报价指令」,包括价格、数量、方向、有效期。这些指令会传给交易执行模块。

风控模块:做市的刹车

风控模块,说白了就是防止你亏得裤衩都不剩。我见过太多做市商,策略赚钱的时候风控形同虚设,等爆仓了才后悔莫及。

风控模块的职责包括:

  • 事前风控:报价前检查。比如检查当前持仓是否超限、账户余额是否充足、市场是否处于异常状态。我曾经因为没检查市场状态,在交易所宕机恢复后直接报了一堆废单,被交易所罚了钱。
  • 事中风控:实时监控。比如监控成交速度、库存变化、盈亏波动。一旦触发阈值,立即熔断。我建议设置三级熔断:警告、降频、停机。
  • 事后风控:复盘分析。每天跑一遍风控报告,看看哪些单子有问题。我习惯用盈亏归因分析来定位问题——是策略问题还是执行问题?

注意:风控模块不能影响正常交易。我见过有些团队把风控做得太严,结果策略根本跑不起来。平衡点很重要。

交易执行模块:做市的手脚

交易执行模块负责把策略的报价指令变成真实的订单,并发送到交易所。这个模块对延迟极其敏感。

我把它分为三个子模块:

  1. 订单管理:管理订单生命周期——创建、提交、修改、撤销、成交。这里要注意订单状态的同步问题。我遇到过因为网络延迟导致订单状态不一致,结果重复撤单的惨案。
  2. 路由管理:如果对接多个交易所,需要智能路由。比如哪个交易所流动性好就优先发单,哪个交易所手续费低就优先发单。我建议用延迟加权算法来做路由决策。
  3. 网关适配:每个交易所的API都不一样,需要做适配层。我习惯用协议转换器模式,把交易所API统一成内部接口。

小技巧:交易执行模块一定要做幂等性处理。我曾经因为没做幂等,导致一笔订单被重复提交了三次,直接爆仓。嗯,血的教训。

清算模块:做市的账房

清算模块负责算账。包括交易对账、资金结算、费用计算、盈亏统计。

清算模块的难点在于:

  • 多源对账:本地记录 vs 交易所记录 vs 银行记录。我建议每天做一次三方对账,发现差异及时处理。
  • 费用计算:手续费、返佣、利息、税费。不同交易所的费率结构不一样,有的按成交额收,有的按笔数收。我习惯用规则引擎来管理这些复杂的计费逻辑。
  • 盈亏计算:已实现盈亏 vs 未实现盈亏。这里要注意估值方法的选择——是用最新价还是用中间价?我建议用加权平均价,更接近真实情况。

核心要点:清算模块的输出是「结算报告」,包括每日盈亏、持仓汇总、资金流水。这些数据会传给监控模块做可视化展示。

监控模块:做市的仪表盘

监控模块负责把整个系统的运行状态展示出来。说白了,就是让你一眼看出系统有没有问题。

监控模块包括:

  • 实时监控:延迟监控、成交率监控、库存监控、盈亏监控。我建议用Grafana + Prometheus搭建实时监控面板,延迟数据用热力图展示,一目了然。
  • 告警管理:设置告警规则,比如延迟超过100ms告警、库存偏离超过阈值告警。告警方式要多样化——邮件、短信、钉钉、电话。我曾经因为只设了邮件告警,结果周末出问题没人看邮件,亏了一晚上。
  • 日志管理:记录所有操作日志和系统日志。我建议用ELK(Elasticsearch + Logstash + Kibana)做日志分析,方便排查问题。

小技巧:监控模块要支持历史回放功能。我遇到过一个问题——某个策略在特定行情下表现异常,但当时没记录足够的数据,导致无法复现。后来我们加了全量数据录制功能,问题就好解决了。

各模块交互关系

这五个模块不是孤立的,它们之间有紧密的交互关系。我画了一张图,方便大家理解:

策略模块 报价指令 风控模块 风控检查 交易执行 订单发送 清算模块 对账结算 监控模块 可视化 交易所 撮合引擎 报价指令 通过 订单 成交数据 结算报告 反馈数据 熔断信号 图例说明: 策略模块 风控模块 交易执行 清算模块 监控模块 交易所 数据流 熔断信号 反馈数据

从图中可以看出:

  • 策略模块生成报价指令,传给风控模块检查
  • 风控模块检查通过后,传给交易执行模块发送到交易所
  • 交易所返回成交数据,传给清算模块做对账结算
  • 清算模块生成结算报告,传给监控模块做可视化展示
  • 监控模块把反馈数据传回策略模块,形成闭环
  • 风控模块可以随时发送熔断信号给交易执行模块,紧急停止交易

技术栈选型概览

技术栈选型是个大话题。我根据自己的经验,给出一套参考方案:

模块 推荐技术栈 说明
策略模块 Python + C++ Python做原型开发,C++做核心计算
风控模块 Go + Redis Go高并发,Redis做实时状态存储
交易执行 Java + Netty Java生态成熟,Netty做高性能网络
清算模块 Python + PostgreSQL Python做数据处理,PostgreSQL做持久化
监控模块 Grafana + Prometheus + ELK Grafana做可视化,Prometheus做指标采集,ELK做日志分析
消息队列 Kafka / RabbitMQ 模块间异步通信
配置中心 Consul / etcd 统一管理配置,支持热更新

小提示:技术栈选型没有银弹。我见过用纯Python跑做市系统的团队,也见过全栈C++的团队。关键是看你的业务场景和团队能力。我个人建议:核心链路用高性能语言,非核心链路用开发效率高的语言。

好了,这一章的内容就到这里。做市商业务体系的全景图,说白了就是五个模块各司其职、协同工作。下一章咱们会深入策略模块,聊聊具体的定价模型和参数优化。嗯,到时候见。

专注资料整理