AlphaFeed Blog

如何用 Python 获取全部 A 股代码列表与基础信息?(含 ETF、上市日期、股本)

入门与取数 · 代码验证于 2026-09-06

如何用 Python 获取全部 A 股代码列表与基础信息?

一句话回答: 做任何选股、回测、盯盘之前,你都需要一份”全市场标的清单”。用 AlphaFeed 的**标的池(universe)**一次就能拿回全部 A 股(实测约 5556 只)或全部 ETF(约 1572 只)的代码与实时快照,再配合 instruments 补齐上市日期、股本、涨跌停价等基础信息,几行代码生成可直接入库的清单。

为什么会有这个问题

新手常卡在第一步:“我连全 A 有哪些代码都不知道,怎么批量取数?“手工维护代码表既容易漏(新股/退市)、又不带基础信息。理想方案是从数据源直接拉全市场池,代码、名称、上市日期一步到位,且随市场自动更新。

分步骤解决

第 1 步:一次取回全部 A 股代码 + 实时快照

from alphafeed import AlphaFeed
import pandas as pd

af = AlphaFeed()  # 读取 ALPHAFEED_API_KEY

q = af.quotes.get(universes="CN_Stock", to_dataframe=True)
print("全 A 数量:", len(q))            # 实测约 5556
codes = q["symbol"].tolist()
print(codes[:5])                       # ['301069.SZ', '002666.SZ', ...]

quotes 的标的池不仅给代码,还带当前行情与常用字段:

字段含义说明
symbol标准代码如 600519.SH(交易所后缀)
ext.name证券简称如 贵州茅台
last_price最新价实时快照
ext.change_pct涨跌幅(小数)0.03 = 3%
ext.turnover_rate换手率(小数)—
ext.type品种类型全 A 为 cn_equity

第 2 步:换成 ETF 清单

把 universes 换成 CN_ETF 即可拿到全部 ETF:

etf = af.quotes.get(universes="CN_ETF", to_dataframe=True)
print("全 A ETF 数量:", len(etf))       # 实测约 1572

支持的池取值(本文实测可用者见备注):

universe含义备注
CN_Stock全部 A 股✅ 实测约 5556 只
CN_ETF全部沪深 ETF✅ 实测约 1572 只

港股/美股全市场池、指数池等属更高权限,若返回 PermissionError: Access mode 'universe' not available 说明当前套餐未开通,可按单个代码用 instruments.get 取基础信息,或升级套餐。

第 3 步:补齐上市日期、股本、涨跌停价

quotes 给的是行情,静态基础信息(上市日期、股本、每笔最小变动、当日涨跌停价)用 instruments.batch:

insts = af.instruments.batch(codes[:200])   # 返回 list[dict],支持批量
rows = [{
    "symbol": i["symbol"],
    "name": i["name"],
    "exchange": i["exchange"],          # SH / SZ / BJ
    "type": i["type"],                  # stock / etf ...
    "listing_date": i["ext"].get("listing_date"),
    "total_shares": i["ext"].get("total_shares"),
    "float_shares": i["ext"].get("float_shares"),
    "limit_up": i["ext"].get("limit_up"),
    "limit_down": i["ext"].get("limit_down"),
    "tick_size": i["ext"].get("tick_size"),
} for i in insts]
info = pd.DataFrame(rows)
print(info.head(3).to_string(index=False))

instruments 返回的每条记录字段:

字段含义
symbol / code标准代码 / 纯数字代码
name证券简称
exchange交易所(SH/SZ/BJ)
type品种类型(stock/etf 等)
ext.listing_date上市日期
ext.total_shares / float_shares总股本 / 流通股本
ext.limit_up / limit_down当日涨/跌停价
ext.tick_size最小价格变动单位

第 4 步:合并并落库为一份股票清单

insts_all = af.instruments.batch(codes)     # 全量基础信息(约 5556)
base = pd.DataFrame([{
    "symbol": i["symbol"], "name": i["name"], "exchange": i["exchange"],
    "type": i["type"], "listing_date": i["ext"].get("listing_date"),
    "total_shares": i["ext"].get("total_shares"),
    "float_shares": i["ext"].get("float_shares"),
} for i in insts_all])

base.to_csv("a_share_list.csv", index=False)
print("已保存清单:", base.shape)

instruments.batch 内置分批与并发(batch_size/max_workers),全市场一次取回即可。

关键坑与注意事项

常见问题(FAQ)

Q:怎么只要沪市 / 深市 / 北交所? A:拿到清单后按 exchange(SH/SZ/BJ)或代码后缀过滤即可。

Q:能拿到上市日期做次新股筛选吗? A:可以,用 instruments 的 ext.listing_date,按日期过滤即可。

Q:ETF 和股票能一起取吗? A:分别用 CN_Stock 和 CN_ETF 两个池取回后 concat 合并。

Q:需要付费吗? A:全市场池(universes)需 Starter 及以上;单标的 instruments.get/quotes 有免费额度。详见定价页。

小结

获取全市场代码清单是量化第一步。用 AlphaFeed 的 CN_Stock/CN_ETF 标的池一次拿全代码与快照,再用 instruments.batch 补齐上市日期、股本、涨跌停等基础信息,几行代码就能生成可入库、随市场更新的股票清单。

相关链接:


免责声明:本文仅为技术与数据接口使用示例,代码与逻辑仅供学习研究,不构成投资建议。市场有风险,历史数据不代表未来表现。