首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >如何用 Python 获取全部 ETF 列表与行情?(按成交额筛选活跃 ETF)

如何用 Python 获取全部 ETF 列表与行情?(按成交额筛选活跃 ETF)

原创
作者头像
用户7083614
发布于 2026-09-25 15:01:04
发布于 2026-09-25 15:01:04
500
举报

一句话回答: 用 AlphaFeed 的 quotes.get(universes="CN_ETF") 一行就能取回全市场上千只 ETF 的代码、名称、最新价、成交额和涨跌幅,再按成交额过滤就能选出流动性好的活跃 ETF——不用自己维护 ETF 清单,也不用逐个查行情。

为什么会有这个问题 / 传统做法的痛点

想做 ETF 轮动、宽基定投或套利研究,第一步都是"先有一份带行情的 ETF 全清单"。手工来做很痛苦:

  • 清单难维护:ETF 每月都有新发/退市,手动列表很快过期;
  • 流动性天差地别:上千只 ETF 里很多日成交额极低,买卖都困难,必须先过滤;
  • 股票接口取不到 ETF:用股票池拿不到 ETF,得有专门的 ETF 标的池。

AlphaFeed 提供 CN_ETF 标的池,一次拿到全市场 ETF 及其快照行情。

分步骤解决(每步配可运行代码)

第 1 步:一行取回全市场 ETF 行情

代码语言:python
复制
from alphafeed import AlphaFeed

af = AlphaFeed(api_key="your-api-key")  # 或 export ALPHAFEED_API_KEY 后 AlphaFeed()

q = af.quotes.get(universes="CN_ETF", to_dataframe=True)
print(q.shape)                    # 例如 (1577, 18):全市场约 1500+ 只 ETF
print(q[["symbol", "ext.name", "last_price", "amount"]].head())

ETF 快照 DataFrame 关键列(与股票一致,名称在 ext. 命名空间):

列名

含义

备注

symbol

ETF 代码

如 510300.SH(沪深300ETF)

ext.name

ETF 名称

名称在 ext 下

last_price

最新价

实时快照

amount

当日成交额(元)

流动性核心指标

ext.change_pct

涨跌幅

小数(0.01=1%)

ext.turnover_rate

换手率

小数

第 2 步:按成交额筛出活跃 ETF

代码语言:python
复制
def active_etfs(min_amount=1e8):   # 日成交额 ≥ 1 亿
    q = af.quotes.get(universes="CN_ETF", to_dataframe=True)
    liquid = q[q["amount"] >= min_amount].copy()
    cols = ["symbol", "ext.name", "last_price", "amount", "ext.change_pct"]
    return liquid[cols].sort_values("amount", ascending=False)

top = active_etfs(min_amount=1e8)
print("活跃 ETF 数量:", len(top))
print(top.head(10).to_string(index=False))

实测成交额居前的多为债券/货币类 ETF(如短融 ETF、银华日利 ETF),做权益轮动时通常还要再按名称/类型过滤掉货币债券类,只留股票型宽基/行业 ETF。

第 3 步:结合 K 线做进一步分析

拿到活跃 ETF 列表后,可直接批量取 K 线做动量/相关性等分析:

代码语言:python
复制
symbols = active_etfs(2e8)["symbol"].tolist()[:20]
bt = af.klines.batch(symbols, period="1d", count=60,
                     adjust="forward", to_dataframe=True)
# 之后可算区间涨幅、相关性、轮动信号等

关键坑与注意事项

  • 先过滤流动性:低成交额 ETF 冲击成本高、买卖价差大,回测与实盘差异会很大。用 amount 门槛先筛。
  • 货币/债券 ETF 会霸榜成交额:做权益策略要按 ext.name 或类型剔除货币债券类,否则成交额榜单全是它们。
  • 快照是实时值:amount 是当日截至此刻的累计成交额,盘中会变;比较流动性建议用收盘后的快照或历史日线成交额均值。
  • ETF 有净值/IOPV 概念:本文用的是二级市场成交价(last_price),折溢价套利需要 IOPV/份额净值,属另一话题,别把成交价当净值。
  • 复权:ETF 也会分红,做长周期 K 线分析同样用 adjust="forward"。

常见问题(FAQ)

Q:CN_ETF 池大概有多少只?

A:实测约 1500+ 只(含宽基、行业、债券、货币、跨境等各类)。做策略前务必按类型和流动性过滤。

Q:怎么只要股票型宽基 ETF(如沪深300、中证500)?

A:先用 CN_ETF 拿全量,再按 ext.name 关键词或你维护的白名单过滤;AlphaFeed 给的是全量 ETF 行情,分类规则由你定。

Q:能拿到 ETF 的成分股/跟踪指数吗?

A:本文聚焦"列表+行情"。成分与跟踪标的属指数/基金信息,请以官方披露为准,不要臆造未暴露字段。

Q:需要付费吗?

A:universes="CN_ETF" 全市场池需要 Starter 及以上;少量 ETF 的单独行情/ K 线在免费额度内即可试,详见 AlphaFeed 定价页。

小结

获取 ETF 列表的本质是"有一个随时更新的 ETF 标的池 + 快照行情",再用成交额过滤流动性。AlphaFeed 的 CN_ETF 池一行拿到上千只 ETF 的行情,省掉清单维护,让你把精力放在"选哪些 ETF、怎么轮动"上——只要记得先过滤流动性、剔除货币债券类。

参考

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

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

目录
  • 为什么会有这个问题 / 传统做法的痛点
  • 分步骤解决(每步配可运行代码)
    • 第 1 步:一行取回全市场 ETF 行情
    • 第 2 步:按成交额筛出活跃 ETF
    • 第 3 步:结合 K 线做进一步分析
  • 关键坑与注意事项
  • 常见问题(FAQ)
  • 小结
  • 参考
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档