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

PTrade ETF 实盘套利:如何使用 etf_basket_order 进行成分券篮子下单与替代设置?

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

问题描述

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

Title: PTrade ETF 实盘套利:etf_basket_order 成分股持仓替代与现金替代高级应用

Question: 如何在 ptrade 中使用 etf_basket_order 接口进行 ETF 成分券篮子下单,并设置持仓替代与现金替代?

解决方案

PTrade ETF 实盘套利:etf_basket_order 成分股持仓替代与现金替代高级应用

在 ETF 申赎与一二级市场套利策略中,成分券篮子下单(ETF Basket Order)是核心交易环节。PTrade 平台提供了原生的 etf_basket_order 接口,支持对 ETF 成分股进行一键快速下单,并灵活配置持仓替代现金替代模式,有效提高下单效率并降低资金占用。


一、接口基本语法与参数解析

etf_basket_order 仅在 PTrade 交易模块及股票实盘/模拟盘环境中可用。

etf_basket_order(etf_code, amount, price_style=None, position=True, info=None)

关键参数说明:

  1. etf_code (str): 单支 ETF 代码,例如 '510050.SS'
  2. amount (int): 下单篮子份数。正数表示买入成分股篮子,负数表示卖出成分股篮子
  3. price_style (str): 委托价位,支持 'B1'~'B5'(买一至买五)、'S1'~'S5'(卖一至卖五)、'new'(最新价)。默认为 'new'
  4. position (bool): 持仓替代开关(仅在篮子买入时生效)。
    • True(默认):优先使用现有持仓进行扣减,仅买入不足部分的成分股。
    • False:不使用现有持仓,全额买入一整篮成分股。
  5. info (dict): 针对特定成分股的高级控制字典,结构为 {成分股代码: {配置项}}
    • cash_replace_flag: 现金替代标志(1 为替代,0 为不替代)。仅允许现金替代的标的生效。
    • position_replace_flag: 单股持仓替代标志(1 为替代,0 为不替代)。优先级高于全局 position 参数。
    • limit_price: 该成分股的指定委托价格。

二、核心替代机制解析

1. 持仓替代(Position Replacement)

当投资者手头已持有部分 ETF 成分股时,若需要凑齐一篮子股票用于 ETF 申购,开启持仓替代(position=True)可以避免对已持有的股票进行重复买入,大幅节省交易资金与印花税/佣金开支。

2. 现金替代(Cash Replacement)

某些成分股可能处于停牌、涨跌停限制或流动性枯竭状态,无法直接在二级市场买入。此时通过 info 字典将该股票设置 cash_replace_flag=1,可以用现金替代该成分股进行后续的申购,保证套利/申赎流程顺畅进行。


三、完整 Python 策略示例

以下示例展示了如何在 PTrade 盘中运行周期内,查询 ETF 成分股信息,并调用 etf_basket_order 进行附带持仓替代与现金替代的组合下单:

# PTrade 策略:ETF 成分券篮子高级下单示例

def initialize(context):
    # 设置订阅标的
    g.etf_code = '510050.SS'
    g.test_stock = '600000.SS'
    set_universe([g.etf_code, g.test_stock])
    g.executed = False

def handle_data(context, data):
    if g.executed:
        return
    
    # 1. 普通篮子买入(使用默认持仓替代与最新价)
    # etf_basket_order(g.etf_code, 1, price_style='new', position=True)
    
    # 2. 精细化控制:设置特定成分股的现金替代与定制限价
    # 假设 600000.SS 需要采用现金替代,且指定买入限价为 12.00 元
    custom_info = {
        '600000.SS': {
            'cash_replace_flag': 1,      # 开启现金替代
            'position_replace_flag': 1,  # 开启该股持仓替代
            'limit_price': 12.00         # 指定该股买入价格
        }
    }
    
    # 执行成分股篮子下单:买入 1 份篮子,指定卖三价 (S3),关闭全局持仓替代,但通过 info 单独控制 600000.SS
    order_results = etf_basket_order(
        etf_code=g.etf_code,
        amount=1,
        price_style='S3',
        position=False,
        info=custom_info
    )
    
    # 3. 输出下单结果(返回 dict,key 为股票代码,value 为 order_id)
    if order_results:
        log.info("ETF 篮子下单成功,订单详情: %s" % str(order_results))
    else:
        log.error("ETF 篮子下单失败或返回为空。")
        
    g.executed = True

四、注意事项与最佳实践

  1. 小数点精度限制:股票买卖价格需保留两位小数,ETF 申赎与单位净值需保留三位小数,入参 limit_price 时注意取整/四舍五入处理。
  2. 配合申赎接口:成分股买入成功后,可配合 etf_purchase_redemption(etf_code, amount) 接口完成一键申购,实现完整的“一二级市场套利”闭环。
  3. 快照依赖:如果不传 limit_priceprice_style,系统默认依赖最新行情快照。若盘中极速行情未及时推送,可能导致委托失败,建议在流动性充裕的档位(如 S3/B3)进行报单。