【导读】随着Northstar盈富量化交易平台v5.0的里程碑版本发布,笔者花费了两三年业余时间打造的开源交易系统完成了从零到一的探索。借此可以分享一下本人对量化交易系统的一点粗浅认识。

工欲善其事,必先利其器

笔者从一开始便是量化交易爱好者。笔者对量化交易的初体验源于付费的量化软件。

随着交易实践的深入,每年动辄过万元的软件服务费对于量化入门用户而言,是一项实实在在的负担。除此以外,商业软件在可扩展性方面的限制甚多,导致许多的策略想法无法实现。

由于笔者从事的是软件研发的相关工作,打造开源项目的初衷除了对商业软件现状的不满外,同时也是对工程能力的一种自我挑战。正如古装小说中的武林高手一样,真正的高手都喜欢打造一件自己称手兵器。

Northstar盈富量化交易平台设计的目标正是成为笔者心中的那件可以随心所欲的称手兵器。

因此在设计上,平台的难点在于系统的可扩展性。要让一个系统兼容不同交易所接口,同时也要让一套开发模式兼容不同类型的交易策略。

交易所接口的调研

不同的交易所所采用的通信协议各不相同,但通信模式基本上可以抽象成两种:一种叫应答模式,一种叫订阅推送模式。

所谓应答模式,就像是HTTP请求,每个请求对应一个服务端响应。例如老虎证券的交易接口采用的正是HTTP协议来实现应答模式。然而,HTTP并非是唯一的实现方式,例如国内期货CTP平台接口,就并非采用HTTP协议,而是基于TCP连接的非通用协议。

所谓订阅推送模式,就像websocket协议,客户端与服务端建立连接后,服务端可以主动向客户端推送数据包。例如老虎证券的行情接口采用的便是websocket协议。基于C++的接口可选的方案更多,有的平台使用基于TCP发送,有的平台基于UDP发送。

站在开发者用户的角度,不需要关心传输是是基于TCP还是UDP,也不需要知道数据是用通用协议封装还是自定义协议封装。因为接口的SDK往往已经处理好数据包解析的工作。

不管对接哪个交易所平台的接口,只要理解了以上两种通信模式,就不难理解平台接口的设计逻辑。不同的平台接口,数据结构差异非常大,因此在设计本地交易系统时,防腐层设计的通用性直接影响系统的可扩展性。本文仅对系统的难点与关键点作概括性介绍,关于防腐层更详细的实现方式可参考Northstar项目源码,在此便不作展开。

策略模式的调研

由于笔者本人对量化交易的策略认识有限,且更多是基于期货市场的交易策略。因此在设计交易平台时,只考虑了基于技术指标的交易策略、基于价差的套利对冲策略两种策略模式。而且策略模式也是主要基于个人交易场景。像基金公司对持仓有要求的、基于因子进行调仓换股的策略模式,并不适用。

策略编程模式的选型

综观坊间知名的量化交易平台,不管是商业软件还是开源软件,站在用户的角度看,编程模式无非就两种:一种是基于行情数据的事件驱动型架构,一种是基于策略轮询的循环计算型。Northstar采用的是基于行情数据事件驱动的编程模型,通过行情数据的刷新来驱动策略逻辑的执行。

可灵活接入行情的模拟账户

模拟账户本质上就是模拟交易与模拟结算。有不少商业软件在试用阶段仅允许用户使用模拟账户进行交易,在付费购买后又仅允许用户使用实盘账户进行交易。

在笔者看来,模拟账户对用户而言,是起到UAT环境的作用:即当用户的交易策略编码完毕后,还需要借助模拟账户来在实盘运行一段时间,以用实盘数据来对交易策略进行预生产验证。以CTP为例,不管是SimNow环境还是仿真环境,都无法用真实的行情进行实时行情同步验证。因此量化交易平台自带一个模拟账户,能接入不同的行情进行模拟交易显得尤为重要。

灵活可控的历史回放(回测)

坊间商业软件对策略回测的实现方案通常是针对某个策略进行回测。回测本质上就是历史数据的重放。大部分商业软件不知道是出于哪方面的考虑,都不支持历史回放功能。但在笔者看来,历史回放是一个最自然直观的回测方案,它甚至不需要单独实现一个回测模块。只需要设置好回放时段,配上不同的回放精度和回放速度,便可以对策略进行验证。如果多个策略绑定的是同一个合约,一次回放便可实现多个策略同时回测的效果。若是一个策略绑定了多个合约,只需要选择同时回放多个合约的数据。

可视化设计的思考

不是每个量化交易系统都需要做可视化设计,也完全可以黑箱化运行,仅通过日志文件来记录程序的状态变化过程。只是当系统越来越复杂时,一个可视化界面让用户更易用更高效。比如当策略涉及几十个指标值输出时,一个好的可视化界面会更容易定位问题;同时,可视化界面能对策略研发起到关键作用。

版本迭代的过程

事实上,以上提到的需求分析以及实践方案并非从一开始就想得那么清楚。而是经历了多个版本的迭代与实践,再结合初期用户的反馈意见而最终形成。以下便是各个大版本的演变过程 :

v1.0,仅接通了CTP网关,可进行手工交易与模拟交易,实现了基本的网关管理功能;

v2.0,完成了策略自动化交易;

v3.0,增加了模组管理功能,正式开源项目;

v4.0,优化了策略编程接口,增加了历史回放,增加了技术指标功能以及指标可视化,经过实盘应用检验;

v5.0,优化了可扩展性,引入了老虎证券网关。至此,量化交易平台仅完成了从零到一的搭建,即完成了交易程序化。

未来还要向交易智能化进发,引入更多AI能力。让我们拭目以待!

总结回顾

本文介绍了笔者亲手打造量化交易系统的动机是想打造一件称手的兵器来征战交易市场。通过对可扩展性这一核心需求的调研与分析,结合量化软件的几个核心场景,确定了量化软件要解决的问题域与核心技术点所在。

更详细的代码方案可关注开源项目:https://gitee.com/dromara/northstar

如何从零到一打造量化交易系统相关推荐

  1. 量化交易系统 python源码_零起点TensorFlow与量化交易[PDF+源码][238.77MB]

    内容简介 Python量化回溯.TensorFlow.PyTorch.MXNet深度学习平台以及神经网络模型,都是近年来兴起的前沿科技项目,相关理论.平台.工具目前尚处于摸索阶段. TensorFlo ...

  2. 福利 | 零基础学习Python量化交易 !(深圳)

    文末有数据派独家福利  投资界的人才需求 量化投资在中国已经进入到一个高速发展期.量化人才需求也成为众多金融企业的关注.金融科技企业发现中国目前正面临严重的金融科技专业人才短缺.而量化分析从业者,俗称 ...

  3. 技术风险防控平台:打造金融交易系统的故障免疫能力

    摘要:以"数字金融新原力(The New Force of Digital Finance)"为主题,蚂蚁金服ATEC城市峰会于2019年1月4日上海如期举办.分论坛上,蚂蚁金服高 ...

  4. 搭建系统|为何我坚持要用Python搭建属于自己的股票量化交易系统

    前言 前几期我们搭建了自定义的量化行情/选股/回测框架: 搭建系统|说好了个性化的选股工具!教你定制自己的选股财务数据表? 搭建系统|升级基于财务数据的选股工具!从清单中剔除ST股和次新股 搭建系统| ...

  5. 量化投资python教程_零基础入门Python量化投资全套教程,30+经典教材打包送!暑期get新技能就靠它了!...

    量化投资是指使用数理分析.编程.建模等方式,通过对样本数据进行集中比对处理,找到数据之间的关系,制定量化策略,并使用编写的软件程序来执行交易,从而获得投资回报的方式. 在如今的量化投资领域,已经有了无 ...

  6. 零基础学python免费网课-零基础学Python量化投资,超值线上课程反复回看

    原标题:零基础学Python量化投资,超值线上课程反复回看 超值网络课程 量化投资是一种严谨.系统化的投资方式,相比起传统投资,量化投资风险低回报高,但是它要求投资者使用数据处理分析.计算机编程技术. ...

  7. 交易系统单服务器tps,交易者必看!一文了解TPS量化交易系统

    (远华投资使用TPS量化交易系统6-9月总数据) 交易系统稳定 无论是平台还是交易软件,投资者最看重的就是稳定性,一个稳定的交易系统对于投资者来说是很有优势的,很多投资者在刚开始都没有意识到稳定性对他 ...

  8. 布林通道参数用20还是26_“布林强盗”量化交易系统,它真正厉害的地方是在这里...

    点及财经,股票期货专业投机者. 前言 "布林强盗",作者不是很理解为啥会用"强盗"来形容这个策略,难道这个策略是偷偷摸摸的搞了见不得人的事?O(∩_∩)O哈哈~ ...

  9. 5月份 Github 上最热的十个 Python 项目,从Debug工具到AI水军、量化交易系统。

    2019 年第 46 篇,总第 70 篇文章 原文地址:https://medium.mybridge.co/python-open-source-for-the-past-month-v-may-2 ...

最新文章

  1. 智能提示导致Visual Studio 2010崩溃问题
  2. [Redis]Redis章2 Redis 持久化
  3. Windows Phone 的控件倾斜效果
  4. java类型比较_Java数据类型的比较
  5. VS与Matlab混合编译 - mexw64 (C++版)
  6. Android学习指南
  7. 泛型那点儿事儿 泛型概述 简单样例代码
  8. golang 线程 Java线程_Java线程只能有上千个,而Go的Goroutine能有上百万个
  9. 003《区块链开发指南》一一1.2 区块和区块链 转
  10. listview 加载的时候报java.lang.IllegalArgumentException: column ‘_id’ does not exist 错误
  11. nginx自签ssl证书
  12. Tensorflow 2.0 : FCNN
  13. 双系统——彻底删除ubuntu
  14. 关于列表的一些操作函数
  15. iOS转向Flutter学习日记
  16. Java接口练习(组装电脑)
  17. 2021年美赛解题思路汇总Final!!!
  18. 将数组转换为JSON数据
  19. 【Bioconductor系列】利用Bioconductor包进行基因组变异位点注释
  20. maven springboot 除去指定的jar包_Spring Boot打包瘦身 Docker 使用全过程 动态配置、日志记录配置...

热门文章

  1. 药企常用计算机化系统,GMP附录《计算机化系统》法规解读之“对制药企业的影响”...
  2. Linux libvirt目录,在Linux系统上使用Vagrant和Libvirt的方法
  3. 封箱机行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  4. Ubuntu18 安装Kinect驱动(openni、NITE、Sensor)及遇到的问题
  5. 从星巴克看:NFT不仅仅是一种数字资产,更代表着一种全新的交互模式
  6. matlab绘制图形中图像标注
  7. ZBrush 4R8用起来了!
  8. Chapter4 Jordan 神经网络
  9. 工作组计算机主机放开权限,不能进入工作组计算机的解决方法(亲测可行)
  10. 采用matlab实现二维码识别_“吉事办”升级2.0版采用人脸识别技术实现注册、登录一步到位...