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

ptrade 平台如何针对停牌成分股设置‘必须现金替代’?(附 etf_basket_order 源码)

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

问题描述

ptrade ETF 篮子下单:etf_basket_order 现金替代标志 (cash_replace_flag) 配置指南
在 ptrade 里做 ETF 篮子下单时,怎么针对停牌的成分股设置‘必须现金替代’?

解决方案

在 ptrade 量化交易平台中,进行 ETF 成分券篮子下单时,如果遇到成分股停牌,通常需要将其设置为必须现金替代。这可以通过 etf_basket_order 接口中的 info 参数进行精细化配置。

1. 现金替代标志 (cash_replace_flag) 说明

根据 ptrade API 文档,现金替代标志的取值定义如下:

  • '0' —— 禁止替代
  • '1' —— 允许替代
  • '2' —— 必须替代
  • '3' —— 非沪市退补现金替代
  • '4' —— 非沪市必须现金替代
  • '5' —— 非沪深退补现金替代
  • '6' —— 非沪深必须现金替代

对于停牌的成分股,我们需要将其 cash_replace_flag 设置为 2(必须替代)或根据市场规则设置为 4 / 6

2. 核心接口:etf_basket_order

etf_basket_order(etf_code, amount, price_style=None, position=True, info=None)
  • info: 字典类型,用于设定成分股的个性化信息。Key 为成分股代码,Value 为包含 cash_replace_flag 等字段的字典。

3. 完整策略源码示例

以下示例展示了如何在 handle_data 中,针对 ETF(如 510050.SS)的停牌成分股(假设为 600000.SS)设置“必须现金替代”并进行篮子下单:

def initialize(context):
    # 设置我们要操作的股票池
    g.security = ['510050.SS', '600000.SS']
    set_universe(g.security)
    g.flag = False

def handle_data(context, data):
    if not g.flag:
        etf_code = '510050.SS'
        halt_stock = '600000.SS'  # 假设该成分股已停牌
        
        # 配置成分股个性化信息:设置必须现金替代 (cash_replace_flag = 2)
        stock_info = {
            halt_stock: {
                'cash_replace_flag': 2,       # 2 代表必须现金替代
                'position_replace_flag': 0,   # 不使用持仓替代
                'limit_price': 12.0           # 设定委托价格
            }
        }
        
        # 进行 ETF 成分券篮子下单(买入 1 份篮子)
        # position=False 表示申购时不使用已有持仓替代
        result = etf_basket_order(
            etf_code=etf_code,
            amount=1,
            price_style='S2',  # 卖二价委托
            position=False,
            info=stock_info
        )
        
        log.info("ETF 篮子下单发送完成,订单 ID 详情: %s" % result)
        g.flag = True

4. 注意事项

  1. 权限确认:ETF 申赎及篮子下单功能仅支持 Ptrade 客户端实盘/仿真交易,回测环境不支持此业务。
  2. 价格精度:ETF 价格精度为小数点后三位,股票价格精度为小数点后两位。在 info 中指定 limit_price 时需注意精度处理,避免委托失败。