共计 1364 个字符,预计需要花费 4 分钟才能阅读完成。
量化策略的成败,数据质量是关键。好的数据必须具备三个核心特性:完整性(避免缺失关键时间点)、准确性(字段值与真实交易一致)、时效性(实时行情延迟不超过 3 秒)。下面我们就从数据源选择到实战处理,一步步拆解 A 股数据获取的全流程。

一、三类数据源横向对比
1. 免费 API:适合验证策略雏形
- Tushare Pro:需 官网注册 获取 token,免费版限 500 次 / 日调用。特别注意:
- 获取日线需
pro.daily()接口,但 2017 年前数据需付费 -
财务数据字段名与商业库存在差异(如
net_profit对应 Wind 的NET_PROFIT) -
AKShare:无需注册,但请求频繁会触发 IP 封禁。推荐用以下方式获取实时数据:
import akshare as ak
from retrying import retry
@retry(stop_max_attempt_number=3, wait_random_min=1000, wait_random_max=5000)
def get_realtime_data(stock_code):
return ak.stock_zh_a_spot(symbol=stock_code)
2. 券商接口:低延迟但门槛高
以 华泰 MATIC为例:
- 开通两融账户并签署量化协议
- 申请 Level2 行情权限(需验资 50 万以上)
- 通过
websocket接收逐笔成交数据,示例字段:
| 字段 | 含义 |
|---|---|
bid_price1 |
买一价 |
ask_volume2 |
卖二量(股数) |
3. 商业数据库:专业但成本高
横向对比三大供应商:
| 功能 | Wind | 同花顺 i 问财 | 通联数据 |
|---|---|---|---|
| 历史日线 | 1990 年至今 | 2005 年至今 | 复权因子可定制 |
| 分钟级数据 | 支持 1 /5/15 分钟 | 仅 5 分钟 | 含盘口快照 |
| 财务数据更新 | T+1 | T+2 | 支持 XBRL 格式 |
二、Python 实战:从获取到清洗
1. 复权计算演示
import pandas as pd
# 假设 df_raw 包含原始日线(columns=['date','close','volume'])df = df_raw.merge(ak.stock_zh_a_daily(symbol='600519', adjust='hfq'), # 获取后复权因子
on='date', how='left'
)
# 计算复权价格
df['adj_close'] = df['close'] * df['hfq_factor'] / df['hfq_factor'].iloc[-1]
2. 时区处理关键点
A 股分钟数据需统一为 UTC+8:
df['time'] = pd.to_datetime(df['datetime']).dt.tz_localize('Asia/Shanghai')
三、新手避坑指南
- 限频问题 :免费 API 建议添加
time.sleep(random.uniform(0.1, 0.5))随机延迟 - 财务字段对齐 :特别注意
total_assets在不同源可能指合并报表或母公司报表 - ST 股票处理:因子计算时应过滤
df[df['name'].str.contains('ST')==False]
思考延伸
- 数据验证模块可设计规则:
- 检查当日涨跌幅超过 15% 的异常波动
- 对比成交量与 20 日均值的偏离程度
- ST 股票在因子回测时通常需要特殊处理,你会选择直接剔除还是单独标记?
最后提醒:商业数据源虽然强大,但新手建议先用免费数据跑通策略逻辑,等实盘时再考虑采购专业服务。
正文完
