数据的获取和存储

Posted on 2016-12-18 in Quant

不同于传统的判断式投资,量化投资(回测/交易)是由数据驱动的,形形色色的数据反映金融市场的不同侧面,我们希望获取尽可能多的不相关或弱相关的数据集以建立信息优势。获取诸多种数据是量化投资的第一步,也是至关重要的环节。基于此,我们就可以进行量化回测(量化回测框架XQuant),模拟交易,直至实盘交易。

本文介绍我最近的开源项目qdata,并将此文作为所有量化数据相关的博文索引。

数据分类

为了研究方便,我将感兴趣的数据大致分为

  • 交易数据:带时间戳戳的bar,或者分笔成交的数据,或者实时bid/ask数据
  • 扩展交易数据:交易数据深度信息,如龙虎榜、融资融券、股东持股变动等
  • 财务数据:公司基本面的数据,如营业额、净利润、现金流、净资产、周转率等
  • 公司归类:公司间关联信息,如行业板块、概念、各类指数等
  • 宏观数据:GDP、利率、广义货币、CPI、工业品出厂价格指数等
  • 新闻研报:滚动新闻、信息地雷及研究员报告等
  • 舆情数据:雪球、微博、搜索引擎等反映市场心理的数据

量化数据非常庞杂,一般通过API接口或者网络爬虫来收集、清洗和存储,涉及urllib/requests,re/bs4,HDF5/SOL,Redis,tushare/pandas等python库及技术,我们在其他适当的地方加以介绍。这里从最基本的交易市场数据开始,逐步扩展。

qdata项目

Github/qdata - 目标:High-level的量化数据获取和存储方案。

qdata架构

  • Version 0.1: 初始化股票日线数据到HDF5文件系统,盘后自动更新行情数据 (2016年12月)
  • Version 0.2: 冗余数据源,股票除权数据的获取,及复权因子的计算 (In Progress)

使用:

# run.py
init_data()  # 初始化存储系统,获取股票上市至今的所有数据
sync_data()  # 更新数据,可以每天运行

若干重要问题:

  1. 为什么优先HDF5存储,而非SOL系?
  2. 回测时,如何处理复权?更新存储时如何处理复权?复权因子如何计算?