# baostock_sync **Repository Path**: hongwei_studio/baostock_sync ## Basic Information - **Project Name**: baostock_sync - **Description**: baostock同步 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-02-18 - **Last Updated**: 2026-02-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于 BaoStock 的股票数据快速获取工具 ## 目录结构 ``` BaoStock/ ├─ baoquant/ │ ├─ __init__.py │ ├─ __main__.py │ ├─ config.py │ ├─ baostock_client.py │ └─ commands/ │ ├─ __init__.py │ ├─ export_stocks.py │ ├─ export_daily.py │ └─ export_market_daily.py ├─ .env.example ├─ .gitignore ├─ requirements.txt └─ README.md ``` ## 环境要求 - Python 3.9+(推荐 3.10/3.11) - 可联网环境 ## 安装 1) 可选:创建虚拟环境 ``` python -m venv .venv # Windows .venv\\Scripts\\activate # macOS/Linux source .venv/bin/activate ``` 2) 安装依赖 ``` pip install -r requirements.txt ``` 3) 配置环境变量(可选) - 复制 .env.example 为 .env,并填写: ``` BAOSTOCK_USERNAME= BAOSTOCK_PASSWORD= ``` - 若不填写,程序将尝试匿名登录。 - 若要在 Funboost Web Manager 中查看**函数入参/函数结果/异常堆栈/消费速率**等,请在 `.env` 中配置 `MONGO_CONNECT_URL`(见 `.env.example`)。「函数结果」「消费速率」两页的数据来自 MongoDB,且需在对应消费者的 `@boost` 中设置 `function_result_status_persistance_conf` 保存结果到 Mongo 后才有数据;本项目的 export-market-daily 消费者会在检测到 `MONGO_CONNECT_URL` 已配置时自动开启该持久化。若无 Mongo,可不使用这两页,不影响其他页面功能。 ## Docker 运行(可选) 项目提供基于 **Python 3.10 slim** 的最小镜像 + **Compose 独立 deps 服务**安装依赖;**源码与依赖文件**均通过卷挂载载入(不复制进镜像),安装后的依赖写入本机目录 `.docker-packages`;并载入本机时间文件以保持时区一致。 ```bash # 1. 安装依赖(仅首次或 requirements.txt 变更时执行) docker compose run --rm deps # 2. 直接启动消费者(默认运行 export-market-daily 消费者) docker compose up -d app # 3. 临时执行其他命令 docker compose run --rm app python -m baoquant --help docker compose run --rm app python -m baoquant export-market-daily --limit 2 ``` - 时区:Compose 中挂载了 `/etc/localtime`、`/etc/timezone`(Linux 主机),并设置 `TZ=Asia/Shanghai`;Windows 下若挂载失败可注释掉前两个 volume,仅保留 `TZ`。 - 依赖:`requirements.txt` 以只读方式挂载;安装结果写入本机目录 `.docker-packages`(已加入 .gitignore),主服务 `app` 通过 `PYTHONPATH=/packages` 使用。 ## 快速自检 在项目根目录执行: ``` python -m baoquant ``` 若看到 “BaoStock login OK” 则说明基础环境就绪。 ## 命令:导出A股股票列表 将指定日期、市场的股票列表导出到 CSV,并在生成前清空该命令的输出目录。 - 导出今天全部A股(沪深+北交所): ``` python -m baoquant export-stocks ``` - 指定日期: ``` python -m baoquant export-stocks --date 2024-10-01 # 或 python -m baoquant export-stocks --date 20241001 ``` - 指定市场(all/sh/sz/bj,默认 all=全部A股:沪深+北交所): ``` python -m baoquant export-stocks --market sh ``` 输出位置:output/export_stocks/,文件名形如: ``` stocks_YYYYMMDD_{market}.csv ``` 提示:若未指定日期且当天非交易日或数据未发布,程序会自动回退至最近交易日再导出。 ## 命令:导出单只股票近一年日线 将单只股票近一年日线导出为 CSV,若文件已存在则覆盖。支持复权类型与自定义输出目录。 - 默认不复权: ``` python -m baoquant export-daily sh.600000 ``` - 指定复权类型(qfq/hfq/none): ``` python -m baoquant export-daily sz.000001 --adj hfq ``` - 指定输出目录: ``` python -m baoquant export-daily sh.600000 --outdir d:\\data\\kline ``` 默认输出位置:output/export_daily/,文件名形如: ``` sh_600000_YYYYMMDD_YYYYMMDD_{adj}.csv ``` ## 命令:导出市场内近一年的日线(按类型) 按类型筛选(stock/index/fund/bond/all),在指定时间区间导出**市场内**所有符合类型标的的日线数据;导出前清空输出目录;可限制导出数量用于测试。**单只股票**导出请用上面的 `export-daily`(支持 `--adj`)。 - 默认(近 5 个交易日、类型 stock、不复权、**默认写入 PostgreSQL**;若未配置 POSTGRES_* 则写本地 output/export_market_daily): ``` python -m baoquant export-market-daily ``` - 强制写本地目录(加 `--local`): ``` python -m baoquant export-market-daily --local ``` - 指定类型(可逗号分隔): ``` python -m baoquant export-market-daily --types stock,index ``` - 指定时间区间: ``` python -m baoquant export-market-daily --start 20240101 --end 20241001 ``` - 限制导出数量(测试): ``` python -m baoquant export-market-daily --limit 50 ``` - 指定输出目录: ``` python -m baoquant export-market-daily --outdir d:\\data\\market_daily ``` - 复权类型(默认不复权):`--adj qfq`(前复权)、`--adj hfq`(后复权)、`--adj none`(不复权)。 ``` python -m baoquant export-market-daily --adj qfq ``` - **默认写入 PostgreSQL(TimescaleDB)**:未加 `--local` 且已配置 `POSTGRES_*` 时,数据写入 PG。需在 .env 中配置 `POSTGRES_HOST`、`POSTGRES_USER`、`POSTGRES_DB` 等(见 .env.example)。时序表按**类型+复权**命名:`market_daily_{类型}_{复权}`,如 `market_daily_stock_none`、`market_daily_stock_qfq`。首次执行时会检查数据库状态,按需创建目标数据库、TimescaleDB 扩展与本批涉及类型+复权的时序表;若无建库权限,需先由 DBA 建好库并安装扩展。 输出位置:未配置 PG 或使用 `--local` 时为 output/export_market_daily/(或自定义),文件名形如 `{code}_{start}_{end}.csv`。默认写 PG 时无本地文件,数据直接写入上述 PG 表;各表结构相同(code, name, time, open, high, low, close, volume, amount),每条日线一行。 ## Funboost 消费者模式(可视化管理) 若希望以消费者模式运行,并在 Funboost Web Manager 中可视化查看消费者实例、任务历史、函数入参/结果等,请参考: - `doc/export-market-daily.md` ## 调试与日志 - 为查看详细执行过程,加上 -v 开关: ``` python -m baoquant -v export-stocks --market all ``` - 日志会打印:解析后的日期、调用的接口、返回/过滤的行数、自动回退日期(如发生)、输出文件路径等信息。 ## 注意 - BaoStock 的接口可能更新,请参考其官方文档。 - 在中国大陆环境可配置 pip 源镜像以提升安装速度。