一、行情网关概述

什么是行情网关

行情网关,说白了就是连接交易所和交易系统的桥梁。它负责接收交易所的行情数据,然后转发给内部的策略模块。

我刚开始做量化时,觉得这不就是个数据转发器吗?后来踩了坑才明白——行情网关是整个交易系统里最容易被忽视的瓶颈

它的核心职责其实就三件事:

  • 接收:从交易所的行情源(比如CTP、UDP组播)拿到原始数据
  • 解析:把二进制协议转成内部可用的数据结构
  • 分发:把解析后的行情推送给策略、风控、记录等模块

嗯,听起来简单。但如果你做过实盘,就知道这里面坑有多深。

关键点:行情网关不是简单的「收到就转发」。它要处理丢包、乱序、重连、快照重建等一系列问题。我见过不少团队,策略写得漂亮,结果行情网关一崩,整个系统直接瘫痪。

低延迟行情网关的核心价值

为什么强调「低延迟」?你想想看,在量化交易里,速度就是钱

举个例子:某只股票在交易所出现一个大的卖单,你的策略想抢这个单子。如果你的行情网关比别人慢1毫秒,那等你看到行情时,单子早就被抢光了。

我个人习惯把延迟拆成三个环节:

环节 典型延迟 优化空间
网络传输 10-100μs 硬件加速、FPGA
协议解析 1-10μs 零拷贝、预分配
内部分发 0.1-5μs 无锁队列、内存映射

我在项目中遇到过最夸张的情况:某家券商的行情网关,从收到数据到推送给策略,平均延迟200微秒。听起来还行?但他们的策略是高频做市,200微秒意味着每次报价都慢半拍,一个月下来亏损了几十万。

避坑指南:我曾经以为「只要用C++写,延迟自然就低」。后来发现,代码写得再快,如果用了锁、用了系统调用、用了动态内存分配,延迟照样飙上去。低延迟不是语言问题,是设计问题。

低延迟行情网关的核心价值,说白了就是:让你比别人更早看到市场变化。哪怕只早10微秒,在套利、做市这类策略里,可能就是盈利和亏损的分界线。

行情网关在量化交易系统中的位置

整个量化交易系统,我习惯分成四层:

  1. 行情层:行情网关、数据记录
  2. 策略层:信号生成、订单管理
  3. 执行层:交易网关、路由
  4. 风控层:事前风控、事后风控

行情网关处于最底层,是所有数据的入口。没有它,策略就是瞎子。

这里有个容易忽略的点:行情网关不只是给策略用的。风控模块需要实时行情来做限价检查,记录模块需要行情来做回放分析。所以行情网关的设计,必须考虑多路分发。

注意:我见过有人把行情网关和策略写在一个进程里。这样做延迟确实低,但一旦策略崩溃,行情网关也跟着挂。更合理的做法是:行情网关独立进程,通过共享内存或UDP组播分发数据。

下面这张图,是我个人比较推荐的行情网关架构:

交易所行情源 行情网关 接收 → 解析 → 分发 共享内存总线 策略模块 风控模块 记录模块 监控模块 行情网关在量化交易系统中的位置 行情网关独立进程,通过共享内存向多个模块分发数据

你看,行情网关处在最核心的位置。它不仅要快,还要稳。我见过不少团队,一开始只关注策略的收益,结果行情网关三天两头出问题——丢包、延迟抖动、内存泄漏。最后不得不停下来重构。

我的建议:如果你正在搭建量化系统,先把行情网关做扎实。哪怕策略简单点,只要行情数据稳定、低延迟,后面优化策略的空间就大得多。反过来,行情网关不行,策略再牛也白搭。

嗯,这一章先聊到这里。行情网关的概念、价值、位置,心里有个底就行。后面我们会深入每个环节——从网络协议到内存管理,从零拷贝到无锁队列,一步步把延迟压到极致。


公众号:蓝海数据掘金营,微信deep3321