一句话回答: 做任何选股、回测、盯盘之前,你都需要一份"全市场标的清单"。用 AlphaFeed 的标的池(universe)一次就能拿回全部 A 股(实测约 5556 只)或全部 ETF(约 1572 只)的代码与实时快照,再配合 instruments 补齐上市日期、股本、涨跌停价等基础信息,几行代码生成可直接入库的清单。
新手常卡在第一步:"我连全 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 的标的池不仅给代码,还带当前行情与常用字段:
字段 | 含义 | 说明 |
|---|---|---|
| 标准代码 | 如 |
| 证券简称 | 如 |
| 最新价 | 实时快照 |
| 涨跌幅(小数) | 0.03 = 3% |
| 换手率(小数) | — |
| 品种类型 | 全 A 为 |
把 universes 换成 CN_ETF 即可拿到全部 ETF:
etf = af.quotes.get(universes="CN_ETF", to_dataframe=True)
print("全 A ETF 数量:", len(etf)) # 实测约 1572支持的池取值(本文实测可用者见备注):
universe | 含义 | 备注 |
|---|---|---|
| 全部 A 股 | ✅ 实测约 5556 只 |
| 全部沪深 ETF | ✅ 实测约 1572 只 |
港股/美股全市场池、指数池等属更高权限,若返回
PermissionError: Access mode 'universe' not available说明当前套餐未开通,可按单个代码用instruments.get取基础信息,或升级套餐。
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 返回的每条记录字段:
字段 | 含义 |
|---|---|
| 标准代码 / 纯数字代码 |
| 证券简称 |
| 交易所(SH/SZ/BJ) |
| 品种类型(stock/etf 等) |
| 上市日期 |
| 总股本 / 流通股本 |
| 当日涨/跌停价 |
| 最小价格变动单位 |
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 是实时快照:代码清单相对稳定,但价格字段是当前值,做历史横截面别用今天的快照。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 补齐上市日期、股本、涨跌停等基础信息,几行代码就能生成可入库、随市场更新的股票清单。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。