3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 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)
etf_code (str): 单支 ETF 代码,例如 '510050.SS'。amount (int): 下单篮子份数。正数表示买入成分股篮子,负数表示卖出成分股篮子。price_style (str): 委托价位,支持 'B1'~'B5'(买一至买五)、'S1'~'S5'(卖一至卖五)、'new'(最新价)。默认为 'new'。position (bool): 持仓替代开关(仅在篮子买入时生效)。
True(默认):优先使用现有持仓进行扣减,仅买入不足部分的成分股。False:不使用现有持仓,全额买入一整篮成分股。info (dict): 针对特定成分股的高级控制字典,结构为 {成分股代码: {配置项}}。
cash_replace_flag: 现金替代标志(1 为替代,0 为不替代)。仅允许现金替代的标的生效。position_replace_flag: 单股持仓替代标志(1 为替代,0 为不替代)。优先级高于全局 position 参数。limit_price: 该成分股的指定委托价格。当投资者手头已持有部分 ETF 成分股时,若需要凑齐一篮子股票用于 ETF 申购,开启持仓替代(position=True)可以避免对已持有的股票进行重复买入,大幅节省交易资金与印花税/佣金开支。
某些成分股可能处于停牌、涨跌停限制或流动性枯竭状态,无法直接在二级市场买入。此时通过 info 字典将该股票设置 cash_replace_flag=1,可以用现金替代该成分股进行后续的申购,保证套利/申赎流程顺畅进行。
以下示例展示了如何在 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
limit_price 时注意取整/四舍五入处理。etf_purchase_redemption(etf_code, amount) 接口完成一键申购,实现完整的“一二级市场套利”闭环。limit_price 或 price_style,系统默认依赖最新行情快照。若盘中极速行情未及时推送,可能导致委托失败,建议在流动性充裕的档位(如 S3/B3)进行报单。