本文从“量化数据存储”和“因子计算引擎”两大模块介绍量化数据中台的技术架构。
所有的技术架构,以满足实际应用要求为目标,所以本文所设计的技术架构以满足“量化交易实用性”为目的,不追求技术上的极致性能!!!
一、量化数据存储
1.量化交易的基础数据类型
1.1 行情数据
包含level-2(逐笔成交、逐笔委托、十档盘口、委托队列)、level-1(五档盘口、最新价)、分钟K线、日K线、周K线、月K线等.
1.2 资讯数据
财务数据(资产负债表、现金流量表、利润表、业绩预告等)、股东数据、龙虎榜数据、板块成分股、行业成分股、除权除息数据等
1.3 另类数据
产业链数据、舆情数据、宏观数据等;
2.数据存储的技术架构
为保障数据的一致性和准确性,配合量化因子的计算技术框架,数据存储分为服务端和客户端。
2.1 服务端实现主备切换、数据落库、数据清洗、高速读写等功能;
2.1.1 行情数据使用时序数据库clickhouse
选型原因如下:
行情数据是时序数据,所以需时序数据库,目前开源的、免费的、支持多核、支持分布式,只有clickhouse较为免费、简单、实用。
kdb国外用的比较多,但是太贵,且易用性较差;
influxDB的集群版本,太贵;
dolphinDB的集群版本也收费;
clickhouse优势:
-
数据底层以列式存储
-
利用单节点的多核并行处理
-
为数据建立索引一级、二级、稀疏索引
-
使用大量的算法处理数据
-
支持向量化处理
-
预先设计运算模型-预先计算
-
分布式处理数据
2.1.2 资讯数据和另类数据,选用非关系型数据MongoDB,从数据结构和性能上比MySQL关系型数据库都更合适
2.2 客户端
客户端需要从服务端拉取数据并完成因子计算,技术选型需“因子计算性能”与“因子计算易用性”整体考虑,最终方案选用HDF5文件格式。
选型原因如下:
(1)读取数据的性能
相比较与各类数据库、CSV、excel等格式,HDF5读取到内存为Dataframe格式性能最快。测试很多次了的结论了,但测试数据没保留,就不赘述了;
(2)与因子计算的相适应
因子计算全部都需改为dataframe或numpy格式之后,再计算,hdf5适用性比较好。
二、因子计算引擎
为满足因子计算的实时性和巨大数据量的要求,设计分布式计算引擎的技术框架;
使用Celery构建适用于分布式因子计算框架;
Celery是Python开发的简单、灵活可靠的、处理大量消息的分布式任务调度模块,专注于实时处理的异步任务队列。
(1)消息中间件
broker 提交的任务函数都放在这里,消息中间件使用rabbitmq;
(2)任务执行单元
worker,是真正执行任务的的地方, 每个进程中执行函数;
(3)结果存储
backend, 函数return的结果都存储在这里, 借助于redis 数据库;
数据存储的客户端有N台服务器,每台服务器的CPU有M个核心,故总计有N*M个 worker;每个worker中执行不用股票的相同因子计算函数(包含模型计算逻辑和数据缓存功能);
worker计算完成因子,celery自动将计算结果存储到redis中,策略从redis中实时读取因子计算结果产生交易信号,或计算得出的因子历史数据存储到clickhouse中;