四、自动化交易系统架构:数据层、策略层、执行层、风控层、监控层

做市策略跑起来,背后得有个靠谱的系统撑着。

我见过不少团队,策略逻辑写得挺漂亮,结果一上线就崩。为什么?因为架构没搭好。说白了,自动化交易系统就像一座五层楼——每一层各司其职,缺一层都不行。

今天咱们就聊聊这五层架构:数据层、策略层、执行层、风控层、监控层。我个人习惯把这五层画成一个倒金字塔,数据在最底下托着,监控在最上面罩着。

核心观点:做市系统的稳定性,取决于每一层的解耦程度。层与层之间耦合越松,系统越扛造。

自动化交易系统五层架构 监控层(日志、告警、性能指标) 风控层(仓位限制、价格校验、熔断) 执行层(订单管理、路由、重试) 策略层(报价引擎、库存管理) 数据层(行情、订单簿、历史数据) 顶层 底层

1. 数据层:一切的基础

数据层是整栋楼的根基。没有数据,策略就是瞎猜。

数据层主要干三件事:

  • 行情数据接入——实时 tick、深度快照、K线
  • 订单簿维护——本地维护一个 Level 2 级别的订单簿
  • 历史数据存储——用于回测和事后分析

我在项目中遇到过一个问题:行情数据延迟了 200 毫秒,结果策略还在按旧价格报价,直接被套了。嗯,这里要注意——数据层的延迟必须控制在 10 毫秒以内,否则做市策略就是裸奔。

我的建议:用多路行情源做冗余。比如同时接入交易所的 WebSocket 和第三方数据商的 feed,主备切换。别问我为什么——有一次交易所的行情节点挂了,我全靠备用源撑过了那 3 分钟。

2. 策略层:做市的大脑

策略层是核心。它接收数据层清洗后的行情,然后决定:报什么价?报多少量?

做市策略通常包含两个模块:

  1. 报价引擎——根据当前订单簿、库存、波动率,计算最优买卖报价
  2. 库存管理器——监控当前持仓,避免单边风险过大

你想想看,如果库存管理器发现你持有了太多 ETH,而市场正在下跌,它会怎么做?它会主动调整报价,让卖价更低、买价更高,从而把库存甩出去。这就是库存管理的核心逻辑。

避坑指南:我曾经把报价引擎和库存管理器写在一个线程里,结果库存计算卡住了,报价也跟着停了。后来我改成异步通信——报价引擎只管报价,库存管理器只管算目标仓位,两者通过消息队列交互。稳多了。

3. 执行层:把想法变成订单

策略层算出了报价,执行层负责把订单发出去。

执行层要处理的事情不少:

  • 订单管理——创建、撤销、修改订单
  • 路由逻辑——如果对接多个交易所,要选最优路径
  • 重试机制——网络抖动时自动重试,但不能重复下单

说白了,执行层就是策略和交易所之间的「翻译官」。它要把策略的意图翻译成交易所能理解的 API 调用,还要处理各种异常情况。

场景 执行层处理方式
订单超时未成交 先查状态,再决定撤单还是等待
API 返回限频错误 自动降速,等待后重试
交易所断连 切换备用连接,同时通知风控层

注意:执行层最容易出 bug 的地方是「重复下单」。我曾经因为重试逻辑没写好,同一个订单发了三次,结果仓位直接翻了三倍。后来我强制要求:每次下单前先检查本地订单簿,确认没有重复的订单 ID。

4. 风控层:最后的防线

风控层是系统的「刹车」。它不参与交易决策,但有权在任何时候叫停交易。

风控层通常检查这些指标:

  • 仓位限制——单品种最大持仓不能超过 X
  • 价格校验——报价不能偏离市场中间价超过 Y%
  • 熔断机制——连续亏损超过 Z 元时自动暂停

我见过一个团队,策略层写得很完美,但风控层只检查了仓位,没检查价格。结果有一次行情剧烈波动,策略报了一个离谱的价格,直接被交易所吃掉了。嗯,从那以后,我把价格校验放在了风控层的第一位。

我的习惯:风控层独立部署在一个单独的进程中。这样即使策略层崩溃了,风控层还能执行「紧急平仓」指令。这叫「物理隔离」——你想想看,如果风控和策略在同一个进程里,策略崩了风控也崩了,那谁来救场?

5. 监控层:系统的眼睛

监控层不直接参与交易,但它记录一切。

监控层主要做三件事:

  1. 日志记录——每一笔订单、每一次报价、每一次错误,都要记下来
  2. 告警通知——延迟超标、仓位异常、连接断开,立刻发告警
  3. 性能指标——每秒处理多少笔报价?订单平均延迟多少?

我个人习惯把监控数据推送到 Grafana 上,实时看仪表盘。有一次我发现某个策略的报价频率突然下降了,点开日志一看——原来是数据层的 WebSocket 连接不稳定,丢包了。如果没有监控,这个问题可能要等到亏钱了才发现。

核心原则:监控层要做到「出了问题能追溯,没出问题能预警」。我曾经因为日志没打全,排查一个 bug 花了整整两天。后来我定了个规矩:所有关键路径都要打日志,而且日志要带上时间戳和上下文。

五层之间的协作

这五层不是孤立的。它们通过消息队列或共享内存通信。

举个例子:

  • 数据层推送行情 → 策略层计算报价 → 执行层发送订单 → 风控层校验 → 监控层记录
  • 如果风控层发现异常 → 直接通知执行层撤单 → 同时通知监控层告警

说白了,这就是一个流水线。每一层只关心自己的事,不越界。这样即使某一层出了问题,其他层还能正常工作。

我的经验:层与层之间用 Protobuf 序列化数据,比 JSON 快 3-5 倍。做市系统对延迟敏感,能省一毫秒是一毫秒。

总结

自动化交易系统的五层架构,说白了就是「分工明确、各司其职」。数据层管数据,策略层管决策,执行层管下单,风控层管安全,监控层管记录。

每一层都重要,但最容易被忽视的是风控层和监控层。我见过太多团队把精力全花在策略上,结果风控形同虚设,监控一片空白。嗯,希望你不要犯同样的错误。


公众号:蓝海资料掘金营,微信deep3321