大家好, 从编程小白到量化宗师之路的第三部课程《高频交易系统C++编写》现在已经完成了。


课程链接:
https://edu.csdn.net/course/detail/24668



在这部课程中, 我们从无到有的实现了一个支持单机运行,也能支持跨网络,跨互联网多机分布式运行的高频交易系统

我们的第一个初级的方案是,采用内存映射文件来进行跨进程,为此, 我们从零开始,进行了mmap的文件读写,进行了mmap文件的读写的测试,改造成库以后,我们也为这个库编写了测试代码, 用来检测是不是能够正确的跨进程读写,当然, 这部分测试代码,也同时可以进行性能的测量。

单机的多进程交易机制,是为了更灵活的进行策略管理,比如添加策略,停止策略,都不用影响其他策略的运行。
在我们的这个方案中每个部件各自占用一个cpu核心,每一个行情接口,交易接口,每一个策略,都是独占一个cpu核心,以达到最大性能。单机的性能可以进行深度挖掘,最快可以达到纳秒级的通讯消耗。

而随着业务的运行,我们需要不停地添加的更多策略, 而cpu的核心总数是受限的, 不可能无限制添加,导致对机器的容量需求超过了单机的大支持能力,所以我们添加了第二套方案, 微服务架构。

我们使用go语言开发了一个注册中心,来进行网关注册,我们开发了C++的注册中心客户端,便于现有的功能部件,都能使用这个注册网关,部件之间通过判断是不是在同一个机器上,来进行判断,是使用内存映射文件mmap方式和还是使用远程网络的方式通讯。

通过采用mmap机制,我们实现了单机多进程的部署模式,通过采用微服务架构,我们又把这种多进程部署模式,扩展到了不同的机器上,这样我们可以利用分布在远程互联网上的机器进行行情信息收集,进行交易处理,进行策略运行。

这样,即解决了单机性能容量不够的问题,可以保证了我们的策略可以无限制的增加。但有个坏处,那就是性能出现了下降,所以在部署上, 需要进行一番斟酌,看看谁和谁应该在哪个机房,应该在同一台机器上。

只要能接受,就可以。有的时候,业务已经庞大到了必须接受慢一点交易,慢下来的时候,策略也要做一些调整,策略也要有一些适应能力。

因为有了分布式,我们可以在上海,郑州,大连的机房进行远程行情引擎和交易引擎的部署,我们可以在美国机房进行远程下单,我们可以使用不同账户,我们可以在不同的机房,不同的地区,不同的交易所同时下单。

使用这样一种设计,又在无形之中,增加了策略的安全性---没有办法能够知道我们的策略逻辑, 因为我们的下单账户都是不一样的,我们下单的账户不是同一个家交易所,下单的机器不再同一个机房, 不属于同一家互联网提供商,不在同一个城市,不在同一个省区。

如果放到国际化的虚拟货币交易上,我们已经做到了下单的机器都不在同一个国家!

而整个升级的过程中,整个从单机到分布式的过程,最方便的就是---对策略来说,是感知不到的,你可以说策略完全不知道已经从单机环境变化到了多机器分布式环境了,策略不知道具体的md,td 是在哪个国家,在哪个省,在哪个城市,哪个运营商的机房,在哪台服务器上运行,它只要能够和行情引擎,和交易引擎进行通信,就能保证交易策略的运行。


在这个课程中,我们一开始是采用期货交易的CTP接口进行了demo的开发,我们先是开发出了一个 tick数据收集器。
并且能够部署到window和linux平台,根据不同的品台特征,我们分别添加了window和linux的计划任务,能够保证每天的期货tick数据收集进程的开启和关闭,我们还使用python开发了tick数据的收集整理程序,能够把tick数据按品种整理成不同的文件。
这些文件,我们后续会用来进行交易策略的研究,进行模式识别,数据分析,从这些真实记录的交易数据里面,寻找新的策略,寻找金矿,这也是我们的后续课程的内容之一。

我们把tick收集器的代码,逐渐导入到了我们的交易系统里面,让ctp的行情引擎称为了我们交易系统的第一个实现的部分。
在行情引擎的基础上,我们后续开发了CTP Trade交易引擎,完成md,td后, 我们实现了我们的第一个demo策略。
我们用demo策略,演示了多期货账户的,分布在不同机器上的交易。

完成基础功能后,我们对交易系统进行了架构升级, 从单机进化到了微服务多机分布式。
中间花了数个艰辛的日夜,在初步完成了多机分布式的系统测试以后, 我们又添加了两个接口,飞马接口,和中泰证券的XTP股票交易接口,通过对这两个接口的代码实现和代码讲解,我们展示了这个交易系统的强大可扩展能力,和便捷的可扩展性。

之后,我们遵守最少改写原则,实现了一个回测框架,通过读取我们收集的tick信息,我们开发了模拟的撮合机制,分别实现了市价单,限价单和FAK,FOK 的单子的处理。

我们实现了回测和实盘一体化系统。

然后,我们一路升级,为交易系统添加了虚拟货币的交易支持---主要就是虚拟货币交易接口的 restful和websocket支持能力。
我们从无到有的写了restful和websocket的测试代码。

然后参考binance的官方文档,实现了第一个虚拟货币行情接口,实现了虚拟货币的数据收集,然后,我们马不停蹄,实现了binance的交易引擎,再往后, 我们又实现了bitfinex的行情接口和交易接口。

最后我们尝试实现两个十分适合虚拟货币交易的策略,跨交易所套利---搬砖,和三角套利以及跨交易所三角套利。

至此,我们高频交易系统的编写这部课程暂时告一段落。

接下来, 我们将继续使用我们的这个交易系统,实现的完善的交易策略,并且,通过回测系统进行新的策略的实现。

敬请期待。

课程链接:
https://edu.csdn.net/course/detail/24668