$npx -y skills add lzwme/finance-quant-skills --skill baostockBaoStock 免费开源 A 股数据平台,无需注册、无需 API Key,支持股票行情、K线、财务数据、行业分类、指数成分股查询。当用户提及 baostock、需要获取A股历史行情、财务报表、交易日历,或需要免费、免注册的A股数据时使用。与 tushare(数据更全但需注册)和 jqdatasdk(聚宽数据)不同,baostock 完全免费无限制,适合快速入门和低成本数据需求。
| 1 | # baostock A股数据获取 |
| 2 | |
| 3 | ## 任务目标 |
| 4 | - 本 Skill 用于:通过 BaoStock 接口获取 A 股市场数据、财务指标和股票信息 |
| 5 | - 能力包含:历史 K 线、财务数据、股票信息、行业分类、指数成分股、交易日历 |
| 6 | - 触发条件:用户提及 baostock 或需要获取 A 股免费数据、历史行情、财务信息时 |
| 7 | |
| 8 | ## 前置准备 |
| 9 | - 依赖说明:安装 baostock 库(已包含在 dependency 中) |
| 10 | - 凭证配置:BaoStock 无需注册或 API Key,直接调用即可使用 |
| 11 | - 可选配置:支持通过环境变量自定义服务器地址(用于代理场景) |
| 12 | - `BAOSTOCK_SERVER_IP`:自定义服务器 IP(用于 nginx 代理等场景) |
| 13 | - `BAOSTOCK_SERVER_PORT`:服务器端口,默认 10030 |
| 14 | |
| 15 | ## 操作步骤 |
| 16 | - 标准流程: |
| 17 | 1. 确定数据需求 — 智能体理解用户意图(行情/K线/财务/股票信息等) |
| 18 | 2. 调用对应脚本 — 根据数据类型选择脚本 |
| 19 | 3. 解析结果 — 智能体分析返回的 JSON 格式数据 |
| 20 | - 脚本调用映射: |
| 21 | - K线/行情数据 → `python scripts/market_data.py --type kline --code sh.600000 --start 2024-01-01 --end 2024-01-31` |
| 22 | - 财务数据 → `python scripts/financial_data.py --type profit --code sh.600000 --year 2023 --quarter 4` |
| 23 | - 股票列表/信息 → `python scripts/stock_info.py --type all_stocks --date 2024-01-02` |
| 24 | - 指数成分股 → `python scripts/stock_info.py --type index_stocks --index hs300` |
| 25 | - 行业分类 → `python scripts/stock_info.py --type industry` |
| 26 | - 交易日历 → `python scripts/stock_info.py --type trade_dates --start 2024-01-01 --end 2024-12-31` |
| 27 | - 可选分支: |
| 28 | - 当需要多只股票数据:使用逗号分隔多个代码,或使用 `--file` 指定代码列表文件 |
| 29 | - 当需要指定频率:使用 `--frequency` 参数(d/w/m/5/15/30/60) |
| 30 | - 当需要调整复权类型:使用 `--adjust` 参数(1=后复权,2=前复权,3=不复权) |
| 31 | |
| 32 | ## 使用示例 |
| 33 | - 示例1:获取股票日K线数据 |
| 34 | - 场景/输入:用户说"查看贵州茅台最近一个月的K线数据" |
| 35 | - 预期产出:返回日期、开盘价、最高价、最低价、收盘价、成交量等 OHLCV 数据 |
| 36 | - 关键要点:调用 `python scripts/market_data.py --type kline --code sh.600519 --start 2024-03-01 --end 2024-03-31 --frequency d --adjust 2` |
| 37 | - 示例2:查询财务指标 |
| 38 | - 场景/输入:用户说"获取工商银行2023年的盈利能力指标" |
| 39 | - 预期产出:返回 ROE、净利润率、毛利率等财务指标 |
| 40 | - 关键要点:调用 `python scripts/financial_data.py --type profit --code sh.601398 --year 2023 --quarter 4` |
| 41 | - 示例3:获取沪深300成分股 |
| 42 | - 场景/输入:用户说"查询沪深300指数的成分股列表" |
| 43 | - 预期产出:返回沪深300指数的所有成分股代码和名称 |
| 44 | - 关键要点:调用 `python scripts/stock_info.py --type index_stocks --index hs300` |
| 45 | - 示例4:批量下载多只股票数据 |
| 46 | - 场景/输入:用户说"下载茅台、平安、招行的2024年日K线数据" |
| 47 | - 预期产出:返回多只股票的 K 线数据并保存为 CSV |
| 48 | - 关键要点:调用 `python scripts/market_data.py --type kline --code sh.600519,sz.000001,sh.600036 --start 2024-01-01 --end 2024-12-31 --output stocks.csv` |
| 49 | |
| 50 | ## 快速参考 |
| 51 | |
| 52 | ### 常用代码示例 |
| 53 | |
| 54 | ```python |
| 55 | import baostock as bs |
| 56 | import pandas as pd |
| 57 | |
| 58 | # 登录系统 |
| 59 | lg = bs.login() |
| 60 | |
| 61 | # 获取日K线数据 |
| 62 | rs = bs.query_history_k_data_plus( |
| 63 | "sh.600519", |
| 64 | "date,code,open,high,low,close,volume,amount", |
| 65 | start_date='2024-01-01', end_date='2024-12-31', |
| 66 | frequency="d", adjustflag="2" |
| 67 | ) |
| 68 | |
| 69 | # 转换为 DataFrame |
| 70 | data_list = [] |
| 71 | while (rs.error_code == '0') & rs.next(): |
| 72 | data_list.append(rs.get_row_data()) |
| 73 | df = pd.DataFrame(data_list, columns=rs.fields) |
| 74 | |
| 75 | # 登出系统 |
| 76 | bs.logout() |
| 77 | ``` |
| 78 | |
| 79 | ### 与其他数据源对比 |
| 80 | |
| 81 | | 特性 | baostock | tushare | jqdatasdk | akshare | |
| 82 | |------|----------|---------|-----------|---------| |
| 83 | | 费用 | 免费 | 免费/付费 | 需注册积分 | 免费 | |
| 84 | | 注册要求 | ❌ 不需要 | ✅ 需要 | ✅ 需要 | ❌ 不需要 | |
| 85 | | 数据范围 | A股为主 | 全面(含宏观) | A股+因子 | 全面(含加密货币) | |
| 86 | | K线数据 | ✅ | ✅ | ✅ | ✅ | |
| 87 | | 财务数据 | ✅ | ✅ | ✅ | ✅ | |
| 88 | | 分钟线 | ✅ | ✅ | ✅ | ✅ | |
| 89 | | 实时行情 | ❌ | ❌ | ❌ | ✅ | |
| 90 | | 特色数据 | 交易日历 | 宏观/Shibor | 因子数据 | 龙虎榜/北向/加密货币 | |
| 91 | |
| 92 | ## 资源索引 |
| 93 | ### 脚本: |
| 94 | |
| 95 | - [scripts/market_data.py](scripts/market_data.py)(用途与参数:获取 K 线/行情数据,支持 --type/--code/--start/--end/--frequency/--adjust/--fields/--output) |
| 96 | - [scripts/financial_data.py](scripts/financial_data.py)(用途与参数:获取财务数据,支持 --type/--code/--year/--quarter/--output) |
| 97 | - [scripts/stock_info.py](scripts/stock_info.py)(用途与参数:获取股票列表/信息/行业/指数成分股,支持 --type/--date/--code/--index/--output) |
| 98 | - [scripts/auth.py](scripts/auth.py)(用途与参数:认证模块,支持自定义服务器配置) |
| 99 | |
| 100 | ### 参考文档 |
| 101 | |
| 102 | - [常用API文档](references/api.md)(何时读取:需要使用 BaoStock Python API、查看详细 API 参数说明时) |
| 103 | - [知识库文档目录](references/markdown/index.md)(何时读取:需要查看更为全面详细 API 参数说明时) |
| 104 | |
| 105 | ## 注意事项 |
| 106 | - BaoStock 无需注册或 API Key,直接调用 `bs.login()` 即可使用 |
| 107 | - BaoStock 股票代码格式:`sh.600000`(上海)、`sz.000001`(深圳)、`bj.430047`(北京) |
| 108 | - 部分数据(如财务数据)可能有延迟,建议在交易日 9:30-15:00 之外获取 |
| 109 | - 脚本返回 JSON 格式数据,智能体负责解析并转换为用户友好的展示 |
| 110 | - 每个会话必须以 `bs.login()` 开始、`bs.logout()` 结束 |
| 111 | - K 线数据默认返回字符串类型,数值计算前需用 `.astype(float)` 转换 |
| 112 | - 非线程安全,并行下载请使用多进程而非多线程 |
| 113 | - 财务数据按季度提供,报告期结束后约有 2 个月的延迟 |