以下内容来自知乎链接:
https://zhuanlan.zhihu.com/p/571485296
作者:海滨 已获得作者同意转载。
这篇文章希望能让大家了解到标准的量化交易软件有那些及各自特点,开源的轮子有哪些及各自特点,选择自研一套专属量化交易系统软件大概要做那些事(功能)。以便大家如果要从事量化交易时知道从哪里开始,如何从零开始。
一、已有的轮子
1、互联网研究平台
聚宽、米筐、优矿等。应该是2015年前后新起的一波,当时京东也开发了:京东量化,但如果你打开国外的Quantopian(已关闭)就不会觉的这属于什么创新了,刚刚开始时,国内这几家提供的界面风格和功能都差不多,这块看着很美好,可以以策略为主体形成“量化生态券”或“量化社区”,但不管是软件使用的目标群体,还是对平台的运营,其实都是不够的。所以京东量化后面就关闭了。聚宽、米筐逐渐形成了自己的品牌,开始得到市场上的认可,也通过坚持形成了比较成熟的产品。当然从商业机会来说,仍然未取得规模性的效益(PS:不管是量化平台的运营收益,还是为甲方提供软件产品,还是为甲方建设自主量化平台,还是做相关领域的软件开发和销售。)。近两年,以打通量化最后一公里为核心的掘金量化、bigquant等平台也开始崭露头角,登上了量化的舞台,获得了同仁的认可。
2、证券公司量化平台
国信iquant,中信建设证券量化平台,广发证券GF Quant Genius等。这些平台一般是基于供应商合作开发,或者自研为主。其中基本的功能特点如下图。因为有了上面的互联网平台,所以证券公司再建设类似的量化平台就要突出特色和能够有持续运营的内容,才有可能吸引客户,否则这样的平台就基本上没有什么价值。目前来看,没有看到哪家券商在这块有非常成功的案例。
3、证券公司提供的专业交易系统(或称量化交易系统)
上篇文章中有写过,这篇再展开说下:【恒生Ptrade】、【迅投QMT】。
1)【恒生Ptrade】
先看概述。
PTrade (Personalise Trade)交易系统是一款高净值和机构投资者专业投资软件,为用户提供普通交易、篮子交易、日内回转交易、算法交易、量化投研/回测/实盘等各种交易工具,满足用户的各种交易需求和交易场景,帮助用户提高交易效率。支持程序化策略交易、日内回转交易、普通交易、策略模型交易等功能场景。
围绕PTrade提到的目标客户,我们进一步说明:
目标用户 | 目标场景 |
---|---|
个人用户 | 1)希望交易速度快 2)人工做T0、抢涨停、网格等交易工具 3)资金量比较大,单笔交易或批量交易时使用算法交易 4)无编程能力 |
私募机构 | 1)主动选股Alpha策略 2)篮子交易、套利交易、预埋单等交易工具。 3)使用系统内置的个性化策略 4)无IT人员 |
孵化类量化(机构、宽客) | 1)有IT技术团队,不具备产品能够零开发系统的能力。 2)需要策略研究、策略回测、仿真交易、实盘交易。 3)具有金融工程团队及人员。 |
非目标客户:
非目标用户 | 目标场景 |
---|---|
专业量化机构 | 1)有强大的技术团队 2)有强大的金融工程团队 3)自己可以写策略交易系统 |
系统拥有丰富的个性化交易工具支持智能算法,特色工具:ETF趋势交易、策略交易、网格交易、期权组合交易、期权无风险套利、期权风险管理、篮子交易、批量埋单、追涨停、抢单交易、多账号交易(同客户股票+两融+期权)、盘口扫单等,条件单:支持价格埋单、时间埋单、止盈止损埋单、拐点交易等。其中详细说明如下:
1)ETF 趋势交易工具:程序监控 ETF 与其成份股的 IOPV,帮助用户自动寻找套利机会,并配合精心设计的页面布局,大幅度提升交易效率,提高套利交易成功率。(PS:如果是有ETF量化交易需求的,证券公司也会采购wind汇宏的ETF套利软件。)
2)策略交易工具:策略交易提供定时埋单、价格埋单、移动止盈、涨跌幅策略等功能。帮助用户在特定时间,特定条件下快速完成交易,锁定利润,控制损失。
3)算法交易:通过交易算法执行人订单,减少市场冲击成本。目前支持的算法有TWAP. VWAP、POV、IS、ICEBERG、ADAPTIVE_TWAP、ADAPTIVE_VWAP 等。
4)网格交易:根据行情的波动,程序自动进行高抛低吸操作,达到盈利或者降低持仓成本的目的。系统支持图形化网格交易参数设置,拥有多种加减仓方式(平均触发、马丁格尔、金字塔、倒金字塔等),支持止损止盈及交易风险控制。
5)篮子交易:允许用户通过新建一篮子股票或者导入 ETF 成份股进行批量下单,并且可以监控篮子委托的进度,查看篮子个股信息,个股委托情况等。
6)算法单交易:程序实时将客户的交易计划导入系统进行交易,非常适合配合客户的研究平台进行自动化交易。
7)抢单交易工具:根据用户设置的个股涨幅条件,自动监控全市场所有股票。当个股涨幅达到设置后,程序自动将该股票筛选出来,用户根据情况选择个股进行快捷下单等操作。ptrade 抢单交易工具目前只支持对 A 股涨跌幅的监控,不支持对港股、基金、债券等涨跌幅的监控。
8)大股东减持仓工具:在大股东增减持的场景下,通过设置个股的买卖方向、监控个股的成交数量,严格约束大股东日常的增减持行为,防止因为违规增减持造成的损失。
9)可转债套利工具:自动监控可转债的转股价值、溢价率等指标,让用户对可转债的套利价值一目了然。并对转股期内的可转债进行一键买入加转股操作,大大提高交易效率。
10)追涨停相关工具:通过监控个股的涨停时间与封单数量,进行追涨停操作,根据封板后的成交量、封单量等因素判断是否为真正涨停并决定是否撤销追入的委托。
11)拐点交易工具:根据用户的设置,自动监测股票行情拐点并触发交易,帮助用户在行情出现反转时立刻进行交易,最快速锁定利润。
12)多账号交易工具:多账号交易工具可以同时操作一个或多个证券账号进行普通股票的证券交易。在工具下设立账号组,组内添加一个或多个证券账号,登录后进行普通股票买卖交易。
13)盘口扫单工具:盘口扫单工具主要功能是当市场可能出现行情反转或方向明确的时候,投资者通过设置扫单策略关键参数,对目标股票按照盘口比例分批买入。
14)交易快手工具:支持用户配置个性化设置,以进行快速买入和卖出。交易快手的界面包括买入面板、卖出面板、简易设置、关联同一代码、查询界面五个部分。
系统界面如下:
个人使用下来有如下几点偏颇体会:
系统界面风格:延续了恒生PB系统风格,如Oplus,恒投PB等,所以如果之前使用过这两款软件,应该很容易上手。
系统性能上:在使用过程中,客户端相对运行比较稳定,但如果同时开启十几个tab子页面,则会出现偶尔卡死情况。也是恒生O32的差不多的传统情况,只能说无伤大雅。
系统功能上:一级功能分为行情、交易、工具、量化、日内等。行情功能,一般不管软件做的多好,我想做量化交易的同学一般不会使用的。交易菜单下是按交易品种分类的人工下单功能。工具菜单下就是上述列举的一些人工操作的交易工具,工具虽然很多,但真正想玩量化的人,看到这些功能第一反应就是感觉很:鸡肋。当然不是说功能设计的不好,而是作为标准工具后,人人都可以用了,那也就缺少了自己的个性化思路了,比如大家都用ptrade的追涨停去玩,那谁又能追到呢?所以说工具很好,但要看谁会用,才会觉的好;量化菜单下,提供的就是集策略编写、回测、仿真为一体的个性化策略交易功能(PS:会在另外一篇详细展开策略交易系统的具体功能,这里不做赘述。)。如果是要写代码实现自己灵活投资策略的,则就可以使用此功能,前提是了解PTrade的量化功能的策略编写框架及接口说明。
支持的业务品种:沿用了恒生O32,恒生PB的业务基因,基本能做到全市场、全业务、全品种。包括:股票买卖、回购业务、新股申购、转股回售、质押出入库、ETF、上证LOF、基金申赎、盘后固定价交易、港股通、大宗交易、固收业务、上海协议回购、深圳协议回购、融资融券、股票期权、期货等
小结下:如果是想写代码玩量化的,则【量化】功能可以会用的到;如果不会写代码,则【工具】下的:网格交易、智能交易(算法交易)、ETF套利、期现套利、追涨停这些标准功能交易;如果是机构,有一些特殊的交易场景,比如股东减持,也可以使用股东减持工具等;如果专业的量化交易玩家,那基本上不匹配。
2)【迅投QMT】
先看概述。
迅投 QMT 极速策略交易系统是一款专门针对券商、期货公司、信托等机构的高净值客户开发设计的集行情显示,投资研究,产品交易于一身,并自备完整风控系统的综合性平台。其自带的行情显示系统可以灵活显示沪深两市所有类型股票、债券和国内五大期货交易所所有合约的实时行情;自带投研量化平台可以灵活实现 CTA,无风险套利等多种量化策略,并能够对策略进行回测检验和自动化交易;支持股票交易、期货交易、融资融券交易、组合交易等多种交易类型,可以实现对冲下单,组合下单,以及高度灵活的算法交易,并支持对多个资金账号进行批量化的管理;多层次并行风控的处理方式,可以对单一帐号、多个帐号分别同时进行不同规则的风控检查,大幅降低交易延迟、提高风控执行效率。同时,迅投 QMT 极速策略交易系统还支持完整数据导入导出,便捷的云配置等诸多功能。
目标用户是:面向存在专业量化投研及交易需求,重视策略安全性、交易风控等:投资机构者、量化爱好者、活跃型交易客户、高净值客户、初级研究人员、平滑承接社区型量化平台无法满足的高端客户等。针对不同类型客户提供分层服务。
私募自主管理型:满足私募机构自主发行产品的交易和风控管理需求;提供日内T+0交易策略。
量化交易客户(专业投资者):为专业投资者提供行情展示、策略投研、极速交易、算法交易、期现对冲交易、网格交易策略、日内T+0交易等专业交易工具。支持专业客户的扩展功能应用。
个人高净值客户:解决个人高净值客户的多账户交易、篮子交易、算法交易、条件选股、行情盯盘等诸多需求;支持客户需求的定制化开发。
活跃交易客户:使用至诚版交易系统或翼启航APP进行日常资金的中、低频操作即可。
系统从功能上主要包括5大模块:行情系统、数据系统、策略系统、交易系统、风控系统。其中详细说明如下:
01 行情系统
具备灵活自定义界面,可自由展示多窗口、多市场、多品种、多周期行情,界面流畅不卡顿
运用国内唯一超高压缩全市场五档行情全推技术,为客户端提供最及时行情,篮子交易快人一步
支持精细到TICK级的,历史数据展示、盘口回放
02 数据系统
拥有庞大且专业的团队完成数据清洗
提供全市场多品种历史中高频数据
提供专业数据因子
便捷管理本地已有的数据
03 策略系统
支持VBA、Python和C++开发策略,提供纯本地编写和回测环境,策略安全无忧
支持可视化模型回测结果逐K线分析 - 图形化的交互界面让投研更高效
支持股票、期货、期权、两融等业务的策略自动交易
基于C++底层架构优势,回测速度大大超越同类系统
04 交易系统
采用无工作流模式,直接报单到柜台
全内存交易,单笔延时小于1ms
同一系统内实现股票、期货、期权等多品种交易
支持多账号交易、普通交易、组合交易、对冲交易、一键调仓等多种专业交易工具
内置迅投标准算法交易,高效承接大单交易,隐藏交易行为,减少市场冲击
05风控系统
全内存并行风控,大幅降低交易延迟、提高风控执行效率
内置交易范围、交易量价、交易合规、资产组合、异常交易检测等事前、事中、事后全面风控功能
可以对单一帐号、账号组分别同时进行不同规则的风控检查,满足合规要求
个人对QMT使用的偏颇体会如下:
界面风格:沿用了迅投PB,界面简介大方,聚焦交易本身,无多余华而不实的功能。
客户端稳定性和性能:使用中基本上无卡顿,下单后,成交回报响应快。
回测速度:相比其他客户端要快很多。(按官方说是使用了python加速器技术。)
策略框架:比较容易上手。
3)两者比较
比较是相对而言的,只是想说明下这2个代表产品的特点,不进行好与不好的对比。通过比较我们可以看到,两套系统在功能上既有趋同的地方,也有差异化的地方,所以有的券商同时提供两套系统,也不是豪横,而是不同的用户的确会更适合用其中某一个。这既有客观的产品功能特色,也有对恒生、迅投产品主观的品牌认可程度。
比较项 | 恒生PTrade | 迅投QMT |
---|---|---|
界面风格 | 美观友好 | 简洁、简单 |
客户端稳定性及性能 | 良 | 优 |
策略功能 | 数据、函数、因子库、策略编写、策略回测、回测分析、仿真交易、实盘交易 | 指标、策略编写、策略回测、回测分析、实盘交易。 |
策略语言 | python | python/vba |
策略执行 | 服务器端执行,速度快 | 本地执行,交易机不能关闭 |
策略回测分析 | 有 | 有 |
交易工具 | 全 | 一般 |
业务品种 | 全 | 一般 |
风控功能 | 有 | 有 |
第3方python库支持 | 不可导入 | 可导入 |
内置Jupyter研究环境 | 暂无 | 有 |
3、开源平台
开源平台越来越多,我们就以比较靠前的几个为例:功夫,VN.PY(陈晓优)、backtrader做下比较(不一定比较的很全面客观)。
项 | VNPY | 功夫 | backtrader |
---|---|---|---|
开发语言 | python | c++ | python |
技术特性 | 事件驱动引擎 | 共享内存 | 元编程(类class) |
客户端 | pyQT | Electron | 无 |
时延 | 高(相对) | 低(相对) | 中(相对) |
学习曲线 | 中 | 难 | 较难 |
文档 | 完善 | 一般 | 完善 |
培训 | 有 | 无 | 无 |
内置策略示例 | 完善 | 无 | 无 |
柜台对接 | 完善 | 无 | 无 |
模拟仿真 | 具有 | 无 | 无 |
更新维护度 | 高(目前) | 一般(目前) | 一般(目前) |
tick级别回测 | 支持 | 无 | 不支持 |
外围数据源接口 | 支持 | 无 | 不支持 |
虽然有以上三种,甚至更多的新的开源系统出现,但如果是有实力的机构,则一般要自己来搭建,因为对某一个开源系统都需要从头掌握也需要很大的投入,而如果不掌握,当实盘出现BUG时,就是很大的坑了。所以如果是以学习为目的的用一用,或者是少量资金的个人交易,则没问题,如果是要构建成体系的交易系统,还是要能自主全面掌握和开发,这些开源的系统可以用来做借鉴,或者使用自己能完全可控的轮子。
二、本地化的量化投研系统搭建
不管基于什么考虑,假设上面的轮子都不适合自己,并且自己有能力和资源来从零构建一套专属的量化投研一体化系统,那也不是什么难事。
这套系统大体上可分为量化研究、策略和交易执行三部分。概述如下图:
![3b5cab60d497b5ba7985955880f5ecf1.png](https://i-blog.csdnimg.cn/blog_migrate/51eac12aaedc86398ccf1211b682af55.png)
其中具体模块设计的相关功能点如下(不一定面面俱到,仅供参考,如有出入,欢迎指正。):
1)数据
实时行情:
现货(股票、债券、基金)
level1
level2
10档
逐笔委托
逐笔成交
委托队列
期货
1档
5档
技术支撑:
实时行情处理引擎,确保从行情源接收,到广播给消费端延时最低。
实时行情计算引擎,根据策略逻辑按实时行情计算并给出交易信号。
历史行情:
股票
level2 Tick历史行情
level2 Bar(30/60/...)历史行情
level2 历史逐笔成交
level2 历史逐笔委托
level2 历史委托队列
level1日行情(收盘行情,日K)
复权因子(计算前复权,后复权。)
期货
1档
5档
技术支撑:
历史数据的存储及归档:容量可能上TB。
历史数据回测加载:回测时确保回测速度。
历史数据的清洗及质量校验:确保回测有效性。
历史数据的回放:可选择回放倍速。
市场及基本数据:
交易日历:A股,港股、期货交易所
证券信息(股票、基金、债券的基本信息,如证券代码、证券名称、交易所等)
行业(申万、证监会、wind,且只是行业分类,不到个股)、
行业股票:每个股票及所属某个行业类型下的具体行业数据
指数(指数及成分股)
涨跌停股票池
ST股票池
基本面数据:
三张表:资产负债表、现金流量表、利润表)
主要财务指标
衍生财务指标
基本指标:总市值、日换手率、总股本、流通股等。
另类数据:
销售平台:淘宝、京东等销售平台数据。
热搜指数:微信、百度等热搜指数数据。
舆情数据:行业、个股舆情数据
行业景气度等。
接口
有了上述数据后,需要提供访问数据的API接口及说明文档。
2)策略
策略管理:
策略列表:
展示策略信息,并提供操作功能入口。
策略任务列表:
展示执行的策略信息,并提供操作功能入口。
策略编写:
提供策略编写框架
提供策略编写IDE环境,并按照不同开发语言,语法高亮
提供策略编译功能
技术支撑:目前有的做法是直接内置了Visual StudioCode。
编程语言:一般为python,但也可以是c++/java,如果担心python带来的效率,可以使用:pybind11。
策略回测:
回测设置:
回测区间
基准
初始资金
费用类型
费率
保证金(期货)
滑点类型
滑点
最大成交比例
回测引擎:
加载用户设定的回测区间的历史行情并按回测调仓规则完成模拟成交。要求速度。不然的话,时间都浪费在回测结果等待上了。
回测分析:
回测收益:
展示年化收益、单位净值、信息比率、夏普比率、波动率、最大回撤率等回测业绩风险指标。
委托记录:
回测产生的委托记录
成交记录:
回测产生的成交记录
历史持仓:
回测产生的持仓记录。
策略仿真:
指按照日行情对策略进行模拟验证。当然有的策略,从逻辑上来说,未必需要仿真模拟。模拟仿真的目的可能是为了在实盘前验证技术功能的正确性及交易通道的联通性。
策略实盘:
上实盘后,就是策略的运行结果监控了。如果是一次交易完成的策略,可能交易完成后,生命周期就结束了,如果是通过行情信号触发的,则可能处于运行态,直到信号触发后执行逻辑。
3)仿真
参考文章:海滨:量化投资:股票及期货仿真交易模拟撮合规则6 赞同 · 0 评论文章
4)风控
这是一个做交易系统很大的话题,后面会在交易系统设计相关文章中整体展开说。这篇文章中已量化交易为主题涉及到风控主要会有两个出发点:一个是自己的交易系统如果在券商反采的时候,券商会要求交易系统具有风控管理功能;一个是自身的投资交易过程中确实需要做一些风控管理。其中主要的指标大概如下,控制层次的话可以是单账号控制,也可以是产品层面的多账号汇总统计。看具体情况而定。
指标 | 环节 | 类型 | 指标信息 |
---|---|---|---|
账户之间反向交易 | 事前 | 禁止 | 不同账户同一证券标的之间不发生相互成交 |
账户内自成交 | 事前 | 禁止 | 同一账户同一证券标的之间不发生相互成交 |
股票池黑名单 | 事前 | 禁止 | 设置禁止投资的证券列表,列表内的证券不得进行主动买入或申购 |
交易撤单比 | 事中 | 禁止/监控 | 账户当日交易撤单比超过阈值后不得新增委托,撤单比=撤单笔数/(总委托笔数-撤单笔数-废单笔数)*100% |
每秒下单笔数 | 事中 | 禁止/监控 | 账户的每秒委托笔数超过阈值后不得新增委托 |
总委托笔数 | 事中 | 禁止/监控 | 账户当日总委托笔数超过阈值后不得新增委托(含撤单) |
废单比 | 事中 | 禁止/监控 | 账户当日废单比超过阈值后不得新增委托,废单比=废单委托笔数/(总委托笔数-撤单笔数)*100% |
委托成交比 | 事中 | 禁止/监控 | 账户当日委托成交比超过阈值后不得新增委托,委托成交比=除逆回购以外的成交金额/(当日除逆回购以外的总委托金额-当日买卖委托撤单金额-当日买卖委托废单金额)*100% |
证券净买入额 | 事中 | 禁止/监控 | 当日证券净买入金额不超过设置阈值,证券净买入金额=当日累计买入成交金额-当日累计卖出成交金额 |
证券买入/卖出总额度 | 事中 | 禁止/监控 | 当日证券买入/卖出总金额不超过设置阈值 |
证券交易额度(元) | 事中 | 禁止/监控 | 每日委托报单金额不超过设定阀值。 |
委托价格偏离度 | 事中 | 禁止/监控 | 不超过: 买入:(委托价格-最新价)/最新价 卖出:(最新价-委托价格)/最新价 |
5)交易
品种:
指系统要支持的交易品种及业务类型。这里只列举一个大概。因为量化交易一般聚焦的还是:股票买卖和期货交易。只是方便开发同学对这块工作有一个基本的概念。
现货
股票:普通买卖、新股申购、配股、分红派息等。
基金:认购、申购、赎回、分红、买卖等。
债券(含可转债):申购、买卖、兑付兑息、转换等。
逆回购:一般很少做正回购(涉及到质押)
期货
股指期货:中金所。
商品期货:大商所、郑商所、上期所、能源交易中心。
融资融券:量化投资时有时也会用到,按需。
期权:按需。
报盘
现货:做对接具体证券柜台的网关,比如中泰证券XTP,恒生UFT等,可使用开源的轮子按自己系统改造。
期货:做CTP网关。使用开源轮子即可。
记账
多策略单元记账:
如果一个资金账号下跑多个子策略,则需要分清楚每个子策略对应的资金,和持仓。以便进行相关的统计分析。
资金账号记账:
因之前工作中是做直连报盘的,所以提到交易系统,最核心的就是讨论:资金账号层面的资金、持仓头寸如何高效并准确的控制。后面做PB系统,比较有积累的当然是在PB系统中会好好设计这个逻辑,如果是偷懒的,则一般就不管了,交给对接的上游系统(资管系统,或柜台)来验资验券了。
6)算法
最早:在执行大资金,大订单时一般采用采用简单的“扫盘策略”,比如按照固定或随机的时间步长,买卖固定或随机的股票数量。这种报单在L2行情下会被对手方看的一览无余。
现在:提到算法,肯定是大名鼎鼎的卡方软件了。做算法交易这块的厂商也越来越多,但这块是拼刺刀的东西,好与不好,不是按软件产品功能来定义的,而是要看哪家的算法能带来更高的超额收益。
所以:这块是选择自己造轮子,还是使用已有的成熟且得到市场验证的算法,完全看个人决策。
7)分析
策略回测分析
如上介绍。
产品(组合)分析
产品基本信息
展示产品总资产、净资产、单位净值、总收益率;
收益率图形化展示,可选择比较基准
产品资产统计
按持仓中的大类资产类别展示每个类别资产数据及图像化展示;
按持仓所在的行业展示资产类别;
支持按:券商、产品、资金账户3个维度查询;
点击资产类别,穿透到具体持仓;
产品持仓统计
前10大持仓股;
前10大持仓行业排名;
前10大盈亏排名
个股分析
个股汇总统计
以管理人为维度,穿透统计前N大持仓;
点击持仓汇总后,可查看到每个产品上的持仓数量,和持仓占比
个股交易分析:
个股持仓收益(绝对金额变化);
组合收益贡献(绝对金额变化/总资金)
持仓数量走势;
择时收益,今日持仓收益-原始持仓收益,原始持仓收益为隔夜持仓*今日个股收益,不需要今日是否有买卖。
择时收益贡献(择时收益/总资金)
个股交易分析增强
买卖时点参考;
买卖均价参考;
买卖信号值;
至此,如果你是想从事量化交易,不知道从何开头的话,看这篇文章大概会有一个粗略的了解了。