# py-quant **Repository Path**: cj829/py-quant ## Basic Information - **Project Name**: py-quant - **Description**: No description available - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-30 - **Last Updated**: 2026-08-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # A股量化数据采集器 **多数据源 → MySQL**,严格写入你现有的 `p_` 前缀表。 - 数据源:`baostock` / `akshare`(可配置切换) - 采集:股票列表、日线、分钟线(5/15/30/60) - 特性:断点续传、自动重连、增量/全量、多进程并行 ## 项目结构 ``` PythonProject/ ├── pyproject.toml # 依赖 + 打包配置 ├── src/ │ └── stock_collector/ # 主包 │ ├── __main__.py # python -m 入口 │ ├── cli.py # 命令行逻辑 │ ├── collector.py # 采集主逻辑 │ ├── config.py # 配置(DB连接/数据源/采集参数) │ ├── datasource/ # 数据源层(baostock / akshare) │ └── storage/ # 存储层(写入 / 进度) ├── tests/ │ └── test_akshare.py # AkShare 适配器自测 ├── sql/ │ └── init_db.sql # 建表 SQL(p_ 前缀) ├── logs/ # 运行日志(自动创建) └── README.md ``` ## 安装 ```bash # 使用项目虚拟环境 .venv\Scripts\pip.exe install -e . ``` > 会自动安装 baostock、akshare、pymysql、sqlalchemy、pandas。 ## 配置 编辑 `src/stock_collector/config.py`: ```python # 1. 数据库连接 DB_CONFIG = { "host": "127.0.0.1", "port": 3306, "user": "root", "password": "你的密码", # ← 改这里 "database": "你的数据库名", # ← 改这里 } # 2. 数据源(二选一) DATA_SOURCE = "akshare" # 或 "baostock" # 3. 历史起点 HISTORY_START = "2015-01-01" ``` ## 运行 ### 方式一:命令行工具(最简洁) ```bash .venv\Scripts\stock-collector.exe --daily --full ``` ### 方式二:python -m(推荐) ```bash .venv\Scripts\python.exe -m stock_collector --daily --full ``` ### 方式三:激活虚拟环境后 ```bash .venv\Scripts\activate stock-collector --daily --full ``` ## 常用命令 | 任务 | 命令 | |------|------| | 建表 | `stock-collector --init` | | 采集股票列表 | `stock-collector --stocks` | | 日线全量 | `stock-collector --daily --full` | | 日线增量 | `stock-collector --daily` | | 5分钟线全量 | `stock-collector --minute --freq 5 --full` | | 一键全量(首次) | `stock-collector --init --all --full` | | 每日增量更新 | `stock-collector --all` | | 调试模式 | 加 `--debug` | ### 首次全量灌库 ```bash stock-collector --init --all --full ``` 依次执行: 1. ✅ 建所有 `p_` 表 2. ✅ 采集股票列表 → `p_stock_basic` 3. ✅ 全量日线 → `p_kline_daily` 4. ✅ 全量分钟线(5/15/30/60)→ `p_kline_5/15/30/60min` ## 命令行参数 | 参数 | 说明 | |------|------| | `--init` | 初始化建表 | | `--stocks` | 采集股票列表 | | `--daily` | 采集日线 | | `--minute` | 采集分钟线 | | `--freq 5,15` | 指定分钟周期(默认 5,15,30,60) | | `--all` | 执行全部采集 | | `--full` | 全量(不加 = 增量) | | `--debug` | 调试模式 | ## 数据源切换 改 `config.py` 的 `DATA_SOURCE` 即可,采集层无感知: | 数据源 | 特点 | |--------|------| | `baostock` | 需要登录,字段全,分钟线可回溯多年,但易限流 | | `akshare` | 无需登录,东方财富源,日线可全量,**分钟线仅近期** | ## 断点续传 每完成一只股票,进度写入 `p_collect_progress`: - 中断后重跑 → 自动从上次断点继续 - 当天已成功采集的股票,增量运行会**自动跳过** - 状态:`pending / running / done / error` 查看进度: ```sql SELECT ktype, status, COUNT(*) FROM p_collect_progress GROUP BY ktype, status; ``` ## 注意事项 1. **分钟线量大**:全量约 30-50GB,确保磁盘够 2. **涨跌停**:自动根据股票类型计算(主板±10%/创业板±20%/北交所±30%) 3. **防限流**:单连接串行采集(baostock 禁止并发连接),内置随机延迟(1-3s)+ 失败重试 + 黑名单识别 4. **每日配额**:内置每日 5 万次 API 配额计数,接近上限自动停止并保留进度,次日增量续跑 5. **黑名单冻结**:触发拉黑自动记录本年累计次数,冻结时长 = 本年累计次数 × 6 小时,冻结期自动拒绝启动 ## 常见问题 **Q: 报 `Access denied`?** A: 检查 `config.py` 的 MySQL 密码和远程连接权限。 **Q: 报 IP 已被拉黑 / 网络接收错误?** A: 触发 baostock 风控拉黑。采集器会自动记录本次拉黑并停止;冻结时长 = 本年累计拉黑次数 × 6 小时,到期后重新运行即可自动恢复。也可切换另一个数据源。 **Q: 分钟线只能拿到近期数据?** A: akshare 的限制,改用 baostock 可回溯多年。 **Q: 如何只采集某几只股票?** A: 改 `config.py` 的 `DATA_SOURCE`,或在 `cli.py` 加 `--codes` 参数。