1. 高频交易概述:什么是高频交易、HFT的核心目标、系统架构概览

1.1 什么是高频交易?

高频交易,说白了就是「用极快的速度完成交易」。

有多快?我见过最极端的场景,从行情数据到达网卡,到交易指令发出,整个流程控制在几百纳秒。嗯,纳秒,十亿分之一秒。你眨一下眼睛的时间,够它跑几十万笔交易了。

高频交易不是一种策略,而是一种能力。它依赖的是硬件、软件、网络、数据中心的极致配合。我入行时带我的老工程师说过一句话,我一直记着:「高频交易的本质,是把时间压缩到物理极限。」

具体来说,HFT 有几个典型特征:

  • 持仓时间极短——几秒到几分钟,甚至几毫秒
  • 单笔利润极薄——可能只有零点几个 tick
  • 交易频率极高——每天成千上万笔
  • 对延迟极度敏感——慢一微秒可能就亏钱

你想想看,如果一笔交易赚 0.01 个 tick,一天做 10 万笔,那就是 1000 个 tick 的利润。但如果你比别人慢 1 微秒,这笔单子就被别人抢走了。这就是 HFT 的残酷现实。

1.2 HFT 的核心目标:低延迟与高吞吐

HFT 系统追求两个核心指标:低延迟高吞吐。这两个词经常被混用,但在我眼里完全是两码事。

低延迟:快,才是王道

延迟,指的是从「事件发生」到「系统响应」之间的时间差。在 HFT 里,我们通常用纳秒(ns)来衡量。

举个例子:

  • 行情数据从交易所到达你的网卡:假设 500 纳秒
  • 网卡把数据传给 FPGA 处理:50 纳秒
  • FPGA 解析行情并生成信号:100 纳秒
  • 信号传给交易引擎:30 纳秒
  • 交易引擎生成订单并发送:80 纳秒

加起来不到 1 微秒。这就是一个合格的 HFT 系统该有的水平。

关键点:延迟是端到端的。你不能只看 CPU 处理时间,网卡、交换机、光纤、甚至机柜内的线缆长度都会影响延迟。我曾经在项目中因为一根光纤长了 3 米,导致延迟多了 15 纳秒——别笑,15 纳秒在 HFT 里是巨大的差距。

高吞吐:处理海量数据的能力

吞吐量,指的是单位时间内系统能处理多少数据。HFT 系统每秒可能要处理几十万笔行情更新,同时还要管理数千个订单状态。

低延迟和高吞吐有时候是矛盾的。你想想看,为了降低延迟,你可能用 FPGA 做硬连线处理,但 FPGA 的灵活性差,吞吐量上不去。反过来,用 GPU 做并行计算,吞吐量很高,但延迟又下不来。

我个人的经验是:先保证低延迟,再优化吞吐量。因为 HFT 的核心竞争力就是「比别人快」,吞吐量只要够用就行。

指标 典型值 衡量方式 优化方向
端到端延迟 < 1 微秒 行情到订单发出 硬件加速、减少拷贝
行情处理吞吐 > 50 万笔/秒 每秒行情更新数 并行流水线、FPGA
订单发送速率 > 10 万笔/秒 每秒订单数 内核旁路、零拷贝

1.3 HFT 系统的整体架构概览

一个典型的 HFT 系统,从数据流入到订单发出,大致分为四个阶段。我画了一张图,你可以对照着看。

HFT 系统整体架构 行情接收 网卡 / FPGA 行情解析 信号生成 策略逻辑 FPGA / GPU 订单管理 OMS / 风控 状态机 发送 网卡 数据流方向:行情 → 策略 → 订单 → 交易所 延迟关键点 ① 网卡接收:DMA 拷贝、中断处理 ② 行情解析:协议解码、数据重组 ③ 策略计算:逻辑判断、信号生成 ④ 风控检查:订单校验、资金检查 ⑤ 订单编码:协议封装、序列化 ⑥ 网卡发送:排队、物理传输

这张图展示的是最简化的数据流。实际项目中,每个阶段都有大量细节。

第一阶段:行情接收

行情数据从交易所通过光纤到达你的机房。网卡收到数据后,直接通过 DMA 写入内存,或者直接送到 FPGA 处理。这里的关键是减少拷贝次数。我见过很多团队用标准 Linux 协议栈,结果延迟直接飙到几十微秒——这在 HFT 里是不可接受的。

我的建议:行情接收一定要用内核旁路技术,比如 DPDK 或者直接上 FPGA。别想着用标准 socket,那玩意儿是为通用场景设计的,不是为 HFT 准备的。

第二阶段:信号生成

行情数据解析完成后,需要运行策略逻辑。这里有两种主流方案:

  • FPGA 方案:延迟极低(几十纳秒),但开发周期长,改策略要重新烧录
  • GPU 方案:吞吐量高,但延迟相对较高(微秒级)

我个人更倾向于 FPGA 做核心策略,GPU 做辅助计算。当然,这取决于你的策略类型。

第三阶段:订单管理

信号生成后,需要交给订单管理系统(OMS)。OMS 负责维护订单状态、做风控检查、管理资金。这个阶段最容易出问题。我曾经遇到过因为 OMS 状态机设计有 bug,导致重复下单——那一次亏了六位数。

注意:风控检查必须在订单发送之前完成,而且不能拖慢整体延迟。我见过有人把风控放在 FPGA 里做,延迟只增加了几十纳秒,这才是正确做法。

第四阶段:订单发送

最后一步,把订单编码成交易所协议格式,通过网卡发送出去。这里同样要用内核旁路技术,避免操作系统介入。

1.4 一个典型的延迟分布

为了让你有个直观感受,我列一个实际项目中的延迟分布数据:

阶段 延迟(纳秒) 占比
网卡接收 + DMA 200 20%
行情解析(FPGA) 150 15%
策略计算(FPGA) 300 30%
风控检查 100 10%
订单编码 + 发送 250 25%
总计 1000 100%

你看,整个流程刚好 1 微秒。每个环节都有优化空间,但策略计算占了 30%,往往是瓶颈所在。

1.5 我的一些经验总结

做了这么多年 HFT 系统,我总结了几条铁律:

  1. 硬件是基础,软件是灵魂——再好的 FPGA,代码写得烂也没用
  2. 延迟预算要精确到纳秒——每个环节都要量化,不能靠感觉
  3. 测试环境要和生产环境一致——我曾经在测试环境用普通交换机,结果上线后延迟翻倍
  4. 风控永远不能省——快是好事,但快出问题就是灾难

一句话总结:高频交易不是魔法,是工程。每一纳秒的优化,背后都是对硬件、软件、网络的深刻理解。别想着走捷径,老老实实把每个环节做到极致,你就能跑赢大多数人。


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