量化百科

Quant必备工具箱:量化交易的技术框架

由polll创建,最终由small_q 被浏览 244 用户

2019年,定下一个小目标:做一套Quant的工具箱,一边学,一边做,也一边分享。欢迎小伙伴们前来围观、拍砖。

(tips:文末罗列了所有量化核心技术框架

工具箱将立足于三个领域

  1. 量化开发——以交易后台开发为主
  2. 研究——以机器学习研究框架为主
  3. 交易——以期货和电子货币实盘为主

万水千山总是情,相信总有一款适合投身于量化领域的你。

第一期先听我BB一下量化开发(Developer),先讲总框架,之后再细究各个部分的设计和实现。

向量化回测系统

网络上已经存在了不少的开源回测框架和在线研究平台,他们都提供了完整的回测系统、归因分析,那为什么还需要自建一个回测系统?

因为慢。是的,很简单的一个原因。

那么回测快,很重要吗?重要。

假设一个简单的双均线策略,使用2005年至2018年的数据进行回测。

  • 日线级别,某在线量化平台:60s
  • 分钟线级别,离线向量化回测:0.1s

若将前者换算成分钟级别,二者相差5个数量级(A股每天交易240分钟 * 600倍)。

还不止如此,

  1. 如果策略里包含了3000只股票,每只股票10个标签
  2. 策略里往往都有2-3个参数,若每个参数有10个可取值,那么至少要在样本内回测1000次才能得到一个最优参数组合
  3. 策略不是一试就能出结果,不合适时要调整模型结构和逻辑,那么这个过程反复调整20次并不夸张。

如此算下来,用一整天时间很可能才跑出一个最优参数组合,而且还不能保证样本外效果良好,sad。

反过来,想象一下,如果以上过程仅在20秒内就全部结束,还能轮动回测多个时期,还能输出一份样本外的报告,你可以快速又直观地得知某个因子、或某个策略逻辑的效果,是否体验感会瞬间上升N个数量级呢。

好比机器学习,机器学习为什么比人更强,为什么alphago成为了世界第一的围棋高手,快就是其中的重要原因之一。因为快,所以能不断试错;试错更多,那么就能从中积累更多经验,学到更多知识。

所以速度快,很重要。你的时间就是最珍贵的财富。

技术解决方案:coming soon

技术栈要求: python xarray, empyrical, talib, mongo, hdf5


事件驱动回测系统

通过向量化的回测框架,你得以快速尝试和挖掘,终于回测到了一条不错的策略资金曲线,那么恭喜你,你通过自己的努力和创新发现了潜在的金矿。

但是,这仅仅是迈向圣杯的第一步。

你有没有考虑过:

  1. 订单的撮合。订单并不是发出后就能成交,特别是中高频策略这种尤为看重订单成交率的策略,并不是仅靠添加滑点就能模拟的来的。
  2. 风险控制。总会几个策略失效或者黑天鹅的瞬间,在这个时刻,你能不能检测到浮盈后立刻退出这笔交易,而不是呆呆地等到某根bar跑完了再进行操作呢?
  3. 还有最重要的,如何把策略接入实盘跑起来?

如果没有,那么该向你介绍第二种回测框架了。

流行的回测框架大致分为两种:for-loop(轮询)和event-driven(事件驱动),本质上是在回测速度与实盘模拟这两个特性进行抉择权衡。

刚刚介绍的【向量化回测系统】就属于轮询回测,它速度更快,但不符合实盘交易的流程。而事件驱动则采用逐个bar/tick读取数据,并产生signal/order/trade的方式,利于统一回测和实盘的代码。而这样的回测系统,也很容易改造成一个能进行真实量化交易的系统,这点很重要。

技术解决方案:coming soon

技术栈要求: python, OOP


实时交易系统

策略只有最终上了实盘才有意义。应该没有人会质疑这句话,毕竟只有上实盘产生了PnL,策略才能算是真正落地。

富有的你一定实盘交易过,知道大概的交易流程,而我们的交易系统,就是把整个下单、盯盘的流程自动化。

当然,过程也并没有那么简单。

以数据流为例,讲一下系统从交易所收到一个tick数据,到一个订单最终成交的整个流程:

  1. 程序的套接字捕捉到该tick数据
  2. 解析,并向其他模块进行推送
  3. 策略收到数据,进行信号计算,如触发信号,生成订单
  4. 检查订单风险、有效性等检验
  5. 检验通过后,向交易所发出下单请求
  6. 成功下单(可能因为网络、账户、访问过频等原因而失败),交易所返回订单状态【待成交】
  7. 根据市场情况,可能发出取消订单命令
  8. 订单成交,返回订单状态【成交】,订单取消,返回订单状态【取消】
  9. 策略处理订单状态,结束该笔交易

这个过程涉及的模块包括有:

  1. 策略引擎负责多策略管理
  2. 订单引擎负责管理订单,仓位,风控
  3. 算法引擎负责订单算法(TWAP、VWAP、BLP)
  4. 数据引擎负责持久化及查询
  5. 日志引擎负责记录系统运行状态信息
  6. 交易所连接引擎负责与交易所的信息交互
  7. 控制界面负责信息交互、手动交易调整

不过整个过程,也不完全需要你撸起袖子从细节的一点一点完善。推荐两个开源项目vn.py & backtrader,其中有不少的特性和功能都值得借鉴,感谢作者和社区小伙伴,开源的力量真是伟大。

技术解决方案:coming soon

技术栈要求: python, OOP, 多线程, 设计模式, MVC架构, 敏捷开发


分布式交易服务器

实时交易系统开发完之后,顺利地在生产中运行了几个月,没有宕过,很开心。

但是,随着公司不断地上策略,卡、慢现象开始频发。100个策略,亦或是2000个标的对象,都会让系统无法承载。

你发现了原因:

  1. GIL限制
  2. 动态语言开销大
  3. 单机性能有限

嗯,重构的时间到了。为了横向提高系统吞吐量,纵向提高系统的信息处理速度,该让微服务和集群进入你的视野了。

庆幸自己以往模块化的设计,你发现将模块服务化并不困难。你会:

  1. 用高IO速度的工具编写行情收发服务
  2. 用高吞吐的消息中间件负责系统内信息路由服务
  3. 用高性能的语言编写策略引擎、算法引擎、订单引擎等

技术解决方案:coming soon

技术栈要求: java, rabbitmq, protobuf, disruptor, docker


产品化

服务器成功地部署在云端,公司已经能用它跑起自营策略产生收益了,Congrats!!

那我们马到功成了?

不,还有更高的山等待着去攀爬,那就是产品化。

已知的量化系统产品化的方式:

  1. 自用:承载公司自身策略的运行
  2. 软件销售:部署整套软件供机构本地使用
  3. 云平台服务:开放接口给更多机构、客户使用户
  4. 策略服务:云端策略销售,将策略完全零售化

只有想不到,没有做不到。

\

开发平台

量化交易策略开发平台入口(PC端)

量化投资金融历史数据平台

量化交易因子平台

量化课程学习入口

技术框架

DAI — 金融数据库平台

DAI — SQL数据函数列表

BigAlpha — 因子数据库平台

QuantChat — AI量化开发助手

BigTrader - 交易引擎(HFTrade)

开发资源

FAI - 分布式云计算加速集群

AIFlow - 任务管理

BigCharts - 量化数据可视化

BigCharts - 图表接口

Bigcharts - 配置项

BigBrain - 知识库插件

指标常识

Beta贝塔系数

PE市盈率

PB市净率

ROE净资产收益率

夏普比率SharpeRatio

布林带BOLL

换手率TurnOver

波动率Volatility

相对强弱指数RSI

移动平均线SMA/EMA

基本常识

AI量化交易是什么意思

量化交易到底是怎么赚钱的

散户如何做量化交易

量化交易模型及策略2023版

标签

量化交易量化开发期货交易交易