中国市场适配 · 名录实测
investpy 取 A 股与港股:country 参数、代码形态与名录实测
该库的名录里确实有中国与香港,而且可以离线枚举出来。但「名录里有」和「能取到行情」是两件事,而且 Investing.com 的代码体系与上交所/深交所/港交所的代码并不一一对应。这一页把能确认的部分说清楚,把不能确认的部分标出来。
A 股与港股参数
get_stocks_list 实测与源码 utils/constant.py 整理的参数对照示意。「名录可枚举」与「行情可获取」是两件事,本页把二者分开陈述。中国与香港:本机名录实测结果
下面每一行都是本机跑出来的真实读数,可以直接用同样的代码在你的环境复现。
| 项目 | 调用 | 本机实测结果 | 说明 |
|---|---|---|---|
| 中国股票名录 | get_stocks_list(country='china') | 3339 条 | 前几条为 601088、601988、600688、600028、600645 |
| 香港股票名录 | get_stocks_list(country='hong kong') | 1129 条 | 代码形如 0001、0002、0003、0004、0005(含前导零) |
| 中国基金名录 | get_funds_list(country='china') | 4413 条 | 在全球基金名录中排第六 |
| 中国指数名录 | get_indices_list(country='china') | 819 条 | 在全球指数名录中排第三 |
| country 合法性 | get_stock_countries() | 91 个国家/地区,含 china 与 hong kong | 全部小写,多词用空格分隔 |
| 联网取行情 | get_stock_historical_data(stock='600519', country='china', …) | 失败:ERR#0015: error 403 | 与本机其他市场的结果一致 |
可用的部分值得用起来:3339 与 1129 这两份代码清单本身就有价值——可以做代码校验、批量任务分片、离线资产字典。只是不要把它当成「能顺便取到行情」的承诺。
country 参数与代码形态怎么对?
Investing.com 的标识体系与你熟悉的交易所代码不是同一套。下表把常见混淆点列清楚。
| 你以为的 | investpy / Investing.com 的实际做法 | 注意点 |
|---|---|---|
用 'CN' 表示中国 | 要用完整小写国名 'china' | 取值来自 COUNTRY_FILTERS,不是 ISO 国家码 |
用 'HK' 表示香港 | 要用 'hong kong'(中间有空格) | 写成 'hongkong' 查不到,会抛 ERR#0129 |
港股代码 700 | 名录里是 '0700',带前导零的四位字符串 | 补零错误会导致「名录里有但匹配不上」 |
| A 股代码是 6 位数字 | 名录中的中国股票代码确实为 6 位字符串 | 必须以字符串传参,传数字会丢前导零或触发类型校验 |
| 一个代码对应一个资产 | 同一公司在不同市场各有独立条目与内部 ID | 入库时建议把「代码 + 国家」作为联合主键 |
| 交易所代码就是投资标的标识 | 搜索结果里另有 tag(页面路径)与 id_(内部 ID) | 三者语义不同,不要互相替代 |
A 股特有的坑:这些不是 investpy 的错
即使端点可用,用海外数据源做 A 股研究也有几类固有差异。提前知道,能省掉大量对账时间。
| 差异点 | 国内常见口径 | 海外数据源常见口径 | 对研究的实际影响 |
|---|---|---|---|
| 涨跌停 | 主板 ±10%、ST ±5%、科创/创业板 ±20% | 数据源通常不提供标记 | 无法从价格序列反推是否触板,需自行按规则计算 |
| 停牌 | 停牌期间不产生 K 线 | 同样缺失,但缺失原因不标注 | 用日期差推断交易日数量会出错 |
| 复权 | 研究习惯用前复权 | 官方未声明复权口径 | 分红除权前后价格序列会出现跳变,回测结果失真 |
| T+1 | 当日买入不可当日卖出 | 数据层不体现交易规则 | 回测若不建模会高估策略收益 |
| 交易日历 | 含中国特有假期安排 | 取决于数据源的日历 | 跨市场对齐时会出现「有数据但市场休市」的错觉 |
| 成交量单位 | 股 / 手 混用 | 数据源单位不标注 | 跨市场比较成交量前必须先统一单位 |
提示:上表中的「海外数据源常见口径」是基于公开资料的一般性描述,本站未逐一比对具体数据源的行为,也不针对 investpy 单独下结论。做正式研究前,请拿你的数据源与交易所公告或权威行情做一次抽样对账。
一次完整的 A 股取数会经过哪些步骤?
把流程写出来,就能看出哪一步在本机环境下会失败——以及哪几步在你换成别的数据源后仍然要自己做。
确认 country 取值
investpy.get_stock_countries()→ 预期输出包含'china'与'hong kong'(共 91 项)。这一步离线,本机实测成功。拿到候选代码清单
investpy.get_stocks_list(country='china')→ 预期输出长度 3339 的字符串列表。同样离线,本机实测成功。按名称或代码定位到具体资产
search_quotes(text='600519', products=['stocks'], countries=['china'], n_results=1)→ 本机实测抛ERR#0015: error 403。这一步开始需要联网,也是断点所在。取历史行情
get_stock_historical_data(stock='600519', country='china', from_date='01/01/2023', to_date='01/01/2024')→ 本机实测同样 403。即便端点恢复,也要自己处理复权、停牌与涨跌停标记。做数据校验再入库
抽几个交易日与交易所/权威行情对账,确认复权口径、成交量单位与交易日历一致,再进入回测。这一步任何数据源都不能省。
A 股场景的替代数据源怎么选?
如果目标是 A 股研究,结论很直接:investpy 不是合适的选择。下面是按「需要什么前置条件」整理的对照。
| 方案 | 前置条件 | 适合的 A 股场景 | 注意点 |
|---|---|---|---|
| AkShare | pip 安装,无需 Key | 行情、基本面、宏观、基金等广覆盖取数 | 接口随上游页面变化,需关注版本更新 |
| Tushare Pro | 需注册并申请 Token | 结构化行情与财务数据,接口规范稳定 | 不同接口有积分/权限门槛,需先确认可用范围 |
| Baostock | pip 安装,无需 Key | 历史行情与复权数据 | 更新频率与覆盖范围需自行验证 |
| 交易所 / 券商接口 | 需要账户或机构权限 | 对时效与准确性要求高的场景 | 接入成本最高,但数据来源最权威 |
| 本机免部署技能路线 | 安装 EasyClaw 后按任务选技能 | 不写代码完成取数、分析与出图 | 部分技能需自备 Key(如 Tushare Token、问财 Key),详见对比页 |
| investpy | — | 仅名录枚举(A 股 3339 条代码) | 行情端点在本机实测不可用,不建议作为 A 股数据通道 |
FAQ
investpy 常见问题:还能装吗、还能取数吗、换什么
investpy 能取 A 股数据吗?
get_stocks_list(country='china') 返回 3339 条 A 股代码,完全离线可用。行情层在本机不可用:get_stock_historical_data(stock='600519', country='china', …) 返回 ERR#0015: error 403。如果你的目标是 A 股行情,建议直接看本页的替代方案对照,不要在这个库上投入时间。country 参数应该写 'china' 还是 'China'?
lower().strip() 归一化再查枚举表,因此 'China'、' china ' 都能命中。但要注意多词国家名必须带空格:香港要写 'hong kong',写成 'hongkong' 会抛 ERR#0129。以源码中的 COUNTRY_FILTERS 为准。港股代码为什么要写成 '0700'?
0001、0002…0700)。如果你用整数 700 去匹配,会出现「名录里有但找不到」的情况。做代码匹配时统一用字符串,并保持位数一致。