博客
【求职分享】
【笔试/面试】
一文读懂:高频交易系统的设计与实现(上)
Feb 02,2023
分享本文:
大家好, 我是Lucy@FinTech社区。今天这篇文章将带领大家了解高频交易系统的设计与实现。欢迎大家扫码二维码添加微信,加入FinTech社区,提认知,攒人脉,求职招聘!
高频交易是指从那些人们无法利用的极为短暂的市场变化中寻求获利的计算机化交易。
比如,某种证券买入价和卖出价差价的微小变化,或者某只股票在不同交易所之间的微小价差。
这种交易的速度如此之快,以至于有些交易机构将自己的“服务器群组”(server farms) 安置到了离交易所的计算机很近的地方,以缩短交易指令到达交易所的距离。
那么什么是高频交易系统?如何实现一个高频交易系统?这篇文章将会告诉你答案!
01 高频交易系统现状
按照字面意思,任何能够以较高频率进行交易的系统都可以叫“高频交易系统”。
比如说用任何一个编程语言写个小程序,连上期货交易所提供的接口,也完全可以按毫秒级进行交易,也可以说自己开发了一个“高频交易系统”。
不过,按照现在市面上的主流认知,我想大多数人概念里的高频交易系统应该是这样的:
-
交易指令完全由电脑发送,对市场数据的响应延时在微秒级,有的甚至是纳秒级;
-
系统由专用的软、硬件组成;
-
系统的硬件需要放在离交易所主机很近的位置上,所谓 co-location。
其实高频交易是自动化交易的一种形式,以速度见长,它利用复杂的计算机技术和系统,以毫秒级的速度执行交易,它是一种那些人们无法利用的极为短暂的市场变化中寻求获利的计算机交易。
高频交易的两大核心要素:
-
其一是产生高频交易信号的交易策略;
-
其二是优化交易执行过程的算法。
这两大核心要素都对高频交易平台的运算速度提出了极高的要求。
1.1 主流高频交易系统
目前市面上主流的交易系统有:文华财经、MultiCharts、Tradeblazer等等。
这些产品为了考虑到所有的专业和非专业人士的需求,往往会有较为傻瓜化的操作方式。使用者不需要了解很多计算机的知识,只需要学会使用简单的编程语言 (多为Python) 再加上一些点按和选择操作,就可以实现大部分自己的策略。
有些产品甚至不需要编写策略代码,可以直接使用一种特定格式的计算公式进行组合,就能构造出自己的策略。
下图所示为高频交易系统的主要特征:
但是,为什么比较专业的团队还是不喜欢用这些产品呢?因为这些产品功能虽然丰富,但是对于一些资深团队来说不够专业。
1.2 为何要自研高频交易系统?
上述这些产品大都是定制一门现有语言作为自己的策略实现语言,且是对Python进行了定制后作为策略开发的语言。
Python语言由于其本身的特点,并不支持多线程技术,所以整个策略几乎以一种同步 (Synchronous) 的方式在执行,无法高效利用异步 (Asynchronous) 的方式达到对网络、磁盘IO等信息的最快速处理。
可以想象,如果使用python作为开发语言实现了一个交易系统,那么当一个最佳报价来了的时候你的程序还阻塞在向磁盘写日志的过程中不能自拔,从而错过了一个最佳入场机会,是不是会造成一些损失呢?
02 高频交易系统的设计与实现
2.1 高频交易系统的特点
高频系统是一种非常有特点的计算机应用。在输入和输出层面,数据比较简单。
输入用的都是市场行情数据,用的是Tick级别,甚至是更细颗粒度,比如用order book上数据。
输出就是报单到交易所,执行层面上频率会比较高,有可能会大量、频繁地向交易所报单。系统运行时处理的信号源是交易所播报的实时行情,要求用最快的速度对信号进行拆解、计算和输出,对于系统的实时计算能力的要求也比较高。
同时,一般高频交易系统从逻辑的层面上来说是比较简单的。
高频交易为了避免日间价格风险,一般不会留隔夜仓位,每天收盘之前都会对没有成交的委托单和没有平仓的仓位进行处理。
这样,在每天的交易开盘启动系统的时候,我们都会认为是从系统干净的状态启动的,到了收盘之后又回归干净的状态。
2.2 编程语言的选择
目前,高频交易系统最主流的是C/C++语言。
这是一种优点及其很显著的语言。相比依赖虚拟机的JAVA和Python而言,C/C++是一种非常接近底层硬件的开发语言,对硬件操控的控制度、灵活度都超过其他语言,在性能上的把控力会更强。
但是,其语法相当复杂,比较难学,没有受过系统编程训练的开发者,掌握起来比较困难。
同时,使用C/C++编程也可以获得及其优越的性能,这对于高频交易系统来说,就非常重要了!并且,国内大多数的交易所提供的都是C++级别的类库,只有用C++进行开发,才能方便进行系统对接。
下图为C++开发技能树:
好了,到此为止,设计一个高频交易系统的准备工作就都做好了。
那么如何实现高频交易系统的软硬件部分呢?我们下期分享!
对C++有兴趣的,添加微信:fintech78, 加入C++微信群交流!