个人量化的数据地基:免费数据源盘点与自建数据库指南

引言:量化 = 数据 + 规则 + 执行,数据是最容易塌的地基

个人与机构的差异里我们说过,机构最大的优势之一就是数据。个人买不起卫星图像、信用卡流水,但这不代表个人就只能在”看个K线”的水平上做量化——恰恰相反,免费和低成本的数据源,已经足够支撑一个有竞争力的个人策略,前提是你要把数据这件事当成工程来做,而不是写策略时随手调个接口。

量化的本质是 数据 + 规则 + 执行。规则和执行(程序化)我们在上一篇聊过了。这一篇专讲数据:个人能用哪些免费数据源、它们的边界在哪、怎么把数据沉淀成自己的数据库、以及如何避免数据层的”隐形杀手”——未来函数。

地基歪了,上面盖的策略再漂亮也是幻觉。这一篇就是帮你把地基打直。


一、个人量化的数据需求清单

动手找数据之前,先搞清楚自己需要什么。一个典型的个人多因子选股策略,需要这几类数据:

数据类别 用途 个人获取难度
交易日历 判断是否交易日、回测时间轴 易,免费
股票基础信息 上市/退市日期、所属行业、总股本/流通股本 易,免费
日线/分钟线行情 OHLCV、复权价 易,免费
基本面数据 财报三大表、估值指标(PE/PB/ROE) 易,免费
资金流数据 主力净流入、北向持仓 中,部分免费
龙虎榜/股东增减持 情绪与事件信号 中,需爬虫或接口
舆情/另类数据 搜索指数、新闻情感 难,受限(参考另类因子
Tick/逐笔 高频策略 个人基本用不到,且延迟劣势大

结论先行:日线 + 基本面 + 交易日历 + 基础信息,这四样免费就能拿全,足够做中低频多因子选股。 这正是差异篇里建议个人占领的主场。


二、免费数据源全景盘点

2.1 Tushare:个人量化的主力数据源

Tushare 是目前国内最完整的免费量化数据接口,覆盖行情、基本面、资金流、龙虎榜、财报等。采用积分制:注册即有一定积分,可获取日线、基础信息;积分提升后(通过贡献、活跃等)可解锁分钟线、复权、融资融券等。

优点:接口统一、文档规范、数据质量相对可靠、社区活跃。
局限:高级接口需要积分,免费额度有限;偶有限流;部分历史数据需逐年拉取。
适用:基本面因子、日线行情、估值数据的主力来源。

2.2 AkShare:纯免费、覆盖广的备选

AkShare 是一个纯开源、完全免费的金融数据接口库,聚合了大量公开数据源(东财、新浪、同花顺等)。

优点:零门槛、接口数量极多、覆盖港股/美股/期货/宏观。
局限:稳定性依赖上游网页结构,网页改版时接口易失效;部分接口返回格式不规范,需要自己清洗。
适用:Tushare 积分不够时的补充、资金流/龙虎榜/宏观等边角数据。

2.3 QMT/MiniQMT 行情接口:实盘数据最可靠

如果你已经在用 QMT(迅投)做实盘,它自带的历史行情下载与实时行情接口是最贴近实盘的数据源——因为回测和实盘同源,能避免”回测用一套数据、实盘用另一套”的口径错位。具体用法见QMT 历史行情下载与本地缓存

优点:与实盘同源、复权口径一致、实时行情可直接驱动策略。
局限:需要开通 QMT 账户;主要覆盖行情数据,基本面数据较弱。
适用:实盘策略的行情数据来源、回测与实盘口径对齐。

2.4 网页爬虫:龙虎榜、舆情、另类数据的补充

东方财富、同花顺、雪球等网站有大量免费的结构化数据(龙虎榜、资金流、股吧热度),但需要自己写爬虫。这是另类因子指南里提到的”个人友好另类数据源”。

优点:免费、数据丰富、独占性强(别人懒得爬)。
局限:维护成本高、有合规风险、需处理反爬与限频。
适用:情绪/事件类因子的数据补充,不建议作为行情主数据。


三、数据能力边界:个人能拿到什么、拿不到什么

诚实地说清边界,才知道策略该建在什么地基上:

  • 日线/分钟线行情:充足,Tushare + QMT 双保险,免费足够。
  • Tick/逐笔:QMT 可拿,但个人没有机房,做高频毫无意义,别在这上面浪费精力。
  • 基本面财报:充足,三大表、估值、财务指标免费可拿。
  • 资金流/北向:基本够用,AkShare 和 Tushare 都有,但精度不如付费源。
  • 分析师一致预期:免费源质量差,这是个人相对机构的明显短板,要么不用,要么接受低质量。
  • 另类数据(卫星、供应链、信用卡):个人基本拿不到,这恰恰是机构的主场——差异篇已经讲过,不要在这里硬刚。

一句话:在公开数据战场上,个人和机构的数据差距远比想象中小;真正的差距在另类数据,而那不是个人该去打的仗。


四、自建数据库:存储方案选型

很多新手的数据流是”写策略时实时调接口”,这有三个致命问题:网络慢、容易被限流、回测每次都重拉数据。正确做法是把数据沉淀到本地数据库,策略只读本地。

4.1 存储方案对比

方案 优点 缺点 适用场景
SQLite 单文件、零部署、几十万到几百万行毫无压力、Python 标准库自带 并发写入弱、不适合海量数据 个人量化的首选
CSV/Parquet 简单、可读、Parquet 列式存储读取快 查询不便、需自己管理分片 行情数据的批量存储
MySQL/PostgreSQL 功能强、并发好 部署运维成本高,个人过度设计 不推荐个人起步
DuckDB 列式分析型、SQL 查询、直接读 Parquet/CSV 较新、生态小 数据分析的进阶选择

建议:不要一上来就上 MySQL/Postgres——这是新手最常见的过度设计。起步用 SQLite,行情数据量大后再引入 Parquet + DuckDB 做分析查询,足够陪伴个人量化走很远。

4.2 表结构设计要点

最简版三张表就能起步:

  • 交易日历表trade_dateis_open,驱动所有增量更新与回测时间轴;
  • 日线行情表codetrade_dateopen/high/low/close/volume/amountadj_factor(复权因子单独存);
  • 基本面表codereport_date(报告期)、ann_date(公告日)、各财务字段——注意公告日和报告期必须分开存,这是杜绝未来函数的关键(第六节详讲)。

五、增量更新:让数据每天自动就绪

一个常被忽视的工程细节:不要每次回测都全量重拉历史数据,应该用交易日历驱动增量更新。

落地的正确姿势:

  1. 交易日历驱动:读取本地交易日历,找出”本地最新交易日”之后的所有交易日;
  2. 只拉增量:只下载这几天的日线与基本面更新,避免重复拉取;
  3. 去重对账:写入时按 (code, trade_date) 做主键约束,重复写入自动覆盖;
  4. 盘前自动跑:每个交易日早上用一个定时脚本(cron / 系统计划任务)跑增量更新,收盘后策略直接读本地。

这一步看起来不起眼,但它把”写策略时临时拉数据”变成了”数据随时就绪”——研究效率的差异,往往不在策略本身,而在数据是否随时可用


六、数据清洗的必修课

垃圾进、垃圾出。下面四件事是个人最容易踩的坑。

6.1 复权:前复权 vs 后复权

  • 前复权:以最新价格为基准向前调整,价格连续、适合看图与技术指标,但每次新增数据后历史价格会变。
  • 后复权:以最早价格为基准向后调整,历史价格固定不变,回测推荐用后复权,因为历史数据不会因新增交易日而变化,回测结果可复现。
  • 不复权:除权除息日会产生跳价,直接用于回测会产生虚假收益。

建议:回测统一用后复权,实盘看图用前复权,两者口径要清楚分开。复权因子单独存表,按需计算。

6.2 停牌与缺失

停牌期间没有行情,回测中处理方式直接影响结果:

  • 持仓不动:停牌期间持仓不变、价格不变,复牌后继续——最接近真实。
  • 前向填充:用停牌前价格填充,会制造虚假的平稳期。
  • 直接剔除:会扭曲组合权重。

建议:停牌期间持仓冻结、不产生收益,并在因子计算时把停牌样本剔除,避免”停牌 = 收益0”的假象。

6.3 退市/摘牌与幸存者偏差

只回测”现在还存在的股票”,会把退市的亏损票排除在外,回测收益虚高。这是回测里最阴险的陷阱,因子指南里提过,下一篇回测框架会详细展开。数据层要做的,是把退市股票的完整历史也存下来,不要在入库时就过滤掉。

6.4 数据缺失插值

财务指标偶尔缺失,新手喜欢用 0 或前值填充,这会引入虚假信号。建议:缺失值在因子计算阶段显式标记为 NaN,由策略层决定如何处理,不要在数据层偷偷插值。


七、杜绝未来函数(前视偏差):数据层最致命的陷阱

未来函数是量化回测的头号杀手,而它的根源几乎全在数据层。核心原则只有一句:任何时刻 t,策略只能用到 t 时刻”已经公开”的信息。

7.1 财报数据的报告期 vs 公告日

最常见的未来函数:用某只股票 2025 年一季报数据做 2025 年 4 月 1 日的因子,但一季报可能 4 月 28 日才发布。在 4 月 1 日,这份财报是”未来信息”。

正确做法:

  • 数据库里每条财报记录都必须存 report_date(报告期)和 ann_date(实际公告日);
  • 因子计算时,ann_date 对齐:计算 t 日的因子,只能用 ann_date <= t 的财报;
  • 这就是所谓的 point-in-time(PIT)数据,是机构数据基础设施的核心能力,个人用免费数据也能模拟——前提是 ann_date 字段不能丢。

7.2 其他常见的未来函数

  • 用当日收盘价做当日买入决策:收盘才能知道的价,却当成开盘就买入——回测虚高;
  • 用未来才知道的退市/ST 标记做筛选;
  • 用调整后的财报数据(公司事后修订了历史财报,你用了修订版);
  • 复权因子用了未来信息:后复权因子在新增交易日后会变,如果每次重算会污染历史回测——所以要固定复权快照。

一句话:未来函数不是”会不会用错”的问题,而是”不刻意防御就必然用错”的问题。下一篇文章讲回测框架时会把这条作为第一陷阱展开。


八、数据质量校验:免费数据不是免检数据

免费数据最大的风险是”错了你不知道”。建立简单的校验习惯:

  • 跨源比对:同一段日线行情,Tushare 和 AkShare 对一下收盘价,差异超阈值就人工核查;
  • 异常值检测:涨跌幅超 20%(非涨跌停)、成交量为 0 但有价格、PE 为负等,自动标记待查;
  • 完整性检查:每个交易日应有数据的股票数是否稳定,骤降说明拉取失败;
  • 复权连续性:后复权序列不应出现非除权日的跳价,有跳价说明复权因子错。

这些校验不用做得多复杂,几个 SQL 查询 + 每日告警就够,但能省掉大量”策略表现异常、查了三天才发现是数据错了”的时间。


九、与实盘的数据衔接:同源是理想,同口径是底线

很多个人量化的痛苦来自:回测用 Tushare 数据,实盘用 QMT 行情,两边口径不一致,导致回测预期和实盘表现严重偏离。

  • 理想:回测和实盘同源(都用 QMT 历史行情),口径天然一致;
  • 底线:即使不同源,也要保证复权口径、交易时间、涨跌停/停牌处理逻辑一致
  • 对齐方法:用同一段时间,把 Tushare 和 QMT 的日线拉出来对比,确认 OHLCV 差异可接受;基本面数据口径(如总市值用收盘价 × 总股本)也要对齐。

数据衔接做不好,程序化解决情绪那篇讲的”情绪被隔离”就会变成另一种失望——程序无情绪地执行了一个”回测好看、实盘失真”的策略,亏得稳稳当当。


十、总结:把数据当工程,而非随手调接口

回顾本文的核心:

  1. 需求先行:日线 + 基本面 + 交易日历 + 基础信息,这四样免费就能拿全,足够做中低频多因子选股;
  2. 数据源分层:Tushare 为主、AkShare 补充、QMT 行情贴近实盘、爬虫做另类补充;
  3. 存储起步用 SQLite,不要过度设计上 MySQL;行情量大后再上 Parquet + DuckDB;
  4. 增量更新 + 交易日历驱动,让数据随时就绪,研究效率差异往往在这里;
  5. 清洗四必修:后复权回测、停牌冻结持仓、保留退市股历史、缺失值不偷偷插值;
  6. 未来函数是头号杀手:财报按公告日对齐(point-in-time),收盘价不能用于当日决策,复权因子要固定快照;
  7. 免费数据不免责:跨源比对 + 异常检测 + 完整性校验,几个 SQL 就能省下大量排查时间;
  8. 回测与实盘同口径:理想同源,底线是复权/时间/涨跌停处理一致。

个人量化最容易输的环节,不是策略不够聪明,而是地基歪了,上面的策略越精致塌得越惨。把数据层做扎实,后面写因子、搭回测、上实盘,才有意义。下一篇我们就接着讲回测框架与六大陷阱——数据层踩稳之后,回测层是第二道关。


⚠️ 免责声明

本文仅提供数据工程方法论与工具介绍:

  • 数据接口的可用性与配额可能随时变化,请以各数据源官方说明为准
  • 使用爬虫获取数据需遵守相关网站的服务条款与法律法规
  • 文中内容不构成任何投资建议,因数据错误或使用本文方法造成的任何损失,由使用者自行承担

本文更新于2026年9月7日