FPGA技术在金融行业的应用——以沪深行情加速为例

论坛 期权论坛 期权     
真格量化   2019-10-15 08:45   5488   0
FPGA(Field Programmable Gate Array)是在PAL、GAL等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。




FPGA由于其可编程特性,可以被用于实现任意的逻辑功能,FPGA的每一个时钟周期可以并行处理多个指令。由于FPGA可以被设计为专门处理某个(或某些)算法,所以即使其支持的时钟频率低于CPU,但单个时钟周期可以完成的运算可以远大于一个CPU指令可以完成的运算量,甚至整个算法都可能在几个时钟周期之内完成,所以完成整个算法FPGA所需的时钟周期数可以远低于CPU。






在证券交易领域,行情数据瞬息万变,盈利的机会转瞬即逝,拥有更低的时延、更快的响应,意味着能精准把握买卖机会和点位。现场可编程门阵列(“FPGA”)技术与传统软件系统相比,能实现可预知的超低时延,该技术已在模型计算、高频交易等领域大放异彩。

本文主要介绍如何基于FPGA技术实现沪深行情硬件加速,涵盖了系统的设计及实现、系统的实测效果及系统预留的强大扩展性等内容,希望能有助于国内证券行业对FPGA技术的研究和应用,为开发者提供简单的相关技术参考。




一、概述


1.1 低交易时延的挑战



  在证券交易领域,盈利的机会转瞬即逝,“更低交易延迟”是所有金融交易追求的核心目标之一。目前国内金融行业的交易系统大部分基于传统通用CPU架构,交易提速存在瓶颈,满足不了超低时延的交易需求。而随着 FinTech(金融科技)的发展,各种算法交易、量化交易兴起,金融行业追求更低交易延迟时间的“竞赛”不断升级,成为各大金融机构的核心挑战之一。尤其是近年来程序化交易在资本市场的全面应用,传统的软件技术或以软件为核心的加速技术难以满足微秒级的实时处理和实时响应的要求。业内均在寻求搭建低时延交易系统的解决方案,基于GPU、FPGA硬件并行加速的技术逐渐进入证券交易领域,成为金融科技领域新的趋势,是华尔街的主流技术之一。

  降低交易延迟简单来说就是如何实现金融数据加速。FPGA具有硬件可编程、低功耗、低时延的特性。基于RTL(Register Transfer Level:寄存器传输级)级的逻辑编程,可定制化各类通讯协议(如TCP/IP协议栈卸载)、各种消息编解码(如上交所的FAST协议解码)及系统各种颗粒度的操作,实现数据的并行和流水的并行,达到极低的系统时延和极高的系统容量。

1.2FPGA技术在沪深行情系统的应用

  近年来,随着国内金融市场的快速发展和规模不断扩大,业内信息系统往高性能、高可靠、高容量、低时延的方向发展。众多金融技术公司,相继推出基于FPGA的产品,尤其在期货行业,使用FPGA开展各类应用的开发,如行情、交易、风控等领域,已经取得了许多成果,为FPGA在证券行业的应用开发提供参考。

架构的选型


FPGA架构近年来历经Net-FPGA、OpenCL+RTL异构、RTL+软件异构等,目前基于金融商用系统的稳定性、系统可扩展性、健壮性的充分考虑,选定RTL+软件的异构架构。

为何选择FPGA技术落地行情加速  


通过对沪深行情从交易所前置机VDE/MDGW至行情应用客户端的时延路径进行分析(见下图),当前业内大多数厂商采用软件进行行情解码,提供行情服务。



这些行情解码服务时延明显,可能超过10毫秒,且行情解码软件数据处理能力有限,牛市行情压力下,实时性难以得到保证。而通过FPGA技术对沪深Level-2行情加速解码,可以最终实现低至纳秒级的沪市STEP-FAST解码引擎,在理想测试环境下端到端的处理时延降低到数十微秒(含网络时延)级别,得到明显的提速效果。


二、FPGA技术在沪深行情加速的设计与实现


2.1 基于FPGA的异构架构设计

  根据业务及扩展需求,对基础硬件选型指导如下:

  (1)10GE万兆以太网接口,行情源、TCP行情推送、组播行情推送采用独立的接口。

  (2)可定制化的TOE IP,支持TCP、UDP、IGMP、ICMP、ARP、RARP全卸载,且TCP连接数支持至少32个。

  (3)PCIe Gen3X8,且兼容Gen1/2/3。

  (4)至少两个Bank DDR,内存容量不少于8GB。


  (5)至少两个Bank QDR。


传统TCP /IP 协议是基于CPU( Central Processing Unit,中央处理器) 软件实现的,而使用CPU 进行TCP /IP 协议栈处理,存在能力不强、效率不高的缺点,占用大量的CPU资源,浪费存储空间及产生大量功耗,使其性价比很低,影响性能,万兆以太网的的带宽资源得不到充分的利用。故所选的板卡使用万兆以太网口作为其信息传输接口,支持TCP /IP 协议栈的TOE IP是关键之一。通过FPGA 来实现TCP /IP 协议栈以及以太网MAC 控制器,将原本属于主CPU 的这部分工作由额外的硬件电路完成,减轻CPU 的负担,加速网络处理的能力,提升系统的性能。系统的可扩展性是系统设计的重点之一。由下往上分为五个逻辑层次,包括FPGA基础通信层、FPGA行情业务层、行情管理层、Host-FPGA接口层和Host管理服务层,层次之间设计开发边界明确,上层依赖下层模块,调用下层或同层模块的接口,上下层之间功能充分解耦,如下图示。

其中FPGA基础通信实现独立的通信功能,提供清晰的功能边界和明确的开发接口。在Host侧与FPGA侧可通过C++方式的API进行直接调用。


2.2  Level-2行情解码引擎

  上海证券交易所信息网络公司(简称“上交所”)于2016年建设新一代的低时延行情发布系统LDDS,支持多种信源,具有低时延、大流量、易扩展、高可用等特点,系统在较优的网络环境中平均时延小于1ms。该Level-2行情系统是基于FAST技术标准、面向专业投资者的新一代实时行情发布系统。与传统的基本行情相比,Level-2行情更加实时,包含更多的价位深度、逐笔成交、订单等内容和其他有价值的信息。下面以上交所的Level-2行情为例,阐述行情解码引擎的实现。

  上交所的LDDS以国际标准的金融信息交换协议(FIX/FAST)为基础,结合中国标准的证券交易数据交换协议(STEP)的特点确定数据传输协议,根据我国证券市场数据的特点以及Level-2行情内容的特性设计在证券市场数据领域具有独创性的算法。FAST协议在保持FIX协议灵活性的基础上,将市场数据大幅度压缩,大大提高了处理速度。FAST系统大幅减少Level-2行情所需的传输带宽(不到原来的25%)和发布系统的负荷(减少到原来的10%)  


鉴于上交所FAST协议的复杂性,同时根据RTL的特性,设计出一套并行、全流水式的高效STEP-FAST解码引擎方案,如下图所示,不同行情类型解码并行处理,根据实际应用增加引擎数量,达到更高的数据解码吞吐率。同时做到FAST的XML模板可配,以应对交易所的变更。



— — — — — — E N D — — — — — —



真格量化可访问:
https://quant.pobo.net.cn


真格量化微信公众号,长按关注:

遇到了技术问题?欢迎加入真格量化Python技术交流QQ群  726895887






往期文章:
Numpy处理tick级别数据技巧
真正赚钱的期权策略曲线是这样的
多品种历史波动率计算
如何实现全市场自动盯盘
AI是怎样看懂研报的
真格量化策略debug秘籍
真格量化对接实盘交易
常见高频交易策略简介

如何用撤单函数改进套利成交

Deque提高处理队列效率

策略编程选Python还是C++

如何用Python继承机制节约代码量

十大机器学习算法
如何调用策略附件数据

如何使用智能单

如何扫描全市场跨月价差

如何筛选策略最适合的品种

活用订单类型规避频繁撤单风险

真格量化回测撮合机制简介

如何调用外部数据

如何处理回测与实盘差别

如何利用趋势必然终结获利

常见量化策略介绍

期权交易“七宗罪”

波动率交易介绍

推高波动率的因素

波动率的预测之道

趋势交易面临挑战
如何构建知识图谱
机器学习就是现代统计学

AI技术在金融行业的应用

如何避免模型过拟合

低延迟交易介绍

架构设计中的编程范式

交易所视角下的套利指令撮合

距离概念与特征识别

气象风险与天气衍生品

设计量化策略的七个“大坑”

云计算在金融行业的应用

机器学习模型评估方法
真格量化制作期权HV-IV价差
另类数据介绍

TensorFlow中的Tensor是什么?

机器学习的经验之谈

用yfinance调用雅虎财经数据

容器技术如何改进交易系统
Python调用C++
如何选择数据库代理
统计套利揭秘

[h1]一个Call搅动市场?让我们温习一下波动率策略[/h1][h1]如何用真格量化设计持仓排名跟踪策略[/h1][h1]还不理解真格量化API设计?我们不妨参考一下CTP平台[/h1][h1]理解同步、异步、阻塞与非阻塞[/h1][h1]隐波相关系数和偏度——高维风险的守望者[/h1]Delta中性还不够?——看看如何设计Gamma中性期权策略

[h1]Python的多线程和多进程——从一个爬虫任务谈起[/h1]线程与进程的区别
皮尔逊相关系数与历史K线匹配

Python2和Python3的兼容写法
Python代码优化技巧

理解Python的上下文管理器

如何写出更好的Python代码?这是Python软件基金会的建议
评估程序化模型时我们容易忽视的指标

看看如何定位Python程序性能瓶颈

什么是Python的GIL

投资研究中的大数据分析趋势及应用

理解CTP中的回调函数

如何围绕隐含波动率设计期权交易策略                    
看看如何用Python进行英文文本的情感分析
算法交易的分类

Python编码的最佳实践总结

什么是波动率锥?如何用波动率锥设计期权策略?
期权的波动率策略与时间价值收集策略对比

期权用于套期保值和无风险套利

隐含波动率对期权策略的影响

卖出期权交易的风险管理原则和技巧
期权交易中的“大头针”风险
期权做市商策略简介

精细化您的交易——交易成本评估与交易执行策略
海外市场交易执行策略的实践
设计期权套期保值方案时应注意的问题
美式期权、欧式期权比较分析——定价与风险管理
构建您的AI时代武器库——常用的机器学习相关Python库
期权波动率“微笑曲线”之谜
运算任务愈发繁重,如何加速Python程序运行?
证券市场微观结构理论模型是什么

是瞬间成交还是漫长等待?——如何衡量市场流动性
波动率指数及其衍生品介绍

Python的异常处理技巧

Python中的阻塞、异步与协程

"香草"之外的更多选择——几种常见的路径依赖奇异期权
什么是CTP?——了解上期所CTP快速交易系统
了解季节性——以谷物和油籽为例
是前因还是后果?——在真格量化中进行格兰杰因果检验

Python导入模块的技巧
Python程序员常犯的十个错误

搜索数据泄露天机?——舆情指数与期货行情关联性分析思路

机器学习常见算法分类汇总

如何使用Data Pipeline 自动化数据处理工作?
CTP API的委托介绍和在真格量化中的订单流控制
高频交易对市场的影响
期货行情及其组织形式——以上期所为例
理解并行与并发
郑商所和大商所套利指令及在真格量化的实现
机器学习用于金融市场预测面临的挑战
高频交易中风险控制的常用措施
查询结果偏离预期?来了解CTP的报单函数及委托状态查询
Python中的ftplib模块

理解真格量化的Python编程范式
需要处理大量市场数据?来了解一下MySQL、HBase、ES的特点和应用场景

NumPy中的ndarray与Pandas的Series和DataFrame之间的区别与转换
Python中的scikit-learn机器学习功能库
什么是程序设计中的高内聚、低耦合?
Python的内存管理与垃圾回收机制
云服务中的容器技术
什么是“面向对象”程序设计-以Python为例
波动率介绍及其在资产定价中的应用
发现策略中的孪生兄弟——期权交易中的等价或相似策略解析

如何利用期权改进指数投资表现——借鉴海外市场经验
如何用期权进行“哑铃型”资产配置——“90/10”策略介绍
国外著名商品指数编制方法比较










分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:870
帖子:180
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP