JerBouma / A 股与港股

FinanceDatabase 中国市场实测:A 股与港股怎么筛、代码怎么接

用本库做中国市场,卡点不在安装,而在三个字段的口径:country 是公司所属国家而不是上市地,A 股的规范后缀是 .SS/.SZ 而不是 .SH,而它给出的代码在别的工具里未必取得到行情。这一页把 2026-09-29 的全部实测数字、代码映射与失败样例摊开,方便你判断这套数据能不能支撑自己的研究口径。

countries=117 个country=China 实测 6,775 行country=Hong Kong 实测 2,436 行
国家字段country 117 个取值
交易所字段exchange 84 / mic 71
代码后缀.SS / .SZ / .HK
去重口径不能只看主上市
中国市场适配的四个判断点:国家字段、交易所字段、代码后缀与去重口径(基于 2026-09-29 实测,非官方架构图)。

事实核验卡(核验日期 2026-09-29)

FinanceDatabase 版本
2.4.0(PyPI 与 GitHub Release,2026-06-02 发布)
Python 版本
3.11.9(本站实测);包要求 ≥3.10, <3.16
数据库快照
GitHub main 分支 compression/*.bz2(main 最后提交 2026-09-27)
核验日期
2026-09-29
Equities 行数
112,718 行 × 21 列
ETF 行数
36,481 行 × 9 列
数据来源
raw.githubusercontent.com/JerBouma/FinanceDatabase/main/compression/
最后验证时间
2026-09-29(本机 venv 实跑,输出已归档)

以上数字来自本站 2026-09-29 在 Windows + Python 3.11.9 + financedatabase 2.4.0 下的真实运行输出,不是从文章里转抄的;数据文件由上游持续更新,行数会变,以官方 PyPI 与 GitHub Release 为准。采集时 GitHub star 约 9,374(2026-09-29)。

FinanceDatabase · Fields

三个字段先分清:country 不是上市地

同一个「中国」在数据里可以对应完全不同的市场。把这三个字段的含义分开,后面所有筛选才有意义。

字段实测取值示例真实含义最常见的误用
countryChina / Hong Kong / United States(共 117 个)公司所属国家或地区当成「上市地」——实测 country="China" 的标的分布在 34 个交易所
exchangeSHH / SHZ / HKG / NMS / NYQ / PNK(共 84 个)上市交易所的短代码把它当成公司所在国;同一家公司可以在多个 exchange 出现
micXSHG / XSHE / XHKG / XNAS(共 71 个)ISO 10383 标准交易所代码和 exchange 混用;两者一一对应但写法不同
marketShanghai Stock Exchange / Shenzhen Stock Exchange(共 79 个)交易所的完整名称用它做精确筛选——字符串太长,容易写错
currencyCNY / HKD / USD(共 37 个)报价货币用来判断上市地——很多中国公司在海外以美元挂牌
索引(symbol)000002.SZ / 600519.SS / 0700.HK证券代码,是 DataFrame 的索引而不是普通列写 df["symbol"] 或 search(symbol=...)——都不会报错,但结果是错的
一句话:筛「哪个国家公司」用 country,筛「在哪里上市」用 exchange 或 mic。这两个问题在本库里的答案差别很大——实测 country="China" 有 6,775 行,其中只有 3,623 行在上交所和深交所上市。
FinanceDatabase · Measured size

实测能筛出多少标的:A 股与港股的真实行数

下表全部来自 2026-09-29 的实跑(financedatabase 2.4.0,默认排除退市)。

你想要的实测写法实测行数读这个数字时要注意
全部中国公司country="China"6,775含只在海外上市的条目,不等于 A 股
只在上交所上市country="China", mic="XSHG"1,523这才是 A 股沪市口径
只在深交所上市country="China", exchange="SHZ"2,100A 股深市口径
在上交所 + 深交所两次查询相加3,623A 股总量口径,与交易所披露的家数对比可看覆盖缺口
只在港交所上市country="China", exchange="HKG"673同为中国公司但在香港挂牌
只在美国 OTC / 粉单country="China", exchange="PNK"409常见于港股 ADR 与粉单市场
以人民币计价country="China", currency="CNY"3,553可用来剔除海外挂牌的同名标的
香港公司country="Hong Kong"2,436其中港交所挂牌 823 行
香港公司在沪市挂牌country="Hong Kong", exchange="SHH"2数量很小,但说明「香港公司」不等于「港股」
覆盖缺口怎么看:本站不引用未经核实的上市公司家数。判断覆盖是否够用,更稳的做法是把上表里 mic="XSHG" / exchange="SHZ" 的实测行数,和你自己从交易所披露口径拿到的家数做个对照——差多少,就是你需要在别处补齐的部分。
FinanceDatabase · Code mapping

代码后缀对照:本库怎么写,别的工具怎么认

本库用的是 Yahoo 风格的交易所后缀。实测三个后缀与交易所字段是一一对应的。

市场本库代码示例实测 exchange实测 mic全库命中行数注意点
上交所(沪市)600519.SSSHHXSHG1,628后缀是 .SS;实测 .SH 在本库命中 0 行
深交所(深市)000002.SZSHZXSHE2,248沪深的数字编号规则不同,不要跨交易所硬套
港交所0700.HKHKGXHKG1,625同样是 .HK,但标的可能属于中国或香港
美股AAPLNMS / NYQXNAS / XNYS—本库的美股代码不带后缀
美国 OTC / 粉单AACAFPNKOTCM—中国公司常以 ADR / 粉单形式出现,代码看不出国别
为什么先看这一节:拿到清单之后,代码要从本库交到行情工具手里。后缀写错不会有人提醒你——它会安静地返回空数据,而你会以为「这个标的没有行情」。本节的后缀与交易所对应关系都是实测得到的,可以直接当成 FinanceDatabase 与下游工具之间的一张翻译表。
FinanceDatabase · Toolchain probe

接力实测:本库给的代码,yfinance 真能取到行情吗?

2026-09-29 用同机环境(yfinance 1.7.0)对 16 个代码逐个试取 5 日行情,结果如下——重点是里面的失败项。

代码来源实测结果说明
600519.SS本库 A 股后缀成功,收盘 1235.58沪市代码在本库与 yfinance 之间可以直接传递
000002.SZ本库 A 股后缀成功,收盘 4.08深市同理
300750.SZ本库 A 股后缀成功,收盘 286.8创业板代码同样可传
0700.HK本库港股后缀成功,收盘 432.0港股代码一致
9988.HK本库港股后缀成功,收盘 106.2同上
000004.SZ直接取本库清单的第 2 行No data found, symbol may be delisted清单里有、行情侧取不到:已退市或长期无成交
000005.SZ直接取本库清单的第 3 行No data found, symbol may be delisted同上,说明清单条目≠可交易标的
000006.SZ / 000007.SZ / 000009.SZ本库清单第 4–6 行成功,收盘 7.62 / 11.08 / 6.86同批次里大部分是正常的,所以必须逐只验证
结论:「本库有这条记录」不等于「这个代码在行情侧有数据」。从清单到可用标的池之间必须加一步行情可用性验证,并把失败的代码单独留档,否则回测里会静默少掉一批标的。
  1. 抽样验证

    从候选池随机抽 10–20 只,用行情工具拉一次短周期数据。预期输出:绝大多数返回行数大于 0,失败项被记录下来。

  2. 全量验证并留档

    对整池逐只取一次数据,把返回为空的代码写进 unavailable.csv。预期输出:得到一个明确的失败清单,而不是「感觉少了一些」。

  3. 把验证结果并入标的池

    用失败清单反选,得到最终可研究池,并在记录里写明验证日期与行情源版本。预期输出:标的池可复现,别人按同样步骤能得到同一份清单。

留档建议:把验证结果与失败清单一起落盘,文件名带上日期与版本(例如 cn_universe_20260929_fd240.csv)。下次上游更新之后,你才能说清上一次的结论是在哪一份 FinanceDatabase 快照上得出的,别人也才能按同样步骤复现。
FinanceDatabase · Duplicates

跨市场重复:同一家公司在多地挂牌怎么处理

这是中国市场最容易被忽略的一步。本库里同一个企业可能同时有多条记录,而它们看起来都「对」。

现象实测证据会带来什么后果处理方式
同一公司在 A 股与港股各有一条country="Hong Kong" 里有 2 行在 exchange=SHH 上市按行业统计时同一家公司被数两次用 exchange/mic 先锁定一个市场
中国公司在美国以粉单出现country="China", exchange="PNK" 实测 409 行用代码去取行情时大量失败按 exchange 排除 PNK/OTCM
同名标的成批出现全库 65,317 行存在同名记录,涉及 19,633 个名字按名称去重会误删不同公司的记录不要只用 name 去重,见数据质量审计页
only_primary_listing 看起来像去重开关对中国标的实测:6,775 → 737 行(砍掉 89.1%),剩下的几乎全是美国 OTC 代码把 A 股主板整批剔除,还以为做了去重改用 exchange/mic 指定市场后再去重
四步去重(本站实测可行):①用 mic 锁定你要的市场 → ②在候选池内按 name 归组,人工确认哪些是真重复 → ③有 isin 的用 isin 交叉验证(注意它缺失率 73%,空值不会被匹配上)→ ④把最终保留的代码写进固定清单,下次直接复用。不要期望一条参数解决去重。
Coverage gaps

中国市场覆盖的四个实测缺口

把缺口写清楚,比笼统地说「覆盖全球」更有用。下面每条都有对应的实测证据。

缺口实测依据对你的影响怎么补
A 股不是全量mic="XSHG" 1,523 行 + exchange="SHZ" 2,100 行 = 3,623 行小市值与新股可能根本不在清单里与交易所披露家数对照,缺口部分另找数据源
标识符大量缺失中国标的 isin 缺失 77.58%、cusip 缺失 90.81%用 ISIN 做跨市场匹配会静默漏匹配优先用代码 + 交易所组合做键,ISIN 只作辅助
市场字段是「英文口径」market 取值如 Shanghai Stock Exchange / KOSPI Stock Market中文习惯的「A 股 / 主板 / 创业板」在本库里没有对应字段自己维护一张映射表,别指望现成板块字段
退市状态只有布尔值delisted 只有 True/False(全库 10,404 行为 True)分不清「退市」与「长期停牌」结合行情侧是否取到数据来判断
诚实的边界:本库对中国市场是「覆盖,但不是国内口径的完整数据」。如果你的研究需要完整的 A 股全样本、准确的停复牌状态或中文板块分类,这套数据只能作为起点,不能作为单一依据。
FAQ

中国市场常见问题

country="China" 为什么会出现纳斯达克的交易所代码?

country 记的是公司所属国家或地区,exchange 才是上市地。实测 country="China" 的 6,775 行分布在 34 个交易所,包含 NYQ、NMS、PNK、LSE、FRA 等。要让结果落在 A 股,得同时加 mic="XSHG" 或 exchange="SHZ"。字段口径以你实际查到的数据为准。

为什么 .SH 后缀查不到东西?

实测 .SH 在本库命中 0 行,沪市的规范后缀是 .SS(如 600519.SS)。这个后缀来自 Yahoo 的命名习惯,yfinance 也沿用同一套写法;换到别的数据源时先确认它对后缀的定义。

怎么筛「A 股」而不是「中国公司」?

把 country="China" 与交易所字段组合:沪市用 mic="XSHG"(实测 1,523 行),深市用 exchange="SHZ"(实测 2,100 行)。两者相加 3,623 行是本站实测的 A 股口径。

港股代码要不要加后缀?

要。港交所挂牌的代码形如 0700.HK,实测全库以 .HK 结尾的共 1,625 行,对应 exchange=HKG、mic=XHKG。注意 country="Hong Kong" 与「在港交所上市」并不等价。

按主上市地去重能不能用 only_primary_listing?

在本库 2.4.0 上不建议。该参数的实现是剔除所有带「点」的索引,而 A 股与港股的规范代码恰好都带点:实测中国标的从 6,775 行掉到 737 行,减少 89.1%,剩下的几乎全是美国 OTC 代码。更可靠的做法是用 exchange/mic 指定市场。

中国市场的部分能不能离线用?

可以,但要自己准备。本库不在包内带数据,每次实例化都会从 GitHub 拉 .bz2 文件;把数据文件放进 site-packages/compression/ 后即可离线加载(实测加载耗时从 16.6 秒降到 2.9 秒)。具体步骤见安装页。

下一步怎么走?

中国市场的数据口径确认之后,建议接着做两件事:把筛选参数与实测命中行数对照一遍,再用数据质量审计的五步脚本把清单洗一遍,避免把重复与空值带进后面的分析。