高频量化交易系统 Colo 侧进程与模块设计
版本:v0.1
范围:仅覆盖 Colo 侧生产交易链路。自有机房侧的 Control、观测、结算、部署、日志、研究平台等仅作为外部依赖出现。
设计口径:交易系统是整体;Colo 侧按“进程”划分;每个进程内部再拆“模块”。
1. 设计口径
Colo 侧不再按“一级模块”命名,而统一按“进程”命名:
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 信号输出建议
信号进程输出不建议直接使用柜台报单格式,而应使用中间语义:
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 风控执行原则
柜台发单进程内部风控属于最终硬约束。即使交易机器人进程已经做过检查,柜台发单进程仍必须重新检查。
交易机器人进程风控 = 策略侧软约束
柜台发单进程风控 = 交易出口硬约束建议至少包含:
- 账户是否启用
- 产品是否启用
- 策略是否启用
- 标的是否在白名单
- 是否处于交易时段
- 买卖方向是否允许
- 报单价格是否合法
- 报单数量是否合法
- 单笔金额是否超限
- 单标的持仓是否超限
- 账户总敞口是否超限
- 资金是否足够
- 可卖持仓是否足够
- 报单频率是否超限
- 撤单频率是否超限
- 是否触发 Kill Switch
9. 管控代理进程
9.1 进程定位
管控代理进程负责 Colo 侧与自有机房之间的控制面通信。它不做交易决策,不参与行情计算,不直接连接柜台。
核心职责是:
状态采集 + 状态上报 + 参数同步 + 控制指令接收 + 指令转发 + 审计留痕9.2 内部模块
9.3 模块功能明细
| 模块 | 功能 |
|---|---|
| 控制连接模块 | 维护与自有机房 Control 的连接、认证、心跳、断线重连、加密传输 |
| 指令接收模块 | 接收参数更新、策略启停、禁买禁卖、全撤、进程启停、日志级别调整等指令 |
| 权限校验模块 | 校验指令来源、用户权限、环境权限、操作范围、参数版本 |
| 指令审计模块 | 记录指令来源、指令内容、接收时间、执行对象、执行结果 |
| 指令分发模块 | 将控制指令转发给对应进程,例如信号进程、交易机器人进程、柜台发单进程、运维进程组 |
| 配置同步模块 | 同步策略参数、交易参数、风控参数、账户配置、标的池、交易日历、灰度配置 |
| 状态采集模块 | 采集行情状态、策略状态、交易机器人状态、订单成交状态、风控事件、进程状态 |
| 状态聚合模块 | 对多个进程状态进行聚合、压缩、去重、关联,形成统一状态视图 |
| 状态上报模块 | 将业务状态、系统状态、异常事件、审计事件上报自有机房 |
| 降级缓存模块 | 自有机房不可达时本地缓存关键事件,恢复连接后补传 |
9.4 输入与输出
| 类型 | 内容 |
|---|---|
| 输入 | Control 指令、配置版本、各进程状态、订单成交事件、风控事件、运维指标 |
| 输出 | 参数下发、控制指令转发、状态上报、审计日志、异常事件 |
9.5 典型控制指令
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_check10. 运维进程组
10.1 进程定位
运维进程组负责 Colo 机器和进程的稳定运行,包括进程守护、日志采集、指标采集、健康检查、部署代理、core dump 管理和应急脚本执行。
运维进程组偏系统运行保障,管控代理进程偏业务控制面。
10.2 内部模块
10.3 模块功能明细
| 模块 | 功能 |
|---|---|
| 进程守护模块 | 监控业务进程存活;异常退出后按策略拉起;支持手动启停、重启、禁止自动拉起 |
| 健康检查模块 | 检查进程心跳、业务心跳、队列堆积、端口状态、共享内存状态、配置版本 |
| 指标采集模块 | 采集 CPU、内存、磁盘、网络、进程延迟、队列长度、事件速率、错误计数 |
| 日志采集模块 | 采集业务日志、系统日志、交易日志、错误日志;支持本地落盘和异步回传 |
| 部署代理模块 | 接收部署平台指令,完成版本下载、校验、切换、回滚、配置替换 |
| Core Dump 管理模块 | 捕获异常崩溃文件,做压缩、归档、索引、回传 |
| 应急脚本模块 | 执行预定义应急动作,例如停止全部交易、清理共享内存、重启指定进程 |
| 机器检查模块 | 检查磁盘空间、网卡状态、组播状态、PTP/NTP 状态、系统负载、文件句柄 |
| 本地缓存模块 | 自有机房不可达时暂存日志、指标、事件,恢复后补传 |
10.4 输入与输出
| 类型 | 内容 |
|---|---|
| 输入 | 部署指令、进程控制指令、健康检查规则、日志采集规则、应急脚本指令 |
| 输出 | 进程状态、机器状态、日志、指标、core dump、部署结果、健康检查结果 |
11. 通用基础设施模块
11.1 定位
通用基础设施模块为所有进程提供公共能力。它不是业务进程,但可能包含一个或多个常驻基础进程,例如 hftdbd、本地消息总线、共享内存管理器等。
设计原则:
业务进程可以依赖通用基础设施模块;
通用基础设施模块不能反向依赖任何业务进程。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. 进程启动顺序建议
启动原则:
- 先启动基础设施,再启动业务进程。
- 行情质量未通过前,不允许策略正式交易。
- 柜台未登录成功、持仓资金未初始化前,不允许真实报单。
- 管控代理进程未连接自有机房时,可以允许只读启动,但默认不允许自动进入交易状态。
- 所有交易状态切换必须留痕。
14. 进程降级与故障处理
| 故障点 | 降级策略 |
|---|---|
| 行情进程异常 | 信号进程停止输出新信号;交易机器人进程撤单或暂停;柜台发单进程禁止新单 |
| 信号进程异常 | 交易机器人进程停止新增目标;已有订单按策略撤单或完成退出 |
| 交易机器人进程异常 | 柜台发单进程可根据配置撤掉该策略全部挂单;禁止该策略新单 |
| 柜台发单进程异常 | 立即触发严重告警;必要时断开柜台连接;恢复后重建订单状态 |
| 管控代理进程异常 | 本地业务可按既有配置继续运行,但禁止接收新参数;状态本地缓存 |
| 运维进程组异常 | 业务进程继续运行;管控代理进程上报运维不可用;人工介入 |
| 通用基础设施异常 | 根据影响范围决定停止行情、信号或交易;优先保护订单出口一致性 |
15. 关键设计原则
15.1 订单出口唯一原则
所有真实报单必须经过柜台发单进程。任何进程都不应绕过柜台发单进程直接连接柜台。
交易机器人进程 -> 柜台发单进程 -> 柜台 / 交易所网关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. 当前阶段推荐落地顺序
第一阶段:跑通最小闭环
行情进程 -> 信号进程 -> 交易机器人进程 -> 柜台发单进程 -> 管控代理进程
第二阶段:增强生产安全
柜台发单进程风控、Kill Switch、订单状态恢复、行情质量、日志与指标
第三阶段:增强可观测与可回放
行情录制、订单成交录制、交易回放、延迟分解、异常复盘
第四阶段:增强自动化运维
进程守护、自动部署、灰度发布、配置版本管理、故障自愈
第五阶段:增强合规与审计
控制指令审计、参数变更审计、异常交易留痕、监管材料生成18. 总结
Colo 侧建议以“进程”为一级边界:
行情进程
信号进程
交易机器人进程
柜台发单进程
管控代理进程
运维进程组
通用基础设施模块每个进程内部再按功能拆模块。当前阶段不需要把风控、行情质量、配置、订单状态、日志、指标都提升为一级进程。更合理的做法是:
- 风控放在柜台发单进程,作为订单出口硬约束。
- 行情质量放在行情进程,作为行情可信度判断。
- 参数由管控代理进程统一同步,各业务进程按需消费。
- 订单状态由柜台发单进程维护,交易机器人只维护执行所需的本地影子状态。
- 运维能力通过运维进程组和管控代理进程共同完成。
- 通用基础设施模块只提供底层能力,不掺入业务逻辑。