第一章:金融数据概览
各位同学好,我是老张。做量化这些年,我最大的体会就是——数据质量决定了策略的生死。今天咱们就来聊聊金融数据的那些事儿。
金融数据,说白了就是市场里各种资产的价格、交易量、财务报表这些数字。你想想看,没有数据,量化模型就是空中楼阁。我个人习惯把金融数据分成三大类:行情数据、基本面数据和另类数据。
1.1 金融数据类型
行情数据是最基础的。包括开盘价、收盘价、最高价、最低价、成交量、成交额。这些数据频率可以很高,从日线到分钟线,甚至Tick级数据。我在做高频策略时,就经常跟Tick数据打交道,那数据量,啧啧,一天就能上千万条。
基本面数据呢,主要是财务报表里的东西。营收、净利润、资产负债率、市盈率这些。这类数据更新慢,但信息量大。我记得有一次,一个策略在回测时表现很好,实盘却亏得一塌糊涂。后来一查,原来是用了未经调整的财务数据,里面有不少会计变更导致的噪音。
另类数据就更有意思了。比如新闻舆情、卫星图像、信用卡消费记录。这些数据能提供传统数据看不到的信息。我曾经用爬虫抓过某电商平台的商品评论,分析消费者情绪,居然提前一周预测到了某消费股的业绩暴雷。
| 数据类型 | 典型字段 | 更新频率 | 数据量级 |
|---|---|---|---|
| 行情数据 | 开盘价、收盘价、成交量 | 秒级/分钟级 | TB级 |
| 基本面数据 | 营收、净利润、PE | 季度/年度 | GB级 |
| 另类数据 | 新闻情感、卫星图 | 不定 | PB级 |
1.2 数据来源:Wind / Tushare / Yahoo Finance
数据从哪来?这是每个量化新手都会问的问题。我常用的有三个渠道。
Wind(万得)是国内金融数据的标配。数据全、质量高,但价格不菲。一套终端一年好几万。我在机构工作时,公司买了十几套Wind终端,那叫一个壕。不过个人用户嘛,说实话,性价比不高。
Tushare是我个人比较推荐的。开源、免费(部分数据需要积分),覆盖A股、期货、基金、宏观经济等。接口设计得很Pythonic,用起来顺手。我很多个人项目的数据都从Tushare拿。不过要注意,Tushare的数据偶尔会有缺失,需要自己补全。
Yahoo Finance呢,主要拿海外数据。美股、港股、全球指数,都能拿到。但有个坑——Yahoo的数据有时会停更,或者出现异常值。我曾经用Yahoo的数据做回测,发现某只股票某天涨了500%,一查,原来是数据源把拆股当成了分红,价格没调整。
数据源对比
- Wind:数据最全,但贵
- Tushare:免费好用,适合个人
- Yahoo Finance:海外数据首选,但需清洗
1.3 数据质量评估
数据拿到手,别急着用。先做质量评估。我见过太多人,数据都没检查就直接跑模型,结果全是垃圾进垃圾出。
第一步:检查缺失值。用pandas的isnull()看看。缺失率超过5%的字段,要小心。我一般会先看缺失是不是随机的。如果是随机缺失,可以用前向填充或插值。如果是系统性缺失,比如某些股票经常停牌导致数据缺失,那就得考虑剔除或单独处理。
import pandas as pd
# 加载数据
df = pd.read_csv('stock_data.csv')
# 检查缺失率
missing_rate = df.isnull().mean()
print(missing_rate[missing_rate > 0.05])
第二步:检查异常值。用describe()看分布。价格出现负数?成交量突然暴增100倍?这些都要标记出来。我曾经在回测中发现一个策略年化收益300%,兴奋得不行。后来发现是数据里有个价格字段写成了0,导致收益率计算出现极端值。
避坑指南
我曾经遇到过一只股票,某天收盘价是前一天的10倍。一开始以为是重大利好,后来发现是数据源把复权因子搞错了。所以,异常值一定要结合业务逻辑判断,不能简单删除。
第三步:检查时间序列的连续性。金融数据是时间序列,时间戳必须连续。跳过了交易日?周末数据混进来了?这些都要处理。我习惯用resample()把数据对齐到标准交易日历。
# 检查时间连续性
df['date'] = pd.to_datetime(df['date'])
df = df.set_index('date')
# 检查是否有缺失的交易日
full_dates = pd.date_range(start=df.index.min(), end=df.index.max(), freq='B')
missing_dates = full_dates.difference(df.index)
print(f"缺失交易日数:{len(missing_dates)}")
第四步:检查数据一致性。比如,开盘价、最高价、最低价、收盘价之间有没有逻辑矛盾?最高价不能低于最低价,开盘价不能超出当日范围。这些基本规则,很多新手会忽略。
个人经验
我建议每次拿到新数据,先花10分钟做一次快速质量报告。把缺失率、异常值、时间连续性、逻辑一致性都跑一遍。这10分钟,能帮你省下后面几小时的debug时间。
1.4 知识体系框架
下面这张图,是我自己总结的金融数据预处理知识体系。你可以把它当成一张地图,后面几章的内容,都围绕这个框架展开。
嗯,这张图把整个流程串起来了。从数据获取开始,经过清洗、转换,最后到质量评估。每一步都很关键。后面几章,我们会逐一深入。
好了,第一章就到这里。数据是量化交易的基石,打好基础,后面的路才走得稳。记住我一句话:花在数据上的时间,永远不会白费。