🌟 数据是量化研究的血液。掌握主流金融数据源、API 调用以及清洗存储,是搭建研究流水线的第一步。
| 数据源 | 类型 | 覆盖范围 | 特点 / 适用场景 |
|---|---|---|---|
| Wind (万得) | 国内机构级 | A股、港股、期货、基金、宏观 | 国内量化机构首选,API 丰富,数据质量高 |
| Bloomberg | 国际机构级 | 全球股票、固收、外汇、衍生品 | 金融数据标准,但成本高,适合跨境策略 |
| Tushare | 开源/社区 | A股、指数、基金、数字货币 | 免费/低门槛,适合个人研究,需积分 |
| Quandl / Nasdaq | 国际公开 | 宏观经济、另类数据 | 学术与另类数据,部分免费 |
| 聚宽 / 米筐 | 量化平台 | A股、期货、期权 | 内置回测,数据与策略一体化 |
📌 以 Tushare 为例,展示标准 API 调用流程:
# 安装: pip install tushare import tushare as ts # 设置 token (注册后获取) ts.set_token('你的tushare_token') # 初始化接口 pro = ts.pro_api() # 获取日线行情 (平安银行) df = pro.daily(ts_code='000001.SZ', start_date='20250101', end_date='20250320') print(df.head()) # 返回 pandas DataFrame,可直接分析
⚡ 进阶:使用 requests 库调用通用 REST API,解析 JSON 并转为 DataFrame。
原始数据通常包含缺失值、格式不一致、幸存者偏差等。清洗是量化研究的基石。
| 步骤 | 常见操作 | Python 工具 |
|---|---|---|
| 1. 缺失值处理 | 向前填充 / 插值 / 删除 | df.ffill() / df.interpolate() |
| 2. 格式统一 | 日期转为 datetime,数值类型转换 | pd.to_datetime() / astype() |
| 3. 去重 & 排序 | 按时间、代码去重,防止重复数据 | df.drop_duplicates() |
| 4. 异常值过滤 | 涨跌停、价格异常、量异常 | 条件筛选 / 分位数截断 |
| 5. 存储 | Parquet / HDF5 / CSV / 数据库 | df.to_parquet() / SQLAlchemy |
# 清洗示例 (Tushare 数据) import pandas as pd # 假设 df 为原始日线数据 df['trade_date'] = pd.to_datetime(df['trade_date']) df.sort_values(['ts_code', 'trade_date'], inplace=True) # 前向填充缺失的涨跌幅 df['pct_chg'].fillna(method='ffill', inplace=True) # 剔除退市/停牌 (成交量=0) df = df[df['vol'] > 0] # 存储为 parquet (压缩, 快速) df.to_parquet('stock_daily.parquet', index=False)
⬆️ 典型量化数据流水线:从原始数据到策略就绪
📌 数据存储选型建议