本方案由 ++EasyQuant AI++++量化助手++ 提供。
问题背景
ETF 套利、申购赎回和成分股篮子分析,都需要获取 ETF 的申赎清单数据。QMT 提供 download_etf_info() 下载 ETF 申赎清单,并通过 get_etf_info() 读取本地数据。
实现思路
-
下载最新 ETF 申赎清单数据。
-
读取全部 ETF 信息。
-
按 ETF 代码获取单只 ETF 清单。
-
提取申购赎回状态、现金差额和成分股信息。
完整代码示例
from xtquant import xtdata
ETF_CODE = "510050.SH"
def download_etf_data():
"""
下载全部ETF申赎清单信息。
"""
xtdata.download_etf_info()
print("ETF申赎清单数据下载完成")
def get_single_etf_info(etf_code):
"""
获取单只ETF的申赎清单信息。
"""
all_etf_info = xtdata.get_etf_info()
if not all_etf_info:
print("未获取到ETF申赎清单数据")
return None
etf_info = all_etf_info.get(etf_code)
if etf_info is None:
print("未找到ETF代码:", etf_code)
return None
return etf_info
def analyse_etf_info(etf_info):
"""
输出ETF申赎状态和成分股信息。
"""
print("========== ETF基础信息 ==========")
print("现金差额:", etf_info.get("现金差额"))
print("申购允许:", etf_info.get("是否允许申购"))
print("赎回允许:", etf_info.get("是否允许赎回"))
print("申购单位:", etf_info.get("申购赎回单位"))
components = etf_info.get("成份股信息", [])
print("\n========== ETF成分股 ==========")
print("成分股数量:", len(components))
for component in components[:10]:
print(component)
def main():
# 第一步:下载清单数据
download_etf_data()
# 第二步:读取指定ETF信息
etf_info = get_single_etf_info(ETF_CODE)
if etf_info is None:
return
# 第三步:分析数据
analyse_etf_info(etf_info)
if __name__ == "__main__":
main()
筛选允许申购赎回的 ETF
from xtquant import xtdata
def get_available_etfs():
all_etf_info = xtdata.get_etf_info()
available_etfs = []
for etf_code, etf_info in all_etf_info.items():
can_create = etf_info.get("是否允许申购")
can_redeem = etf_info.get("是否允许赎回")
if can_create == 1 and can_redeem == 1:
available_etfs.append(etf_code)
return available_etfs
注意事项
-
使用前应调用
xtdata.download_etf_info()下载最新数据。 -
ETF 申赎清单通常每日更新,策略运行前建议重新下载或确认本地数据日期。
-
不同版本或数据模式下,返回字段名称可能略有差异,应先打印字典结构确认。
-
现金替代标志决定某些成分券能否或必须使用现金替代。
-
获取清单不代表账户具备 ETF 申购赎回资格,实际权限以券商账户为准。
总结
QMT 的 ETF 申赎清单接口可用于读取 ETF 成分股、现金差额和申购赎回状态,是 ETF 套利、篮子交易及申赎策略的重要数据基础。