yfinance 库,免费但可能被限流,需注意时区与复权。
akshare / efinance,接口丰富,但字段命名需标准化。
结构化数据,需token,适合本地量化库,复权数据完善。
| 对比维度 | Yahoo Finance | 东方财富 (akshare) | Tushare Pro |
|---|---|---|---|
| 覆盖市场 | 全球主要交易所 | A股 / 港股 / 期货 | A股 + 指数 + 基金 |
| 频率限制 | ⏳ 中等 (IP限制) | ⏳ 较低 (频率友好) | ⏳ 积分制 (高级权限) |
| 复权支持 | 仅提供调整收盘价 | 需自行计算/前复权参数 | ✅ 前复权/后复权 |
| Python库 | yfinance | akshare / efinance | tushare |
df.ffill() / bfill()df.interpolate()df.dropna(thresh=…)# 缺失值处理 · 前向填充 + 限制连续填充天数 import pandas as pd df['close'] = df['close'].fillna(method='ffill', limit=5) # 若开盘价缺失,用前一日收盘价填充 df['open'] = df['open'].fillna(df['close'].shift(1)) # 剔除成交量<=0 的异常行 df = df[df['volume'] > 0] # 时间索引对齐 (多标的) prices = pd.concat({ticker: data['close'] for ticker, data in sources.items()}, axis=1) prices = prices.ffill().dropna(how='any')
调整历史价格,使价格连续。除权除息日价格跳空被修正,适合回测。
复权因子 = (1 + 分红/前收盘) ...
保持最新价格不变,调整历史价格。适合长期趋势分析,但回测资金曲线易失真。
# 获取复权因子 (Tushare Pro) import tushare as ts pro = ts.pro_api('your_token') df_adj = pro.adj_factor(ts_code='000001.SZ', start_date='20230101', end_date='20231231') # 前复权价格 = 收盘价 * 复权因子 df['close_adj'] = df['close'] * df_adj['adj_factor']