21、做市商系统架构:交易系统、风控系统、清算系统、数据系统
做市商的系统架构,说白了就是四根柱子:交易、风控、清算、数据。这四块缺一不可,少一个,你的利润就可能变成别人的利润。
我刚开始搭建系统时,总觉得交易系统最重要,其他都是辅助。后来吃过亏才明白——风控才是命根子,数据才是金矿。嗯,咱们一个一个说。
交易系统:你的“手”和“脚”
交易系统是直接跟市场打交道的部分。它负责接收报价、发送订单、管理仓位。我个人习惯把交易系统拆成三层:
- 接入层:连接交易所的API,处理行情和订单流。这里要注意延迟,毫秒级差异就能决定盈亏。
- 策略层:运行你的定价模型、对冲逻辑、订单管理。我建议把策略和接入解耦,方便单独升级。
- 执行层:负责拆单、路由、成交确认。我曾经遇到过因为拆单算法太激进,导致市场冲击过大的情况,后来改成了时间加权平均算法才稳住。
关键指标:交易系统的吞吐量(每秒能处理多少订单)、延迟(从收到行情到发出订单的时间)、可用性(99.99%以上是基本要求)。
风控系统:你的“刹车”和“安全带”
风控系统不是用来限制你的,是用来保护你的。我见过太多做市商因为风控不到位,一夜回到解放前。
风控系统通常包含:
- 事前风控:订单检查(价格是否合理、数量是否超限)、仓位检查(是否超过预设敞口)、资金检查(保证金是否充足)。
- 事中风控:实时监控市场波动、持仓变化、对手方风险。一旦触发阈值,自动执行止损或对冲。
- 事后风控:交易复盘、压力测试、归因分析。我每个月都会跑一次极端行情模拟,看看系统能不能扛住。
避坑指南:我曾经因为风控系统的阈值设置太宽松,导致一次黑天鹅事件中亏损了半个月的利润。后来我把所有阈值都改成了动态调整,根据市场波动率自动缩放。
清算系统:你的“账房先生”
清算系统负责交易确认、资金结算、费用计算、盈亏统计。很多人忽视这块,觉得它只是记账。其实不然——清算系统是利润的最终确认者。
清算系统要处理:
- 交易匹配:确保你的成交记录和交易所的记录一致。不一致的情况我遇到过几次,都是因为时间戳精度问题。
- 资金管理:计算保证金、盈亏、手续费、利息。这里要注意不同产品的计费规则差异很大。
- 对账:每天收盘后,和交易所、托管行、对手方对账。我建议自动化对账,人工对账太容易出错。
| 清算任务 | 频率 | 注意事项 |
|---|---|---|
| 交易匹配 | 实时 | 注意时间戳对齐 |
| 资金计算 | 每日 | 区分已实现和未实现盈亏 |
| 对账 | 每日 | 自动化优先,人工复核 |
数据系统:你的“大脑”和“记忆”
数据系统是其他三个系统的基础。没有数据,交易系统就是瞎子,风控系统就是聋子,清算系统就是傻子。
数据系统包含:
- 行情数据:实时行情、历史行情、深度数据。我建议同时存储原始数据和加工后的数据,方便回溯。
- 交易数据:订单、成交、仓位、资金流水。这些数据要保留至少5年,监管要求。
- 分析数据:策略回测结果、风险指标、绩效报告。我习惯用Parquet格式存储,查询速度快很多。
个人经验:数据系统的设计要遵循“写一次,读多次”的原则。写入时做校验,读取时做缓存。我曾经因为数据写入没做校验,导致回测结果全是错的,白白浪费了两周时间。
系统架构图
下面这张图展示了四个系统之间的关系。交易系统在最前面,风控系统贯穿始终,清算系统在后台运行,数据系统为所有系统提供支撑。
系统间的协作
这四个系统不是孤立的,它们之间需要紧密协作。我举个例子:
- 交易系统收到行情,生成报价并发送到交易所。
- 风控系统实时监控报价是否在安全范围内,如果超出阈值,立即拦截。
- 成交后,清算系统记录交易,计算盈亏和费用。
- 数据系统存储所有数据,供后续分析和回测使用。
这里有个关键点:数据一致性。我曾经因为交易系统和清算系统的时间戳不一致,导致对账时差了十几万。后来统一用NTP服务器同步时间,再也没出过问题。
核心原则:交易系统要快,风控系统要稳,清算系统要准,数据系统要全。四者缺一不可,但优先级不同——风控永远第一。
技术选型建议
根据我的经验,不同系统适合不同的技术栈:
| 系统 | 推荐技术 | 原因 |
|---|---|---|
| 交易系统 | C++ / Java + 低延迟网络 | 需要极致性能 |
| 风控系统 | Python + 规则引擎 | 灵活配置,快速迭代 |
| 清算系统 | Java / Go + 关系型数据库 | 事务一致性要求高 |
| 数据系统 | Kafka + ClickHouse + S3 | 高吞吐,低成本存储 |
当然,这只是参考。具体选型要看你的交易品种、规模、团队技术栈。我见过用Python做交易系统的,也能跑得不错,关键是找到适合你的方案。
最后说一句:系统架构不是一次成型的。我建议先跑通最小可行版本,再逐步优化。别一开始就想搞个大而全的系统,容易把自己搞死。