一、项目全景与硬件选型:FPGA在量化交易中的角色
做量化交易的朋友,很多一开始都卡在「延迟」这个坎上。软件层面再怎么优化,从网卡到CPU再到内存,几十微秒的延迟就摆在那里。这时候FPGA就登场了。
说白了,FPGA就是一块可以重新配置的芯片。你把它想成一块「白板」,想画什么电路就画什么电路。在交易场景里,我们用它来直接处理网络数据包、解析行情、甚至执行交易逻辑。整个过程不需要操作系统,没有中断,没有上下文切换——嗯,这就是它快的原因。
我个人习惯把FPGA在量化交易中的角色分成三层:
- 第一层:数据接收与解析——直接从网卡拿到原始以太网包,解析出UDP/TCP内容,再提取行情数据。这一层FPGA比CPU快一个数量级。
- 第二层:行情预处理——做订单簿维护、价格计算、指标生成。这里FPGA的并行能力就体现出来了,你可以同时处理多个品种的行情。
- 第三层:交易决策与执行——根据预设策略生成订单,直接发送到交易所。这一层对延迟要求最苛刻,FPGA能做到纳秒级响应。
我在项目中遇到过不少团队,一上来就想用FPGA做全链路交易。其实没必要。我建议先从第一层做起,把行情解析这部分搞定,效果立竿见影。
核心观点:FPGA不是替代CPU,而是做CPU做不好的事——低延迟、确定性、并行处理。
1.1 项目整体架构
一个典型的FPGA量化交易系统,架构上大概长这样:
这个架构图我画了很多遍。你注意看,数据是从左到右、从上到下流动的。每一层都只做一件事,层与层之间用FIFO或者AXI-Stream连接。这样做的好处是——你想改哪一层,不影响其他层。
举个例子,你换了交易所,只需要改第一层的解析逻辑,后面的订单簿和策略代码完全不用动。我在项目中吃过亏,一开始把所有逻辑写在一个大模块里,后来改一个协议,整个工程重写。嗯,从那以后我再也不这么干了。
1.2 主流FPGA开发板对比
选开发板这件事,我踩过不少坑。市面上主流的就两家:Xilinx(现在叫AMD)和Altera(现在叫Intel)。
| 对比维度 | Xilinx(AMD) | Altera(Intel) |
|---|---|---|
| 代表芯片 | Kintex-7 / Virtex-7 / Zynq | Cyclone V / Arria 10 / Stratix 10 |
| 开发工具 | Vivado(功能强,但吃内存) | Quartus(相对轻量) |
| IP核生态 | 丰富,尤其是高速接口IP | 也不错,但文档不如Xilinx详细 |
| 社区资源 | 多,教程、论坛、开源项目都多 | 相对少一些 |
| 典型开发板 | KC705 / VC707 / ZC706 | DE10-Nano / Arria 10 GX |
| 价格范围 | 中高端板卡 2000-10000美元 | 入门级几百美元,高端也上万 |
| 量化交易适用性 | 非常广泛,多数交易团队用Xilinx | 也有,但相对小众 |
我个人习惯用Xilinx的芯片。为什么?不是因为它比Altera好多少,而是因为做量化交易的人大多用Xilinx,你遇到问题更容易找到人问。说白了,生态很重要。
小提示:如果你是第一次接触FPGA做交易,我建议从Xilinx的Kintex-7系列开始。性价比高,性能够用,资料也多。别一上来就买Virtex,贵不说,很多功能你用不上。
1.3 硬件选型考量因素
选硬件这件事,我总结了五个关键点。你照着这个思路来,基本不会出大错。
1.3.1 逻辑资源(LUT/FF/DSP)
逻辑资源决定了你能在FPGA里塞多少东西。做行情解析,一般几万个LUT就够了。但如果你要做复杂的策略逻辑,比如机器学习模型,那可能需要几十万LUT。我建议留出30%的余量——别问我为什么,问就是吃过亏。
1.3.2 高速收发器(SerDes)
这是FPGA跟外界通信的通道。做量化交易,你至少需要支持10G以太网。现在主流芯片都支持到25G甚至更高。注意看收发器的数量——如果你要同时接多个交易所,每个交易所需要一对收发器。
1.3.3 内存资源(BRAM/URAM)
订单簿需要存数据,策略需要存参数。BRAM是FPGA内部的内存,速度快但容量小。URAM是Xilinx新出的,容量更大。我一般建议BRAM不少于5MB,否则做订单簿会很吃力。
1.3.4 时钟与PLL
交易系统对时钟要求很高。你需要稳定的时钟源,以及足够的PLL来生成不同频率的时钟。我曾经遇到过时钟抖动导致数据采样出错的问题,排查了两天才找到原因。从那以后,我对时钟这部分特别敏感。
1.3.5 开发板外设
除了芯片本身,开发板上的外设也很重要:
- PCIe接口:如果你要把FPGA插在服务器里,需要PCIe Gen3 x8以上
- QSFP/SFP+接口:接网线或光模块用的,至少两个
- DDR内存:板载DDR4,用于缓存大量数据
- 调试接口:JTAG、UART,调试必备
避坑指南:我曾经买过一块开发板,芯片性能很强,但只有一个QSFP接口。后来要接两个交易所,只能再加一块板子,成本翻倍。所以选型时,接口数量一定要留够。
1.4 我的选型建议
如果你是个人开发者或者小团队,预算有限,我建议这样选:
- 入门级:Xilinx Zynq-7020(比如ZedBoard),价格1000元左右,适合学习和原型验证
- 进阶级:Xilinx Kintex-7 KC705,价格5000元左右,性能足够做真实交易
- 专业级:Xilinx Virtex-7 VC707,价格1万以上,适合高频交易场景
如果你问我个人偏好,我现在主力用的是KC705。性价比高,性能够用,而且社区资源丰富。遇到问题,在论坛上发个帖子,基本当天就能得到回复。
嗯,硬件选型这部分就聊到这里。记住一句话:选FPGA不是选最贵的,而是选最适合你当前场景的。先跑起来,再优化。
总结:FPGA在量化交易中的核心价值是低延迟和确定性。选型时重点关注逻辑资源、高速收发器、内存和接口数量。Xilinx生态更适合量化交易场景,Kintex-7是性价比之选。