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 数据清洗:脏数据比没数据更可怕
金融数据里常见的“脏”情况:
- 缺失值:某一天没有交易数据
- 异常值:价格突然跳空,或者成交量异常放大
- 重复值:同一时间戳出现多条记录
- 错误值:比如收盘价写成负数(别笑,我真见过)
清洗流程我一般这么走:
- 先检查缺失率。如果某只股票缺失超过20%,直接扔掉。
- 处理异常值。用3倍标准差或者分位数法。
- 去重。按时间戳排序,保留第一条或最后一条。
- 检查数据连续性。比如有没有突然跳空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 知识体系总览
下面这张图,是我自己总结的金融时间序列数据处理流程。你照着这个顺序走,基本不会出大问题:
这张图里,前三个步骤(获取、对齐、清洗)占了整个数据处理工作量的70%以上。别急着跑模型,先把数据搞干净。
总结一下:
- 数据频率选对了,策略就成功了一半
- 对齐是基本功,别偷懒
- 清洗要谨慎,宁可少数据,不要脏数据
- 选数据集时,考虑成本、质量和更新频率
好了,这一章的内容就到这儿。数据基础打牢了,后面讲特征工程和模型设计的时候,你才不会觉得飘。
公众号:蓝海数据掘金营,微信deep3321