一、做市工具全景图:分类、模块、技术栈与选型考量

做市商这行,说白了就是跟市场赛跑。你跑得比对手快,就能吃到价差;慢了,就得给别人买单。而工具,就是你的跑鞋。

我入行那会儿,团队还在用Excel手动算报价,后来换成了C++写的内部系统,再到现在主流的Python+FPGA混合架构。这中间踩过的坑,够写一本血泪史了。今天我就把做市工具的全景图摊开来讲,帮你少走弯路。

1.1 做市工具的分类

做市工具五花八门,但按用途分,其实就三大类:

  • 报价引擎:核心中的核心。负责计算双边报价、管理订单簿、执行对冲策略。我见过不少团队在这块用现成的开源库,结果遇到极端行情直接崩了。
  • 风险管理模块:实时监控敞口、希腊值、资金利用率。说白了,就是防止你一把亏光。
  • 数据与回测系统:没有历史数据回测,你就是在赌。我习惯把回测和实盘环境做成同一套代码,避免「回测猛如虎,实盘亏成狗」的尴尬。

嗯,这里要注意:很多新手会把「行情数据源」也当成工具的一部分。其实它更像基础设施,我后面会单独讲。

1.2 核心功能模块

一个成熟的做市系统,至少包含以下模块:

模块 功能 我踩过的坑
订单管理 下单、撤单、改单、订单状态同步 曾经因为订单ID冲突,导致重复下单,亏了十几万
风险控制 敞口限制、止损、资金监控 有一次忘记设置最大持仓,被一波行情打爆了
策略引擎 报价算法、对冲逻辑、参数热加载 热加载没做好,每次改参数都要重启,错过行情
日志与审计 全量交易日志、性能监控、异常告警 早期日志写得太随意,出问题根本查不到原因

你想想看,如果订单管理模块延迟高了10毫秒,在抢单的时候可能就永远排不上队。所以每个模块的延迟,我都要求控制在微秒级。

1.3 技术栈概览

做市系统的技术栈,我一般分成三层:

  • 底层通信层:FPGA、C++、ZeroMQ、NATS。这一层追求极致的低延迟。我个人习惯用FPGA做行情解析,C++做核心交易逻辑。
  • 策略逻辑层:Python、Cython、Rust。Python开发快,但性能不够时我会用Cython重写热点代码。Rust是最近两年开始用的,内存安全确实香。
  • 数据与监控层:InfluxDB、ClickHouse、Grafana。时序数据库存行情数据,ClickHouse做回测分析,Grafana看实时监控。

为什么会这样分层?因为不同层对延迟和开发效率的要求完全不同。底层要快,上层要灵活。

核心原则:不要为了炫技而用新技术。我见过有人用Kafka做订单流,结果延迟比Redis高了两个数量级。选技术栈,先看业务场景。

1.4 选型的关键考量因素

选工具的时候,我一般问自己三个问题:

  1. 延迟要求是多少?高频做市需要微秒级,中低频毫秒级就够了。别一上来就上FPGA,成本高得吓人。
  2. 团队技术栈是什么?如果团队全是Python背景,硬上C++会死得很惨。我建议先用Python快速迭代,等业务稳定了再优化性能。
  3. 维护成本高不高?开源工具虽然免费,但出了问题得自己修。商业工具贵,但有技术支持。我个人的经验是:核心模块用商业的,外围用开源的。

避坑指南:我曾经选了一个很冷门的消息队列,结果社区没人维护,出了bug只能自己改源码。后来我学乖了,只选活跃度高的项目,比如Redis、NATS、ZeroMQ。

1.5 做市工具全景结构图

下面这张图,是我自己总结的做市工具全景结构。它把上面讲的分类、模块、技术栈串在了一起:

做市工具全景结构图 数据层 行情数据源 | 历史数据库 | 实时数据管道 技术栈:InfluxDB, ClickHouse, Kafka, Redis 策略层 报价引擎 | 风险管理 | 订单管理 | 对冲逻辑 技术栈:Python, Cython, Rust, C++ 核心模块:策略引擎、风险控制、日志审计 执行层 订单路由 | 交易所API | 低延迟通信 技术栈:FPGA, C++, ZeroMQ, NATS 监控与运维层 实时监控 | 告警系统 | 性能分析 数据流向

这张图我画了好几个版本,最后定稿成这样。你看,数据从底层往上流,策略在中间层做决策,执行层负责跟交易所打交道,监控层兜底。每一层都有对应的技术栈和核心模块。

注意:别想着一步到位。我见过太多团队一开始就追求全栈自研,结果半年过去了连个能用的报价引擎都没跑起来。我的建议是:先用现成的工具搭个最小可行系统,跑通了再逐步替换。

好了,做市工具的全景图就讲到这里。下一章我会深入讲报价引擎的设计,那是做市系统的灵魂。到时候我会拿我实际写过的代码来举例,保证干货满满。


专注资料整理