Skip to content

高频量化交易系统 Colo 侧进程与模块设计 ​

版本:v0.1
范围:仅覆盖 Colo 侧生产交易链路。自有机房侧的 Control、观测、结算、部署、日志、研究平台等仅作为外部依赖出现。
设计口径:交易系统是整体;Colo 侧按“进程”划分;每个进程内部再拆“模块”。


1. 设计口径 ​

Colo 侧不再按“一级模块”命名,而统一按“进程”命名:

text
Colo 侧进程
├── 行情进程
├── 信号进程
├── 交易机器人进程
├── 柜台发单进程
├── 管控代理进程
├── 运维进程组
└── 通用基础设施模块

其中:

  • 进程:独立运行、独立部署、独立监控的运行单元。
  • 模块:进程内部的功能单元,不一定独立部署。
  • 通用基础设施模块:被多个进程依赖的公共能力,例如 hftdb / hdftdb、IPC、共享内存、日志 SDK、指标 SDK、配置 SDK、时间工具等。部分能力可以是库,部分能力可以是常驻进程。

当前阶段的几个边界约定:

能力当前归属说明
风控柜台发单进程作为最终硬约束,不单独拆一级进程
行情质量行情进程行情延迟、断流、乱序、跳号、订单簿异常都归行情进程
交易参数管控代理进程负责同步,各业务进程消费参数统一由自有机房 Control 下发
订单状态柜台发单进程为主,交易机器人进程保留本地影子状态最终订单状态以柜台发单进程为准
进程状态运维进程组采集,管控代理进程汇总上报避免业务进程直接对外暴露过多接口
日志与指标运维进程组采集,通用工具提供 SDK本地落盘,异步回传

2. Colo 侧总体架构图 ​


3. 主交易链路图 ​


4. 控制链路图 ​


5. 行情进程 ​

5.1 进程定位 ​

行情进程负责从交易所、券商或行情服务商接收行情,完成协议解析、标准化、订单簿构建、行情质量检查、行情落盘和行情分发。

行情进程是 Colo 侧交易链路的输入源,要求低延迟、高稳定、可恢复、可回放。

5.2 内部模块 ​

5.3 模块功能明细 ​

模块功能
行情接入模块接收 UDP Multicast、TCP、专线行情、柜台行情等数据;处理网卡绑定、组播订阅、连接管理、重连
行情解码模块将交易所或券商原始协议解码为内部结构;处理包头、序号、时间戳、消息类型、字段解析
行情标准化模块将不同市场、不同协议的行情字段统一为内部格式,例如 Tick、Snapshot、Order、Trade、OrderBookDelta
订单簿模块根据快照、逐笔委托、逐笔成交或增量行情构建本地订单簿;维护买卖档位、最优价、深度、序号
行情校验模块检查断流、乱序、跳号、重复包、延迟异常、盘口交叉、价格异常、成交量异常、订单簿不一致
行情录制模块录制原始行情包、标准化行情、订单簿快照、异常事件,支持盘后回放和问题复盘
行情分发模块将标准化行情、订单簿更新、最优档、聚合特征发布给信号进程或其他订阅者
延迟统计模块统计交易所时间、接收时间、解码时间、订单簿更新时间、发布完成时间之间的延迟

5.4 输入与输出 ​

类型内容
输入原始行情包、交易日历、标的映射、行情配置、重建订单簿指令
输出标准化行情、订单簿更新、行情质量事件、行情延迟指标、原始行情文件

5.5 关键状态 ​

  • 行情源连接状态
  • 最新包序号
  • 每个标的的订单簿状态
  • 行情接收时间戳
  • 行情质量状态
  • 是否处于行情重建状态

5.6 异常处理 ​

异常处理方式
行情断流上报管控代理进程;标记行情不可用;必要时触发交易机器人停止交易
序号跳变尝试重建订单簿;记录异常区间;上报行情质量事件
订单簿不一致丢弃异常增量;等待快照重建;禁止输出不可信订单簿
延迟异常上报延迟指标;标记行情源降级
解码失败记录原始包;统计失败率;超过阈值后报警

6. 信号进程 ​

6.1 进程定位 ​

信号进程负责消费行情进程输出的标准化行情和订单簿数据,计算特征、因子和策略信号,并输出交易意图。

信号进程不直接连接柜台,不直接报单,不承担最终风控。

6.2 内部模块 ​

6.3 模块功能明细 ​

模块功能
行情消费模块从 hftdb、共享内存或 IPC 订阅标准化行情、订单簿、最优档、行情质量事件
特征计算模块计算微观结构特征、盘口特征、成交特征、短周期收益率、波动率、流动性指标
因子计算模块根据特征计算 alpha 因子、预测分数、方向概率、成交概率、冲击成本估计
策略信号模块根据因子、状态、参数生成交易信号,例如买入、卖出、撤单、目标仓位、报价意图
信号过滤模块对信号做基础过滤,例如行情不可用过滤、标的池过滤、交易时段过滤、信号去抖、冷却时间
策略状态模块维护策略自身状态,例如当前是否启用、参数版本、最近信号、信号强度、策略内部仓位视图
参数订阅模块接收管控代理进程下发的策略参数、标的池、交易时段、阈值、灰度开关
回报消费模块消费柜台发单进程或交易机器人进程回传的订单、成交、拒单信息,用于更新策略状态
信号发布模块将交易意图发布给交易机器人进程,同时上报信号状态给管控代理进程

6.4 输入与输出 ​

类型内容
输入标准化行情、订单簿、行情质量事件、策略参数、成交回报、订单状态摘要
输出交易信号、目标仓位、目标订单、撤单信号、策略状态、信号指标

6.5 信号输出建议 ​

信号进程输出不建议直接使用柜台报单格式,而应使用中间语义:

text
SignalEvent
├── strategy_id
├── symbol
├── side
├── signal_type
├── strength
├── target_position
├── target_notional
├── max_participation_rate
├── expire_time
├── parameter_version
└── reason_code

交易机器人进程再将 SignalEvent 转换为具体订单行为。

6.6 异常处理 ​

异常处理方式
行情质量不可用停止输出新信号或输出撤单信号
参数版本不一致拒绝启用新参数;上报参数错误
特征计算异常隔离对应标的或策略;继续处理其他标的
信号频繁抖动通过去抖、冷却、最小变化阈值过滤
回报延迟过大标记策略状态不可信;暂停激进交易

7. 交易机器人进程 ​

7.1 进程定位 ​

交易机器人进程负责消费信号进程输出的交易意图,并根据执行算法生成具体订单行为。

信号进程回答“是否要交易”,交易机器人进程回答“如何交易”,柜台发单进程负责“是否允许发出去以及如何可靠发出去”。

7.2 内部模块 ​

7.3 模块功能明细 ​

模块功能
信号消费模块订阅交易信号、目标仓位、撤单信号、信号过期事件
目标管理模块维护当前交易目标,例如目标仓位、目标金额、目标订单量、完成度、剩余量
算法执行模块实现 TWAP、VWAP、POV、盘口跟随、被动挂单、主动吃单、做市报价等执行逻辑
订单意图生成模块将交易目标转换成订单意图,包括标的、方向、价格、数量、订单类型、有效期
挂撤单管理模块控制挂单、撤单、改价、追单、补单、订单过期、订单超时
订单请求发布模块将订单请求发送给柜台发单进程,不直接连接柜台
订单/成交回报消费模块消费订单确认、拒单、撤单确认、成交回报,用于更新本地状态
本地订单状态模块维护交易机器人的影子订单状态,用于执行算法判断,但不作为最终订单账本
参数订阅模块接收交易节奏、盘口偏移、最大订单量、最小成交间隔、算法参数等
应急控制模块响应停机、禁买、禁卖、暂停策略、撤单、停止新单等控制指令

7.4 输入与输出 ​

类型内容
输入交易信号、订单簿摘要、订单回报、成交回报、算法参数、控制指令
输出报单请求、撤单请求、交易机器人状态、执行进度、异常事件

7.5 关键边界 ​

交易机器人进程可以做策略侧软约束:

  • 是否达到目标仓位
  • 是否已经超过算法执行时间
  • 是否继续挂单
  • 是否追单
  • 是否撤单
  • 是否暂停某个策略

但最终硬约束必须在柜台发单进程执行:

  • 账户是否允许交易
  • 标的是否允许交易
  • 价格是否合法
  • 数量是否合法
  • 资金和持仓是否足够
  • 是否超过报撤单频率
  • 是否触发全局 Kill Switch

8. 柜台发单进程 ​

8.1 进程定位 ​

柜台发单进程是 Colo 侧真实交易出口,负责接收交易机器人进程的报撤单请求,执行最终风控、流控、订单状态管理、柜台协议适配,并处理订单回报和成交回报。

该进程是交易链路中最关键的硬约束点。

8.2 内部模块 ​

8.3 模块功能明细 ​

模块功能
订单请求接入模块接收交易机器人进程发来的报单、撤单、改单、查询等请求
请求校验模块校验请求字段完整性、策略 ID、账户 ID、标的代码、方向、价格、数量、订单类型
最终风控模块执行事前硬风控,包括账户权限、标的白名单、价格限制、数量限制、资金、持仓、涨跌停、禁买禁卖
流控模块控制报单速率、撤单速率、单账户速率、单策略速率、柜台限速、瞬时速率
订单状态机模块维护订单生命周期:待发送、已发送、已确认、部分成交、全部成交、撤单中、已撤、拒单、未知状态
柜台协议适配模块将内部订单请求转换为柜台协议,例如 FIX、OES、CTP、券商私有极速接口等
柜台会话模块管理登录、认证、心跳、重连、序号、断线恢复、会话状态
回报接收模块接收柜台返回的订单回报、成交回报、撤单回报、拒单、错误消息
回报解析模块将柜台回报转换为内部标准回报格式
成交处理模块更新成交明细、累计成交、成交均价、费用估算、成交时间戳
拒单处理模块处理柜台拒单、本地风控拒单、交易所拒单,生成统一拒单原因
持仓资金模块维护本地实时持仓、可用资金、冻结资金、可卖数量、成交增量
Kill Switch 模块支持策略级、账户级、产品级、市场级、全局级停止新单、全撤、断开柜台等应急动作
回报分发模块将订单状态、成交、拒单、风控事件分发给交易机器人进程和管控代理进程
交易日志模块记录所有订单请求、风控结果、柜台请求、柜台回报、状态变化、异常事件

8.4 输入与输出 ​

类型内容
输入报单请求、撤单请求、风控参数、账户配置、标的配置、控制指令、柜台回报
输出柜台报单、柜台撤单、订单回报、成交回报、拒单事件、风控事件、持仓资金变化

8.5 订单状态机 ​

8.6 风控执行原则 ​

柜台发单进程内部风控属于最终硬约束。即使交易机器人进程已经做过检查,柜台发单进程仍必须重新检查。

text
交易机器人进程风控 = 策略侧软约束
柜台发单进程风控 = 交易出口硬约束

建议至少包含:

  • 账户是否启用
  • 产品是否启用
  • 策略是否启用
  • 标的是否在白名单
  • 是否处于交易时段
  • 买卖方向是否允许
  • 报单价格是否合法
  • 报单数量是否合法
  • 单笔金额是否超限
  • 单标的持仓是否超限
  • 账户总敞口是否超限
  • 资金是否足够
  • 可卖持仓是否足够
  • 报单频率是否超限
  • 撤单频率是否超限
  • 是否触发 Kill Switch

9. 管控代理进程 ​

9.1 进程定位 ​

管控代理进程负责 Colo 侧与自有机房之间的控制面通信。它不做交易决策,不参与行情计算,不直接连接柜台。

核心职责是:

text
状态采集 + 状态上报 + 参数同步 + 控制指令接收 + 指令转发 + 审计留痕

9.2 内部模块 ​

9.3 模块功能明细 ​

模块功能
控制连接模块维护与自有机房 Control 的连接、认证、心跳、断线重连、加密传输
指令接收模块接收参数更新、策略启停、禁买禁卖、全撤、进程启停、日志级别调整等指令
权限校验模块校验指令来源、用户权限、环境权限、操作范围、参数版本
指令审计模块记录指令来源、指令内容、接收时间、执行对象、执行结果
指令分发模块将控制指令转发给对应进程,例如信号进程、交易机器人进程、柜台发单进程、运维进程组
配置同步模块同步策略参数、交易参数、风控参数、账户配置、标的池、交易日历、灰度配置
状态采集模块采集行情状态、策略状态、交易机器人状态、订单成交状态、风控事件、进程状态
状态聚合模块对多个进程状态进行聚合、压缩、去重、关联,形成统一状态视图
状态上报模块将业务状态、系统状态、异常事件、审计事件上报自有机房
降级缓存模块自有机房不可达时本地缓存关键事件,恢复连接后补传

9.4 输入与输出 ​

类型内容
输入Control 指令、配置版本、各进程状态、订单成交事件、风控事件、运维指标
输出参数下发、控制指令转发、状态上报、审计日志、异常事件

9.5 典型控制指令 ​

text
ControlCommand
├── start_process
├── stop_process
├── restart_process
├── start_strategy
├── stop_strategy
├── update_param
├── ban_buy
├── ban_sell
├── cancel_all
├── kill_switch
├── change_log_level
├── switch_version
└── health_check

10. 运维进程组 ​

10.1 进程定位 ​

运维进程组负责 Colo 机器和进程的稳定运行,包括进程守护、日志采集、指标采集、健康检查、部署代理、core dump 管理和应急脚本执行。

运维进程组偏系统运行保障,管控代理进程偏业务控制面。

10.2 内部模块 ​

10.3 模块功能明细 ​

模块功能
进程守护模块监控业务进程存活;异常退出后按策略拉起;支持手动启停、重启、禁止自动拉起
健康检查模块检查进程心跳、业务心跳、队列堆积、端口状态、共享内存状态、配置版本
指标采集模块采集 CPU、内存、磁盘、网络、进程延迟、队列长度、事件速率、错误计数
日志采集模块采集业务日志、系统日志、交易日志、错误日志;支持本地落盘和异步回传
部署代理模块接收部署平台指令,完成版本下载、校验、切换、回滚、配置替换
Core Dump 管理模块捕获异常崩溃文件,做压缩、归档、索引、回传
应急脚本模块执行预定义应急动作,例如停止全部交易、清理共享内存、重启指定进程
机器检查模块检查磁盘空间、网卡状态、组播状态、PTP/NTP 状态、系统负载、文件句柄
本地缓存模块自有机房不可达时暂存日志、指标、事件,恢复后补传

10.4 输入与输出 ​

类型内容
输入部署指令、进程控制指令、健康检查规则、日志采集规则、应急脚本指令
输出进程状态、机器状态、日志、指标、core dump、部署结果、健康检查结果

11. 通用基础设施模块 ​

11.1 定位 ​

通用基础设施模块为所有进程提供公共能力。它不是业务进程,但可能包含一个或多个常驻基础进程,例如 hftdbd、本地消息总线、共享内存管理器等。

设计原则:

text
业务进程可以依赖通用基础设施模块;
通用基础设施模块不能反向依赖任何业务进程。

11.2 内部模块 ​

11.3 模块功能明细 ​

模块功能
hftdb / hdftdb作为本地高性能状态存储或消息通信载体,用于进程间共享行情、状态、订单、指标等数据
IPC 模块提供进程间通信能力,例如 Unix Domain Socket、共享内存队列、TCP、本地消息总线
共享内存模块提供低延迟数据共享,适合行情、订单簿、订单状态等高频读写数据
Ring Buffer 模块提供无锁或低锁队列,用于行情事件、信号事件、订单事件传递
日志 SDK提供统一日志格式、异步写入、日志级别、交易日志、错误日志、审计日志接口
指标 SDK提供 Counter、Gauge、Histogram、Latency Timer 等指标采集接口
配置 SDK提供配置读取、版本检查、热更新、回滚、参数校验
时间工具提供高精度时间戳、交易所时间、本地接收时间、单调时钟、延迟打点
交易日历工具提供交易日、交易时段、集合竞价、连续竞价、午休、收盘等时间判断
证券代码映射统一交易所代码、券商代码、内部代码、行情代码、合约代码
序列化模块统一内部消息编码格式,支持低延迟编码、版本兼容、schema 演进
错误码模块统一错误码、拒单原因、异常事件类型、告警类型

12. 进程间主题与消息建议 ​

Colo 侧各进程之间可以使用统一消息主题。示例:

主题发布方订阅方内容
market.raw行情进程行情录制模块原始行情包摘要或索引
market.tick行情进程信号进程标准化 Tick
market.orderbook行情进程信号进程、交易机器人进程订单簿更新
market.quality行情进程信号进程、交易机器人进程、管控代理进程行情质量事件
signal.event信号进程交易机器人进程交易信号
order.intent交易机器人进程柜台发单进程报单/撤单意图
order.report柜台发单进程交易机器人进程、信号进程、管控代理进程订单状态回报
trade.report柜台发单进程交易机器人进程、信号进程、管控代理进程、结算平台成交回报
risk.event柜台发单进程管控代理进程、交易机器人进程风控事件
process.status运维进程组管控代理进程进程状态
control.command管控代理进程各业务进程控制指令
config.update管控代理进程各业务进程配置更新

13. 进程启动顺序建议 ​

启动原则:

  1. 先启动基础设施,再启动业务进程。
  2. 行情质量未通过前,不允许策略正式交易。
  3. 柜台未登录成功、持仓资金未初始化前,不允许真实报单。
  4. 管控代理进程未连接自有机房时,可以允许只读启动,但默认不允许自动进入交易状态。
  5. 所有交易状态切换必须留痕。

14. 进程降级与故障处理 ​

故障点降级策略
行情进程异常信号进程停止输出新信号;交易机器人进程撤单或暂停;柜台发单进程禁止新单
信号进程异常交易机器人进程停止新增目标;已有订单按策略撤单或完成退出
交易机器人进程异常柜台发单进程可根据配置撤掉该策略全部挂单;禁止该策略新单
柜台发单进程异常立即触发严重告警;必要时断开柜台连接;恢复后重建订单状态
管控代理进程异常本地业务可按既有配置继续运行,但禁止接收新参数;状态本地缓存
运维进程组异常业务进程继续运行;管控代理进程上报运维不可用;人工介入
通用基础设施异常根据影响范围决定停止行情、信号或交易;优先保护订单出口一致性

15. 关键设计原则 ​

15.1 订单出口唯一原则 ​

所有真实报单必须经过柜台发单进程。任何进程都不应绕过柜台发单进程直接连接柜台。

text
交易机器人进程 -> 柜台发单进程 -> 柜台 / 交易所网关

15.2 风控最终一致原则 ​

交易机器人进程可以做策略侧风控,但最终硬风控必须由柜台发单进程执行。

15.3 行情可信原则 ​

行情进程必须给下游输出行情质量状态。下游不能只看行情数据本身,也要消费行情质量事件。

15.4 控制留痕原则 ​

所有参数变更、策略启停、进程控制、禁买禁卖、Kill Switch、全撤指令都必须经过管控代理进程审计留痕。

15.5 状态可恢复原则 ​

关键状态需要支持恢复:

  • 行情序号
  • 订单簿状态
  • 订单状态
  • 成交状态
  • 持仓资金状态
  • 参数版本
  • 控制指令执行状态

15.6 通用基础设施无业务反依赖原则 ​

通用基础设施只能提供底层能力,不应包含行情、信号、交易、风控等业务逻辑。


16. 最终 Colo 侧进程清单 ​

进程主要职责内部核心模块
行情进程行情接入、解析、订单簿、行情质量、行情分发接入、解码、标准化、订单簿、校验、录制、分发、延迟统计
信号进程特征、因子、策略信号、交易意图输出行情消费、特征、因子、信号、过滤、参数订阅、状态维护
交易机器人进程将信号转成具体订单行为信号消费、目标管理、算法执行、订单意图、挂撤单、回报消费
柜台发单进程唯一真实交易出口请求接入、最终风控、流控、订单状态机、柜台适配、回报处理、Kill Switch
管控代理进程Colo 与自有机房控制面桥梁控制连接、指令接收、权限校验、配置同步、状态聚合、状态上报、审计
运维进程组机器和进程运行保障watchdog、health-check、metric-agent、log-agent、deploy-agent、core-dump、应急脚本
通用基础设施模块公共底层能力hftdb、IPC、共享内存、RingBuffer、日志 SDK、指标 SDK、配置 SDK、时间工具、证券代码映射

17. 当前阶段推荐落地顺序 ​

text
第一阶段:跑通最小闭环
行情进程 -> 信号进程 -> 交易机器人进程 -> 柜台发单进程 -> 管控代理进程

第二阶段:增强生产安全
柜台发单进程风控、Kill Switch、订单状态恢复、行情质量、日志与指标

第三阶段:增强可观测与可回放
行情录制、订单成交录制、交易回放、延迟分解、异常复盘

第四阶段:增强自动化运维
进程守护、自动部署、灰度发布、配置版本管理、故障自愈

第五阶段:增强合规与审计
控制指令审计、参数变更审计、异常交易留痕、监管材料生成

18. 总结 ​

Colo 侧建议以“进程”为一级边界:

text
行情进程
信号进程
交易机器人进程
柜台发单进程
管控代理进程
运维进程组
通用基础设施模块

每个进程内部再按功能拆模块。当前阶段不需要把风控、行情质量、配置、订单状态、日志、指标都提升为一级进程。更合理的做法是:

  • 风控放在柜台发单进程,作为订单出口硬约束。
  • 行情质量放在行情进程,作为行情可信度判断。
  • 参数由管控代理进程统一同步,各业务进程按需消费。
  • 订单状态由柜台发单进程维护,交易机器人只维护执行所需的本地影子状态。
  • 运维能力通过运维进程组和管控代理进程共同完成。
  • 通用基础设施模块只提供底层能力,不掺入业务逻辑。

Last updated:

基于 VitePress 构建 · 工程、交易与系统研究日志