21、做市商系统架构:交易系统、风控系统、清算系统、数据系统

做市商的系统架构,说白了就是四根柱子:交易、风控、清算、数据。这四块缺一不可,少一个,你的利润就可能变成别人的利润。

我刚开始搭建系统时,总觉得交易系统最重要,其他都是辅助。后来吃过亏才明白——风控才是命根子,数据才是金矿。嗯,咱们一个一个说。

交易系统:你的“手”和“脚”

交易系统是直接跟市场打交道的部分。它负责接收报价、发送订单、管理仓位。我个人习惯把交易系统拆成三层:

  • 接入层:连接交易所的API,处理行情和订单流。这里要注意延迟,毫秒级差异就能决定盈亏。
  • 策略层:运行你的定价模型、对冲逻辑、订单管理。我建议把策略和接入解耦,方便单独升级。
  • 执行层:负责拆单、路由、成交确认。我曾经遇到过因为拆单算法太激进,导致市场冲击过大的情况,后来改成了时间加权平均算法才稳住。

关键指标:交易系统的吞吐量(每秒能处理多少订单)、延迟(从收到行情到发出订单的时间)、可用性(99.99%以上是基本要求)。

风控系统:你的“刹车”和“安全带”

风控系统不是用来限制你的,是用来保护你的。我见过太多做市商因为风控不到位,一夜回到解放前。

风控系统通常包含:

  • 事前风控:订单检查(价格是否合理、数量是否超限)、仓位检查(是否超过预设敞口)、资金检查(保证金是否充足)。
  • 事中风控:实时监控市场波动、持仓变化、对手方风险。一旦触发阈值,自动执行止损或对冲。
  • 事后风控:交易复盘、压力测试、归因分析。我每个月都会跑一次极端行情模拟,看看系统能不能扛住。

避坑指南:我曾经因为风控系统的阈值设置太宽松,导致一次黑天鹅事件中亏损了半个月的利润。后来我把所有阈值都改成了动态调整,根据市场波动率自动缩放。

清算系统:你的“账房先生”

清算系统负责交易确认、资金结算、费用计算、盈亏统计。很多人忽视这块,觉得它只是记账。其实不然——清算系统是利润的最终确认者。

清算系统要处理:

  • 交易匹配:确保你的成交记录和交易所的记录一致。不一致的情况我遇到过几次,都是因为时间戳精度问题。
  • 资金管理:计算保证金、盈亏、手续费、利息。这里要注意不同产品的计费规则差异很大。
  • 对账:每天收盘后,和交易所、托管行、对手方对账。我建议自动化对账,人工对账太容易出错。
清算任务 频率 注意事项
交易匹配 实时 注意时间戳对齐
资金计算 每日 区分已实现和未实现盈亏
对账 每日 自动化优先,人工复核

数据系统:你的“大脑”和“记忆”

数据系统是其他三个系统的基础。没有数据,交易系统就是瞎子,风控系统就是聋子,清算系统就是傻子。

数据系统包含:

  • 行情数据:实时行情、历史行情、深度数据。我建议同时存储原始数据和加工后的数据,方便回溯。
  • 交易数据:订单、成交、仓位、资金流水。这些数据要保留至少5年,监管要求。
  • 分析数据:策略回测结果、风险指标、绩效报告。我习惯用Parquet格式存储,查询速度快很多。

个人经验:数据系统的设计要遵循“写一次,读多次”的原则。写入时做校验,读取时做缓存。我曾经因为数据写入没做校验,导致回测结果全是错的,白白浪费了两周时间。

系统架构图

下面这张图展示了四个系统之间的关系。交易系统在最前面,风控系统贯穿始终,清算系统在后台运行,数据系统为所有系统提供支撑。

做市商系统架构 交易系统 接入层 · 策略层 · 执行层 订单管理 · 报价生成 · 对冲执行 风控系统 事前 · 事中 · 事后 阈值监控 · 自动止损 · 压力测试 清算系统 交易匹配 · 资金管理 · 对账 盈亏计算 · 费用结算 · 监管报告 数据系统 行情 · 交易 · 分析 实时存储 · 历史回溯 · 绩效报告 数据流 结算数据 风控反馈 四个系统通过消息队列和数据库实现数据同步 建议使用Kafka + Redis + PostgreSQL组合

系统间的协作

这四个系统不是孤立的,它们之间需要紧密协作。我举个例子:

  1. 交易系统收到行情,生成报价并发送到交易所。
  2. 风控系统实时监控报价是否在安全范围内,如果超出阈值,立即拦截。
  3. 成交后,清算系统记录交易,计算盈亏和费用。
  4. 数据系统存储所有数据,供后续分析和回测使用。

这里有个关键点:数据一致性。我曾经因为交易系统和清算系统的时间戳不一致,导致对账时差了十几万。后来统一用NTP服务器同步时间,再也没出过问题。

核心原则:交易系统要快,风控系统要稳,清算系统要准,数据系统要全。四者缺一不可,但优先级不同——风控永远第一。

技术选型建议

根据我的经验,不同系统适合不同的技术栈:

系统 推荐技术 原因
交易系统 C++ / Java + 低延迟网络 需要极致性能
风控系统 Python + 规则引擎 灵活配置,快速迭代
清算系统 Java / Go + 关系型数据库 事务一致性要求高
数据系统 Kafka + ClickHouse + S3 高吞吐,低成本存储

当然,这只是参考。具体选型要看你的交易品种、规模、团队技术栈。我见过用Python做交易系统的,也能跑得不错,关键是找到适合你的方案。

最后说一句:系统架构不是一次成型的。我建议先跑通最小可行版本,再逐步优化。别一开始就想搞个大而全的系统,容易把自己搞死。


无相订单流研究社 微信Lucian808555