2. 金融市场基础与数据源

量化因子研究的起点是理解交易品种与获取高质量数据。本章将系统梳理股票、期货、ETF 等常见标的的核心特征,解析 K 线、财务与另类数据的结构,并对比国内主流数据提供商(Wind、Tushare、AKShare)的适用场景。

2.1 常见交易品种

不同交易品种在交易规则、数据频率、因子逻辑上存在显著差异。下表列出三类核心品种的关键属性:

品种 交易场所 交易时间 T+0 / T+1 最小变动单位 典型因子方向
股票 上交所、深交所、北交所 9:30-11:30 / 13:00-15:00 T+1 0.01 元 动量、价值、质量、低波
期货 中金所、上期所、大商所、郑商所 日盘 + 夜盘(品种各异) T+0 合约规格决定 期限结构、动量、持仓量
ETF 沪深交易所 同股票 T+1(部分跨境 T+0) 0.001 元 行业轮动、折溢价、资金流
实战提示:期货的夜盘数据对隔夜跳空因子影响显著,处理时需将夜盘与次日日盘合并为完整交易日。股票因子回测必须考虑涨跌停板与停复牌对价格序列的干扰。

2.2 三类核心数据结构

2.2.1 K 线数据(高频/日频)

K 线是量化因子最基础的输入。标准 OHLCV 结构包含:

  • Open(开盘价)—— 当日第一笔成交价
  • High(最高价)—— 当日最高成交价
  • Low(最低价)—— 当日最低成交价
  • Close(收盘价)—— 当日最后一笔成交价(含集合竞价)
  • Volume(成交量)—— 当日总成交股数/手数
  • Amount(成交额)—— 当日总成交金额

分钟级 K 线用于高频因子(如分钟反转、成交量分布),日频 K 线用于传统截面因子(如动量、波动率)。

2.2.2 财务数据(季度/年度)

财务数据是基本面因子的核心原料。关键字段包括:

类别 常用字段 因子应用
利润表 营业收入、净利润、扣非净利润 盈利因子(ROE、ROA)
资产负债表 总资产、净资产、负债合计 杠杆因子、市净率
现金流量表 经营活动现金流净额 现金流质量因子
估值衍生 PE、PB、PS、PCF 价值因子
数据对齐陷阱:财务数据发布存在滞后(年报截止次年4月底,季报截止季后1个月)。因子计算时必须使用“可获取时间戳”,避免未来函数。建议使用财报发布日期而非报告期。

2.2.3 另类数据

另类数据是近年因子挖掘的热点方向,常见类型包括:

  • 舆情数据:新闻情感、社交媒体热度、分析师研报标题
  • 产业链数据:上游价格、中游开工率、下游出货量
  • 高频微观数据:逐笔委托、Level-2 行情、订单簿不平衡
  • 卫星/物流数据:停车场车流、集装箱吞吐量、航班轨迹

2.3 常见数据提供商对比

国内量化研究者主要依赖以下三类数据源。下表从数据范围、更新频率、成本、编程接口四个维度进行对比:

提供商 数据范围 更新频率 成本 编程接口 适合场景
Wind 全品种(股/债/期/基/衍生品) 实时 + 日终 高(机构年费) WindPy(Python)、COM、Excel 机构投研、组合管理
Tushare 股票、基金、期货、指数 日频为主,部分分钟 积分制(免费+付费) tushare(Python SDK) 个人研究、因子回测
AKShare 股票、期货、外汇、宏观、另类 日频 + 实时(部分接口) 免费开源 akshare(Python 库) 快速原型、教学、小规模策略
选型建议:机构团队优先 Wind(数据质量与客服支持最好);个人研究者推荐 Tushare Pro(性价比高);教学与快速验证场景使用 AKShare(零成本、接口丰富)。多数据源交叉验证是避免数据错误的行业最佳实践。

2.4 数据获取流程架构

下图展示从数据源到因子计算的标准数据管道:

量化因子数据管道架构 数据源 Wind / Tushare / AKShare 原始数据 K线 / 财务 / 另类 数据清洗 去重 / 对齐 / 填充 因子计算 截面 / 时序 / 复合 因子库 标准化 / 存储 / 版本 回测与分析 IC / 分层 / 组合 数据质量决定因子上限 建议在清洗层完成:缺失值处理、复权调整、异常值截断、时间戳对齐

2.5 数据获取代码示例

以下展示使用 AKShare 获取 A 股日频 K 线数据的典型代码:

import akshare as ak
import pandas as pd

# 获取平安银行(000001)日频 K 线
stock_zh_a_hist_df = ak.stock_zh_a_hist(
    symbol="000001",
    period="daily",
    start_date="20230101",
    end_date="20231231",
    adjust="qfq"  # 前复权
)

# 查看数据结构
print(stock_zh_a_hist_df.head())

# 输出列名
print(stock_zh_a_hist_df.columns.tolist())
# ['日期', '开盘', '收盘', '最高', '最低', '成交量', '成交额', '振幅', '涨跌幅', '涨跌额', '换手率']
数据频率选择:日频数据适合周度/月度调仓的因子(如价值、质量);分钟级数据适合高频因子(如日内动量、成交量分布)。初学者建议从日频数据开始,降低数据清洗复杂度。

2.6 数据质量检查清单

在因子计算前,务必完成以下数据质量检查:

  1. 缺失值检查:检查 OHLCV 是否存在 NaN,尤其是停牌日与节假日
  2. 复权处理:股票必须使用前复权或后复权数据,消除分红送股对价格序列的跳跃
  3. 异常值检测:检查涨跌幅是否超过涨跌停板限制(A股主板 ±10%,科创板/创业板 ±20%)
  4. 时间戳对齐:确保不同数据源的时间戳格式一致(推荐使用 datetime 类型)
  5. 代码映射:统一股票代码格式(如 000001.SZ 与 000001 的转换)
行业经验:数据清洗通常占因子研究总工作量的 60% 以上。建议建立自动化数据校验流水线,每次获取新数据后自动生成质量报告(缺失率、异常值数量、时间跨度覆盖度)。