无论你是刚入门量化投资,还是想手动复盘个股走势,获取高质量的历史数据都是第一步。虽然市场上有各种数据终端(如 Wind、iFinD),但对个人开发者而言,开源接口 + Python 其实就够用。
一、准备工作
- 安装 Python 库
打开命令行,执行:
pip install tushare akshare pandas
- 注册 Tushare Token
访问 https://tushare.pro,注册账号并进入“个人中心”获取你的 Token。
二、获取单只股票的历史数据(Tushare 示例)
- 获取 600000.SH 的日线行情(不复权)
import tushare as ts
import pandas as pd
ts.set_token("你的Token") # 用你自己的 token 替换
pro = ts.pro_api()
df = pro.daily(ts_code="600000.SH", start_date="20240101", end_date="20240625")
df = df.sort_values("trade_date") # 按时间正序
print(df.head())
- 获取复权数据(常用于因子研究)
df_qfq = ts.pro_bar(ts_code="600000.SH", adj="qfq",
start_date="20240101", end_date="20240625")
字段 |
含义 |
open/close/high/low |
日内价格 |
vol |
成交量(手) |
amount |
成交额(元) |
pct_chg |
涨跌幅 |
三、批量下载多个股票的历史数据
import os
from time import sleep
if not os.path.exists("data"): os.makedirs("data")
def download_one_stock(ts_code):
try:
df = ts.pro_bar(ts_code=ts_code, adj="qfq", start_date="20200101", end_date="20240625")
if df is not None and not df.empty:
df.to_csv(f"data/{ts_code}.csv", index=False)
print(f"{ts_code} 下载成功")
sleep(1) # 防止触发限速
except Exception as e:
print(f"{ts_code} 出错:{e}")
四、使用 AkShare 替代获取(无需 Token)
import akshare as ak
df = ak.stock_zh_a_hist(symbol="600000", period="daily",
start_date="20240101", end_date="20240625", adjust="qfq")
print(df.head())
五、数据清洗建议
操作 |
说明 |
日期标准化 |
pd.to_datetime(df['trade_date']) |
缺失值处理 |
df.fillna(method='ffill') 或删除 |
重复值检测 |
df.duplicated().sum() |
存储格式 |
建议使用 .parquet 替代 .csv ,更小更快 |