问题描述
解决方案
在 PTrade 中,查询一只 ETF 是否发布 IOPV(基金份额参考净值)以及其最小申赎单位,可以使用 get_etf_info 函数。
核心步骤
- 调用接口:使用
get_etf_info(etf_code)获取指定 ETF 的信息字典。 - 获取 IOPV 发布状态:读取返回字典中的
publish字段。1:表示需要发布 IOPV。0:表示不需要发布。
- 获取最小申赎单位:读取返回字典中的
report_unit字段。
注意事项
- 适用范围:该函数仅支持 Ptrade 客户端,且仅在 股票交易模块(实盘)可用,回测环境通常无法获取此数据。
- 参数格式:
etf_code为字符串(如'510050.SS')。
代码示例
以下代码展示了如何在策略中获取并打印上证50ETF(510050.SS)的相关信息:
def initialize(context):
# 设置要查询的ETF代码,例如上证50ETF
g.etf_code = '510050.SS'
set_universe(g.etf_code)
def handle_data(context, data):
# 调用API获取ETF信息
# 注意:get_etf_info 仅在交易模块可用,回测中可能返回空或报错
etf_info_map = get_etf_info(g.etf_code)
# 检查是否成功获取数据
if etf_info_map and g.etf_code in etf_info_map:
info = etf_info_map[g.etf_code]
# 1. 获取是否发布IOPV
# 字段 'publish': 1是需要发布,0是不需要发布
publish_flag = info.get('publish')
# 2. 获取最小申购、赎回单位
# 字段 'report_unit': 最小申购、赎回单位(int)
min_unit = info.get('report_unit')
# 打印结果
log.info("ETF代码: %s" % g.etf_code)
if publish_flag == 1:
log.info("IOPV发布状态: 是 (1)")
else:
log.info("IOPV发布状态: 否 (0)")
log.info("最小申赎单位: %s" % min_unit)
# 打印完整信息以便查看其他字段
log.info("完整ETF信息: %s" % info)
else:
log.info("未能获取到 %s 的ETF信息,请检查是否处于交易环境。" % g.etf_code)
常见问题 (Q&A)
Q: get_etf_info 函数还能获取哪些其他信息?
A: 除了 IOPV 发布状态和最小申赎单位外,该函数还可以获取:
cash_balance: 现金差额max_cash_ratio: 现金替代比例上限nav_percu: T-1日申购基准单位净值nav_pre: T-1日基金单位净值allot_max: 申购上限redeem_max: 赎回上限etf_redemption_code: 申赎代码
Q: 为什么我在回测中调用 get_etf_info 返回为空?
A: 根据 PTrade API 文档,get_etf_info 仅支持 PTrade 客户端且仅在股票交易模块(实盘或模拟盘)可用。回测环境通常不支持获取此类柜台相关的实时业务数据。
Q: report_unit 的单位是什么?
A: report_unit 返回的是整数(int),代表最小申购或赎回的份数。例如返回 1000000,表示最小申赎单位为 100 万份。