🚀 AI 一键生成 ptrade 策略代码

PTrade ETF 交易:查询 ETF 是否发布 IOPV 及最小申赎单位

ptrade | 发布时间: 2025/12/20
以下内容由 EasyQuant 生成。

问题描述

如何查询一只 ETF 是否发布 IOPV 以及它的最小申赎单位是多少?

解决方案

在 PTrade 中,查询一只 ETF 是否发布 IOPV(基金份额参考净值)以及其最小申赎单位,可以使用 get_etf_info 函数。

核心步骤

  1. 调用接口:使用 get_etf_info(etf_code) 获取指定 ETF 的信息字典。
  2. 获取 IOPV 发布状态:读取返回字典中的 publish 字段。
    • 1:表示需要发布 IOPV。
    • 0:表示不需要发布。
  3. 获取最小申赎单位:读取返回字典中的 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 万份。