🚀 AI 一键生成 ptrade 策略代码
立即体验

如何在 ptrade 中通过 get_etf_stock_info 查询 ETF 成分股现金替代标志及替代溢价率?

ptrade | 发布时间: 2026/7/26
以下内容由 EasyQuant 生成。

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: ptrade ETF 申赎进阶:解析成分股现金替代与持仓替代标志

Question: 如何在 ptrade 中通过 get_etf_stock_info 查询 ETF 成分股的现金替代标志(cash_replace_flag)及替代溢价率?

解决方案

ptrade ETF 申赎进阶:解析成分股现金替代与持仓替代标志

在进行 ETF 套利或申赎交易时,准确查询 ETF 成分股的现金替代标志及溢价比例是至关重要的一步。ptrade 提供了专门的 get_etf_stock_info 接口来获取成分股的详细申赎属性。


一、接口简介:get_etf_stock_info

1. 使用场景

该函数仅支持 Ptrade 客户端可用,并且仅在股票交易模块中生效。

2. 语法结构

get_etf_stock_info(etf_code, security)

3. 参数说明

  • etf_code (str): 单支 ETF 代码,例如 '510050.SS'
  • security (str 或 list[str]): 单只股票代码或多只股票代码构成的列表,例如 '600000.SS'['600000.SS', '600036.SS']

二、返回字段解析

接口调用成功后返回一个 dict 对象,key 为成分股代码,value 为包含成分股属性的字典:

  • cash_replace_flag (str): 现金替代标志
    • '0': 禁止替代
    • '1': 允许替代
    • '2': 必须替代
    • '3': 非沪市退补现金替代
    • '4': 非沪市必须现金替代
    • '5': 非沪深退补现金替代
    • '6': 非沪深必须现金替代
  • replace_ratio (float): 保证金率(溢价比率),仅在允许现金替代时有效。
  • replace_balance (float): 替代金额,仅在必须现金替代时有效。
  • code_num (float): 成分券数量。
  • is_open (int): 停牌标志,0 表示停牌,1 表示非停牌。

三、Python 代码示例

以下示例展示了如何在 handle_data 盘中事件中查询华夏上证50ETF(510050.SS)成分股(浦发银行 600000.SS、招商银行 600036.SS)的现金替代标志及替代溢价率:

def initialize(context):
    g.etf = '510050.SS'
    g.stocks = ['600000.SS', '600036.SS']
    set_universe(g.etf)

def handle_data(context, data):
    # 查询 ETF 成分股的详细替代信息
    stocks_info = get_etf_stock_info(g.etf, g.stocks)
    log.info("ETF成分股属性: %s" % stocks_info)
    
    for stock_code, info in stocks_info.items():
        flag = info.get('cash_replace_flag')
        ratio = info.get('replace_ratio')
        balance = info.get('replace_balance')
        
        log.info("标的代码: %s, 现金替代标志: %s, 替代溢价比率: %s, 替代金额: %s" % (
            stock_code, flag, ratio, balance
        ))

四、注意事项

  1. 实盘限制:该接口只在实盘/模拟盘交易模块中可用,研究与回测环境不支持此接口。
  2. 组合下单结合:在使用 etf_basket_order 进行成分股篮子下单时,可将查询到的替代标志传入 info 参数,实现灵活控制现金替代与持仓替代策略。