2. 金融时间序列数据基础:数据频率、对齐与清洗

做量化策略,说白了就是跟数据打交道。我见过不少新手,模型写得花里胡哨,结果数据源没处理好,回测曲线漂亮得像假的一样——嗯,它确实是假的。今天咱们就聊聊金融时间序列里最基础、也最容易踩坑的几个点。

2.1 数据频率:日线 vs 分钟线

金融数据按时间粒度分,最常见的就是日线和分钟线。我个人习惯把日线叫做“低频数据”,分钟线叫“高频数据”。但别被名字骗了,高频不一定更好。

日线数据,就是每天一根K线。包含开盘价、收盘价、最高价、最低价、成交量。优点是干净、容易获取、回测速度快。缺点是信息量少,你没法捕捉盘中的波动。

分钟线数据,常见的有1分钟、5分钟、30分钟。我做过一个日内策略,用的就是5分钟线。当时觉得粒度越细越好,结果回测跑出来全是手续费。

核心区别:

  • 日线适合中长线策略(持仓几天到几个月)
  • 分钟线适合短线策略(持仓几分钟到几小时)
  • 频率越高,噪声越大,对数据质量要求也越高

举个例子。你如果用日线做预测,模型看到的是“今天涨了,明天会不会涨”。如果用分钟线,模型看到的是“这5分钟涨了,下5分钟会不会涨”。后者显然更难,因为市场微观结构里的噪音太多了。

我的建议:刚开始做深度学习择时,先从日线入手。等模型稳定了,再考虑降频到分钟级。别一上来就挑战地狱难度。

2.2 数据对齐:一个容易被忽视的坑

数据对齐,听起来很简单对吧?就是把不同时间点的数据对上。但实际操作中,我踩过不少坑。

比如你同时用A股和港股的数据。A股下午3点收盘,港股下午4点收盘。如果你直接把两个市场的收盘价放在同一行,那这行数据里的“收盘价”其实对应的是不同时间点。模型学到的相关性,很可能是假的。

对齐的核心原则:确保同一行数据对应的是同一个时间戳。

具体做法有两种:

  • 向前对齐(forward fill):用上一个有效值填充缺失的时间点。适合日线数据。
  • 向后对齐(backward fill):用下一个有效值填充。适合某些事件驱动的数据。

我曾经做过一个跨市场套利策略,就是因为数据没对齐,回测年化收益30%,实盘直接亏了两个月。后来发现是美股和A股的时间戳差了12个小时。你说冤不冤?

注意:对齐时一定要考虑时区、节假日、交易时间差异。别以为所有市场都是9:30开盘。

2.3 数据清洗:脏数据比没数据更可怕

金融数据里常见的“脏”情况:

  • 缺失值:某一天没有交易数据
  • 异常值:价格突然跳空,或者成交量异常放大
  • 重复值:同一时间戳出现多条记录
  • 错误值:比如收盘价写成负数(别笑,我真见过)

清洗流程我一般这么走:

  1. 先检查缺失率。如果某只股票缺失超过20%,直接扔掉。
  2. 处理异常值。用3倍标准差或者分位数法。
  3. 去重。按时间戳排序,保留第一条或最后一条。
  4. 检查数据连续性。比如有没有突然跳空10%以上的情况。

下面是我常用的一个清洗函数,简单但够用:

def clean_price_data(df):
    # 去重
    df = df.drop_duplicates(subset=['timestamp'])
    # 排序
    df = df.sort_values('timestamp')
    # 填充缺失值(用前一个交易日的数据)
    df = df.fillna(method='ffill')
    # 剔除异常值(价格变化超过20%的)
    df['return'] = df['close'].pct_change()
    df = df[df['return'].abs() < 0.2]
    return df

避坑指南:我曾经用过一个数据集,回测效果特别好。后来发现是数据里包含了未来信息——清洗时不小心把未来的数据填充到了过去。所以清洗顺序很重要:先按时间排序,再做填充。

2.4 常见金融数据集介绍

做深度学习择时,你至少得知道几个主流的数据源:

数据集 频率 覆盖范围 特点
Yahoo Finance 日线/分钟线 全球股票、ETF 免费,但数据质量一般
Quandl 日线/分钟线 全球市场 收费,数据干净
Wind(万得) 日线/分钟线/ tick A股为主 国内最全,价格贵
JoinQuant(聚宽) 日线/分钟线 A股 免费,适合回测

我个人最常用的是聚宽的数据。免费、干净、更新及时。但如果你做全球策略,还是得用Quandl或者Bloomberg。

嗯,这里要注意一点:免费数据往往有延迟。比如Yahoo Finance的数据,可能比实际行情晚15分钟。做回测问题不大,但实盘就别用了。

2.5 知识体系总览

下面这张图,是我自己总结的金融时间序列数据处理流程。你照着这个顺序走,基本不会出大问题:

金融时间序列数据处理流程 1. 数据获取 选择频率(日/分钟) 2. 数据对齐 统一时间戳 3. 数据清洗 去重/填充/剔除异常 4. 特征工程 计算技术指标 5. 模型输入 标准化/序列化 数据预处理阶段 建模准备阶段

这张图里,前三个步骤(获取、对齐、清洗)占了整个数据处理工作量的70%以上。别急着跑模型,先把数据搞干净。

总结一下:

  • 数据频率选对了,策略就成功了一半
  • 对齐是基本功,别偷懒
  • 清洗要谨慎,宁可少数据,不要脏数据
  • 选数据集时,考虑成本、质量和更新频率

好了,这一章的内容就到这儿。数据基础打牢了,后面讲特征工程和模型设计的时候,你才不会觉得飘。


公众号:蓝海数据掘金营,微信deep3321