CNTrade 是一个用于下载中国股票和指数历史交易数据的 Python 工具包。它能够从东方财富网 API 获取沪深A股和主要指数的完整历史数据。
- 🚀 高速下载:基于东方财富网高性能 API
- 📊 全面数据:支持沪深A股、创业板股票和主要指数
- 🔄 实时更新:获取从上市日期到最新交易日的完整数据
- 📈 丰富字段:包含开高低收、涨跌幅、成交量、成交额等完整信息
- 💾 多种格式:支持 CSV 格式输出,便于后续分析
- 🛡️ 稳定可靠:内置错误处理和数据验证机制
git clone https://github.com/kerrydu/cntrade.git
cd cntrade
pip install -e .pip install -r requirements.txtfrom cntrade import cntrade
# 下载单个股票数据(平安银行)
cntrade(['000001'], path='./data', stock=True, index=False)
# 下载多个股票数据
stock_list = ['000001', '000002', '600000', '600036']
cntrade(stock_list, path='./stock_data', stock=True, index=False)
# 下载指数数据
index_list = ['000001', '399001', '399006'] # 上证指数、深证成指、创业板指
cntrade(index_list, path='./index_data', stock=False, index=True)import pandas as pd
from cntrade import cntrade
# 下载数据
cntrade(['000001'], path='./data')
# 读取和分析数据
df = pd.read_csv('./data/000001.csv')
print(f"数据期间: {df['date'].min()} 到 {df['date'].max()}")
print(f"总交易日数: {len(df)}")
print(f"最新收盘价: {df['clsprc'].iloc[-1]:.2f}")
print(f"最近一年平均涨跌幅: {df['rit'].tail(250).mean()*100:.2f}%")下载中国股票或指数交易数据的主函数。
参数:
tickers(list): 股票代码或指数代码列表path(str, optional): 数据保存路径,默认为当前目录stock(bool): 是否下载股票数据,默认为 Trueindex(bool): 是否下载指数数据,默认为 False
返回值:
- 成功时返回 DataFrame,失败时返回 None
注意:
stock和index参数不能同时为 True- 股票代码支持 6 位数字,会自动补零
- 数据保存为 CSV 格式,文件名为
{代码}.csv或index{代码}.csv
- 上海证券交易所:6开头的股票代码
- 深圳证券交易所主板:000开头的股票代码
- 深圳证券交易所创业板:300开头的股票代码
- 上证指数:000001
- 深证成指:399001
- 创业板指:399006
- 其他主要指数
| 字段名 | 含义 | 类型 |
|---|---|---|
| stkcd | 股票代码 | str |
| stknme | 股票名称 | str |
| date | 交易日期 | datetime |
| opnprc | 开盘价 | float |
| clsprc | 收盘价 | float |
| hiprc | 最高价 | float |
| lowprc | 最低价 | float |
| rit | 涨跌幅 | float |
| turnover | 换手率 | float |
| volume | 成交量 | int |
| transaction | 成交额(元) | float |
| amplitude | 振幅 | float |
| 字段名 | 含义 | 类型 |
|---|---|---|
| indexcd | 指数代码 | str |
| indexnme | 指数名称 | str |
| date | 交易日期 | datetime |
| opnprc | 开盘价 | float |
| clsprc | 收盘价 | float |
| hiprc | 最高价 | float |
| lowprc | 最低价 | float |
| rmt | 涨跌幅 | float |
| turnover | 换手率 | float |
| volume | 成交量 | int |
| transaction | 成交额(元) | float |
| amplitude | 振幅 | float |
from cntrade import cntrade
# 定义热门股票列表
hot_stocks = [
'000001', # 平安银行
'000002', # 万科A
'600000', # 浦发银行
'600036', # 招商银行
'000858', # 五粮液
'600519', # 贵州茅台
'300001', # 特锐德
]
# 批量下载
cntrade(hot_stocks, path='./hot_stocks', stock=True, index=False)
print("热门股票数据下载完成!")from cntrade import cntrade
# 主要指数
major_indices = [
'000001', # 上证指数
'399001', # 深证成指
'399006', # 创业板指
'000016', # 上证50
'000300', # 沪深300
'000905', # 中证500
]
# 下载指数数据
cntrade(major_indices, path='./indices', stock=False, index=True)
print("主要指数数据下载完成!")- 请求频率限制:建议在批量下载时添加适当的延时,避免请求过于频繁
- 数据准确性:数据来源于东方财富网,仅供学习和研究使用
- 网络连接:需要稳定的网络连接,下载大量数据时建议检查网络状态
- 存储空间:历史数据较多,请确保有足够的存储空间
Q: 下载失败,提示"invalid stock code"
- A: 检查股票代码是否正确,确保代码存在且已上市
Q: 下载的数据不完整
- A: 可能是网络问题,建议重试或检查网络连接
Q: 某些字段有缺失值
- A: 早期数据可能不完整,这是正常现象
Q: 涨跌幅数据超过10%
- A: 早期市场没有涨跌停限制,或包含除权除息等特殊情况
欢迎提交 Issue 和 Pull Request!
- Fork 本项目
- 创建功能分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 打开 Pull Request
本项目使用 MIT 许可证。详见 LICENSE 文件。
如有问题或建议,请通过以下方式联系:
- 提交 Issue
- 数据来源:东方财富网
- 感谢所有贡献者和用户的支持
免责声明: 本工具仅供学习和研究使用,不构成投资建议。投资有风险,入市需谨慎。