夜雨聆风学习资料网

ARTICLE · 1052091

ETF量化交易必看:如何一行代码抓取 ETF 成分股清单?(附完整)

ETF量化交易必看:如何一行代码抓取 ETF 成分股清单?(附完整)

做 ETF 量化交易时,经常需要拿到 ETF 背后的一篮子成分股。如果手动去官网下载、复制整理,不仅费时,还容易出错。

在主流量化软件 Ptrade 里,我们只需要一行代码,就能一键拉取所有ETF成分股清单,快速拿到成分股代码,用来监控行情、估算基金净值、搭建套利策略。

或者可以查询某一只股票是否为某只基金里面的成分股,比如沪深 300ETF 里有没有茅台、工行这些龙头股,可以快速判断个股涨跌会不会带动这只 ETF,做 ETF 套利、行业轮动策略时筛选标的;

现在就带大家实操完整获取流程。

一、PTrade函数详解

get_etf_stock_list - 获取ETF成分券列表

get_etf_stock_list(etf_code)

根据上传的 ETF 证券代码,返回该 ETF 包含的全部实时成分股代码列表。

参数名
类型
必填
说明
etf_code
str
单只 ETF 的证券代码,需带市场后缀,510300.SS

代码示例:

def initialize(context):    g.security = '600570.SS'    set_universe(g.security)def before_trading_start(context, data):#ETF成分券列表    stock_list = get_etf_stock_list('510020.SS')    log.info(stock_list)def handle_data(context, data):    pass

返回示例:

['600000.SS''600010.SS''600016.SS'

注意:一次只能传入一个 ETF 代码,不支持传入批量代码查询。如果需要获取多只 ETF 的成分股,可以通过循环逐次调用该函数。

二、PTrade实际运用场景

示例 1:查询沪深 300ETF 的成分股

# 初始化: 策略启动时的准备def initialize(context):print("策略启动,准备查询沪深300ETF的成分股")# 设定要查的ETF    g.etf_code = "510300.SS"# 沪深300ETF代码# 开盘前查一次,拿到成分股清单def before_trading_start(context, data):# 1. 调用函数,获取ETF的所有成分股    component_stocks = get_etf_stock_list(g.etf_code)# 2. 打印结果(只显示前10支,避免太多看不过来)print(f"{g.etf_code}(沪深300ETF)的成分股(前10支):")print(component_stocks[:10])  # [:10]表示只取前10个print(f"\n这支ETF共持有 {len(component_stocks)} 支成分股")# 盘中交易函数(空着就行)def handle_data(context, data):    pass

PTrade查询结果:

由于只做简单展示,我们只获取沪深300的前10只成份股,获取结果如上!

注意:返回的成分股为当前ETF的实时成分股数据,不包含历史成分股信息。

另外,返回结果中仅包含成分股的证券代码,不直接返回股票名称、持仓权重、行业分类等信息,如果需要,可以再次调用PTrade其他函数做二次查询。

示例二:查询某只股票是否是沪深300ETF成分股

def initialize(context):print("策略启动:上证50ETF成分股查询")    g.etf_code = "510050.SS"# 上证50ETF代码    g.target_stock = "600519.SS"# 目标股票:贵州茅台def before_trading_start(context, data):# 1. 获取ETF全部成分股列表    etf_stocks = get_etf_stock_list(g.etf_code)# 2. 校验目标股是否在成分股中if g.target_stock in etf_stocks:print(f"√ {g.target_stock}(贵州茅台)是 {g.etf_code}(上证50ETF)的成分股")else:print(f"× {g.target_stock}(贵州茅台)不在该ETF成分股范围内")# 3. 输出成分股概览print(f"\n上证50ETF成分股总数量:{len(etf_stocks)}")print("前8只成分股:", etf_stocks[:8])

PTrade查询结果:

我们校验贵州茅台600519这只股票是否在上证50ETF的成分股中,验证结果为“是”,也就是说贵州茅台是上证 50ETF 的持仓篮子,属于它的成分股;

以上就是今天分享的全部内容,你学会了吗?

相关学习资料