第三章 交易系统架构:四层架构的职责划分

做网格交易系统,最怕什么?

我见过太多人,一上来就写策略代码。结果呢?数据乱了,订单飞了,风控形同虚设。说白了,没有架构的交易系统,就像没有地基的房子。

今天我就把这套实战架构掰开揉碎了讲给你听。这是我做了多年量化交易系统后,沉淀下来的四层架构模型。

3.1 整体架构设计:四层模型

先看整体结构。我习惯把系统拆成四层:数据层、策略层、执行层、风控层。每层各司其职,互不干扰。

核心原则:上层依赖下层,下层不依赖上层。策略层只管算信号,执行层只管发单,风控层只管拦截。

下面这张图,是我用SVG画的架构图。你一看就明白。

ETF网格交易系统 — 四层架构图 数据层 行情数据采集 · 历史数据存储 · 实时数据推送 · 数据清洗 数据源:交易所API / 数据库 / CSV文件 策略层 网格参数计算 · 信号生成 · 仓位管理 · 网格间距动态调整 核心逻辑:价格区间 → 网格划分 → 买卖信号 执行层 订单管理 · 撤单重发 · 成交确认 · 仓位同步 对接交易所API,处理限价单/市价单 风控层 资金监控 · 异常检测 · 熔断机制 · 日志审计 贯穿所有层级,实时监控系统健康状态 数据流方向 信号流方向 订单流方向 风控贯穿全流程

嗯,这张图我画了好一会儿。你注意看右侧那条虚线——风控层不是独立的,它贯穿所有层级。数据进来要校验,策略信号要复核,订单发出要监控。这才是真正的风控。

3.2 数据层:系统的血液

数据层是整个系统的基础。没有干净的数据,策略就是瞎搞。

数据层要干三件事:

  • 行情采集:实时拉取ETF的tick数据或1分钟K线。我个人习惯用WebSocket连接交易所,延迟低。
  • 数据存储:历史数据存到本地数据库。我推荐用SQLite,轻量够用。别一上来就上MySQL,没必要。
  • 数据清洗:去掉异常值、处理缺失数据。这一步很多人忽略,但坑最多。

避坑指南:我曾经遇到过行情数据突然断流的情况。交易所API偶尔会抽风。解决方案?加一个心跳检测,5秒没收到数据就报警,同时从备用数据源补数据。

数据层的输出是什么?就是一个干净、实时的价格序列。策略层只管拿这个序列算网格。

3.3 策略层:网格的核心逻辑

策略层是大脑。它负责把价格数据变成买卖信号。

核心流程:

  1. 确定价格区间:根据历史波动率,算出一个合理的上下边界。我一般用过去60天的最高最低价,再各加5%的缓冲。
  2. 划分网格:把区间分成N等份。每份就是一个网格。网格数量我建议10-20个,太多容易频繁交易,太少吃不到利润。
  3. 生成信号:价格每穿过一个网格线,就产生一个信号。向上穿出就卖,向下穿入就买。

你想想看,这个逻辑其实很简单。但难点在哪?动态调整。市场波动率变了,网格间距要不要调?我习惯用ATR(平均真实波幅)来做动态调整。

关键点:策略层只输出信号,不负责下单。它说「该买了」,执行层才去操作。这样职责清晰,出了问题好排查。

3.4 执行层:把信号变成订单

执行层是手脚。它负责把策略层的信号,变成真实的交易所订单。

执行层要处理的事:

  • 订单管理:维护一个订单队列。每个网格对应一个挂单。价格到了就成交,没到就挂着。
  • 撤单重发:有时候价格波动太快,挂单没成交就滑过去了。这时候要撤单,重新挂到新的网格位置。
  • 成交确认:收到交易所的成交回报后,更新本地仓位。这一步容易出问题,我遇到过成交回报丢失的情况。

注意:执行层一定要做幂等处理。同一个信号不能重复下单。我见过有人因为网络重试,同一个网格下了两笔单,仓位直接翻倍。

说白了,执行层就是跟交易所API打交道。限价单怎么发?市价单什么时候用?这些细节我后面会专门讲。

3.5 风控层:最后的防线

风控层是保安。它不直接参与交易,但每笔交易它都要盯着。

风控层监控什么?

监控项 说明 触发动作
资金余额 账户可用资金是否充足 余额不足时暂停交易,发报警
持仓上限 单只ETF持仓不能超过总资金的30% 超限时拒绝买入信号
异常波动 价格5分钟内涨跌超过3% 触发熔断,暂停所有交易10分钟
订单超时 挂单超过30分钟未成交 撤单并重新评估网格位置

我习惯把风控做成一个独立的服务。它订阅所有层级的消息,一旦发现异常,直接发指令让执行层停止操作。这样即使策略层写错了,风控层也能兜底。

我的经验:风控规则不要写死在代码里。用配置文件管理,方便随时调整。我曾经因为写死了一个熔断阈值,结果市场剧烈波动时系统直接罢工,损失不小。

3.6 四层之间的通信

层与层之间怎么通信?我推荐用消息队列。数据层把行情数据推给策略层,策略层把信号推给执行层。每层都是异步的,互不阻塞。

这样做的好处很明显:

  • 数据层卡住了,策略层还能用缓存数据继续算
  • 执行层下单慢了,策略层不会等它
  • 风控层可以随时插入,拦截异常信号

嗯,这套架构我用了好几年。从最初的单线程脚本,到现在的多进程消息队列架构,踩过的坑都变成了经验。你照着这个框架搭,至少能少走半年弯路。

总结一句话:数据层管数据,策略层管信号,执行层管订单,风控层管安全。各司其职,系统才能稳定运行。


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