为什么要构建中央数据仓库

一个业余的量化爱好者,他的数据可能是这样的:东一个CSV,西一个pickle,回测代码里混杂着各种数据获取的逻辑。而一个专业的研究体系,其数据流一定是清晰、统一的。构建中央数据仓库的好处是:

  • 唯一可信源 (Single Source of Truth): 所有策略都从同一个地方获取数据,保证了回测的一致性和可比性。
  • 数据与研究分离: 数据更新、清洗的任务独立出来,策略研究者只需专注于策略逻辑,而不用关心数据是怎么来的。
  • 性能与效率: 对数据存储和查询进行优化,极大提升了回测和研究的效率。
  • 可扩展性: 当需要引入新的数据源或数据类型时,只需扩展数据仓库,而无需改动所有策略代码。

三层架构:一个可行的设计方案

对于个人研究者,我们可以设计一个经典的三层数据仓库架构:

第一层:原始数据层 (Raw Data Layer)

作用: 存储从外部数据源(如 Tushare, yfinance)下载的、未经任何修改的原始数据。
存储格式: Parquet。因为它压缩比高,且能完美保留原始的 schema。
核心原则: 只写一次,永不修改!这一层是所有数据的“备份”,保证了数据的可追溯性。

第二层:核心数据层 (Core Data Layer)

作用: 对原始数据进行清洗、标准化和整合。这是我们最常使用的数据层。
核心工作:统一格式: 将所有数据源的列名统一(如 trade_date, open, close)。数据清洗: 处理缺失值、异常值,进行复权等。数据对齐: 确保不同股票、不同类型的数据在时间上是对齐的。
存储格式: ArcticDB。它的版本控制功能在这里大放异彩!每当你完成一次大的数据清洗或更新,都可以创建一个快照,方便回溯。

第三层:应用/因子层 (Application/Factor Layer)

作用: 在核心数据的基础上,计算并存储各种衍生数据,如技术指标、基本面因子、另类因子等。
核心工作: 计算 MA, RSI, PE, PB, 动量因子, 波动率因子等。
存储格式: 同样推荐 ArcticDB。你可以为不同的因子库(如alpha101, my_factors)创建不同的库(Library)来管理,非常清晰。

自动化调度:

一个成熟的数据仓库,其数据的更新应该是自动化的。你可以使用系统的定时任务(如 Linux 的 Cron)或者专门的工作流工具(如 Airflow),编写脚本来每天定时地从外部API获取数据,并依次更新这三层数据。

从小处着手:

这个三层架构听起来很宏大,但你不必第一天就完美实现它。可以从最简单的开始:只建立第一层和第二层,只包含A股的日线数据。然后随着你需求的增加,再逐步地向其中添加更多的数据类型和因子。