192 lines
5.8 KiB
Markdown
192 lines
5.8 KiB
Markdown
# 股票行情数据更新与检查系统
|
||
|
||
本项目是一个基于Python和Tushare API的股票行情数据更新与检查系统,用于获取、存储和维护股票行情数据。
|
||
|
||
## 功能特性
|
||
|
||
### 1. 数据更新功能 (`update_tushare_totxt.py`)
|
||
|
||
- **多账户轮询**:支持配置多个Tushare账户,自动轮询使用以避免API请求限制
|
||
- **增量更新**:仅下载最新的行情数据,避免重复下载
|
||
- **数据持久化**:将数据保存为制表符分隔的文本文件
|
||
- **数据库同步**:支持将数据同步到MySQL数据库
|
||
- **多线程处理**:使用多线程提高数据下载效率
|
||
- **目录自动创建**:自动创建所需的数据目录结构
|
||
- **请求频率控制**:自动控制API请求频率,避免超过限制
|
||
- **错误重试机制**:网络错误或API请求失败时自动重试
|
||
|
||
### 2. 数据检查功能 (`check_market_data.py`)
|
||
|
||
- **数据完整性检查**:检查本地行情数据的完整性
|
||
- **交易日历同步**:获取并缓存交易日历信息
|
||
- **停牌状态检查**:自动检查股票的停牌状态
|
||
- **自动数据更新**:发现数据缺失或过期时自动更新
|
||
- **在线数据验证**:可选择与在线数据进行对比验证
|
||
- **结果输出**:检查结果保存为CSV文件
|
||
|
||
## 目录结构
|
||
|
||
```
|
||
D:\data\update_day\
|
||
├── update_tushare_totxt.py # 主数据更新脚本
|
||
├── check_market_data.py # 数据检查脚本
|
||
├── update_tushare_totxt.bat # 批处理文件
|
||
├── app.log # 应用日志
|
||
├── market_data_check.log # 数据检查日志
|
||
├── market_data_check_result.csv # 数据检查结果
|
||
└── README.md # 项目说明文档
|
||
```
|
||
|
||
## 安装与配置
|
||
|
||
### 1. 安装依赖
|
||
|
||
```bash
|
||
pip install pandas tushare pymysql sqlalchemy
|
||
```
|
||
|
||
### 2. Tushare配置
|
||
|
||
需要注册Tushare账号并获取API Token,然后在配置文件中设置:
|
||
|
||
- 在`update_tushare_totxt.py`中的`Config.ACCOUNTS`配置
|
||
- 在`check_market_data.py`中的`Config.TUSHARE_TOKENS`配置
|
||
|
||
### 3. 数据目录配置
|
||
|
||
默认数据保存目录为`D:\gp_data`,包含以下子目录:
|
||
|
||
- `code`:存放股票代码文件
|
||
- `day`:存放日行情数据文件
|
||
- `index`:存放指数数据文件
|
||
|
||
### 4. 数据库配置(可选)
|
||
|
||
在`update_tushare_totxt.py`中的`Config.DB_CONFIG`配置MySQL连接信息:
|
||
|
||
```python
|
||
DB_CONFIG = {
|
||
'host': os.getenv('DB_HOST', '127.0.0.1'),
|
||
'port': int(os.getenv('DB_PORT', 3306)),
|
||
'user': os.getenv('DB_USER', 'root'),
|
||
'password': os.getenv('DB_PASSWORD', 'your_password'),
|
||
'database': os.getenv('DB_NAME', 'stock_data')
|
||
}
|
||
```
|
||
|
||
## 使用方法
|
||
|
||
### 1. 更新行情数据
|
||
|
||
**方法一:使用批处理文件**
|
||
|
||
```bash
|
||
update_tushare_totxt.bat
|
||
```
|
||
|
||
**方法二:直接运行Python脚本**
|
||
|
||
```bash
|
||
python update_tushare_totxt.py
|
||
```
|
||
|
||
### 2. 检查数据完整性
|
||
|
||
```bash
|
||
python check_market_data.py
|
||
```
|
||
|
||
## 配置说明
|
||
|
||
### 1. 主要配置参数
|
||
|
||
#### `update_tushare_totxt.py`
|
||
|
||
- `MAX_THREADS`:最大线程数(默认20)
|
||
- `REQUEST_LIMIT`:每分钟最大请求次数(默认500)
|
||
- `MAX_RETRIES`:请求失败最大重试次数(默认3)
|
||
- `ACCOUNTS`:Tushare API Token列表
|
||
- `DB_CONFIG`:数据库连接配置
|
||
|
||
#### `check_market_data.py`
|
||
|
||
- `MAX_REQUESTS_PER_MINUTE`:API请求频率限制
|
||
- `DATA_DIR`:数据目录路径
|
||
- `OUTPUT_FILE`:检查结果输出文件
|
||
- `TRADE_CALENDAR_START_YEARS`:交易日历查询起始年份(默认2年)
|
||
- `TRADE_CALENDAR_END_MONTHS`:交易日历查询结束月份(默认1个月)
|
||
|
||
### 2. 环境变量配置
|
||
|
||
可以通过环境变量覆盖默认配置:
|
||
|
||
- `MAX_THREADS`:最大线程数
|
||
- `REQUEST_LIMIT`:每分钟最大请求次数
|
||
- `TUSHARE_TOKEN1`:主账户Token
|
||
- `TUSHARE_TOKEN2`:备用账户Token
|
||
- `DB_HOST`:数据库主机
|
||
- `DB_PORT`:数据库端口
|
||
- `DB_USER`:数据库用户名
|
||
- `DB_PASSWORD`:数据库密码
|
||
- `DB_NAME`:数据库名称
|
||
|
||
## 数据文件格式
|
||
|
||
行情数据以制表符分隔的文本文件保存,文件名格式为`[股票代码]_daily_data.txt`,例如:
|
||
|
||
```
|
||
688800.SH_daily_data.txt
|
||
```
|
||
|
||
文件包含以下字段:
|
||
|
||
- `ts_code`:股票代码
|
||
- `trade_date`:交易日期
|
||
- `open`:开盘价
|
||
- `high`:最高价
|
||
- `low`:最低价
|
||
- `close`:收盘价
|
||
- `pre_close`:前收盘价
|
||
- `change`:涨跌额
|
||
- `pct_chg`:涨跌幅(百分比)
|
||
- `vol`:成交量(手)
|
||
- `amount`:成交额(千元)
|
||
|
||
## 日志说明
|
||
|
||
- `app.log`:数据更新脚本的运行日志
|
||
- `market_data_check.log`:数据检查脚本的运行日志
|
||
|
||
日志记录了程序运行状态、错误信息和重要操作,便于调试和问题排查。
|
||
|
||
## 注意事项
|
||
|
||
1. **API限制**:Tushare API有请求频率限制,程序会自动控制请求频率,但仍需注意账户的权限和配额
|
||
2. **网络连接**:确保网络连接稳定,特别是在批量更新数据时
|
||
3. **数据库配置**:如需使用数据库功能,请确保MySQL服务已启动并正确配置连接信息
|
||
4. **数据备份**:定期备份数据文件和数据库,避免数据丢失
|
||
5. **账户安全**:不要将API Token泄露给他人,建议使用环境变量配置
|
||
|
||
## 更新日志
|
||
|
||
- 2025-12-18:添加了停牌状态检查功能,优化了数据更新逻辑
|
||
- 2025-12-17:修复了程序退出逻辑,增加了目录自动创建功能
|
||
- 2025-12-16:优化了多线程处理和请求频率控制
|
||
- 2025-12-15:添加了数据库同步功能,支持将数据同步到MySQL
|
||
- 2025-12-14:初始版本,实现了基本的数据更新和保存功能
|
||
|
||
## 许可证
|
||
|
||
本项目采用MIT许可证。
|
||
|
||
## 贡献
|
||
|
||
欢迎提交Issue和Pull Request,共同改进项目功能。
|
||
|
||
## 联系方式
|
||
|
||
如有问题或建议,请通过以下方式联系:
|
||
|
||
- 项目地址:[本项目在GitHub上的地址(如果有的话)]
|
||
- 邮箱:[你的邮箱地址]
|