首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >如何用 Python 获取全部 A 股代码列表与基础信息?

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

原创
作者头像
用户7083614
发布2026-09-09 10:01:00
发布2026-09-09 10:01:00
130
举报

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

为什么会有这个问题

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

分步骤解决

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

代码语言:python
复制
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:

代码语言:python
复制
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

代码语言:python
复制
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 步:合并并落库为一份股票清单

代码语言:python
复制
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),全市场一次取回即可。

关键坑与注意事项

  • ext.* 涨跌幅/换手率是小数:0.05 表示 5%,别当成百分数。
  • 股本单位是"股":市值 = last_price × total_shares(或流通市值用 float_shares)。
  • 标的池默认只含在市标的:退市股不在池中,做历史回测要避免幸存者偏差需另行保留退市序列。
  • 港股/美股/指数全市场池需更高权限:当前套餐不支持会抛 PermissionError,可改用单标的 instruments.get
  • quotes 是实时快照:代码清单相对稳定,但价格字段是当前值,做历史横截面别用今天的快照。

常见问题(FAQ)

Q:怎么只要沪市 / 深市 / 北交所?

A:拿到清单后按 exchange(SH/SZ/BJ)或代码后缀过滤即可。

Q:能拿到上市日期做次新股筛选吗?

A:可以,用 instrumentsext.listing_date,按日期过滤即可。

Q:ETF 和股票能一起取吗?

A:分别用 CN_StockCN_ETF 两个池取回后 concat 合并。

Q:需要付费吗?

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

小结

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

参考

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 为什么会有这个问题
  • 分步骤解决
    • 第 1 步:一次取回全部 A 股代码 + 实时快照
    • 第 2 步:换成 ETF 清单
    • 第 3 步:补齐上市日期、股本、涨跌停价
    • 第 4 步:合并并落库为一份股票清单
  • 关键坑与注意事项
  • 常见问题(FAQ)
  • 小结
  • 参考
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档