3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 ptrade 量化交易终端中,可以通过系统提供的 ETF 专用接口快速实现 ETF 的申购、赎回以及成分券篮子下单,从而搭建高效的 ETF 日内折溢价套利策略。
用于发起单只 ETF 基金的申购与赎回操作。
etf_purchase_redemption(etf_code, amount, limit_price=None)etf_code (str): ETF 标的代码(如 '510050.SS')。amount (int): 申赎数量。正数表示申购,负数表示赎回。limit_price (float): 买卖限价(可选)。order_id (str),失败返回 None。在套利交易中,通常需要配合成分券一键买卖。
etf_basket_order(etf_code, amount, price_style=None, position=True, info=None)etf_code (str): ETF 代码。amount (int): 下单篮子份数,正数表示买入,负数表示卖出。price_style (str): 委托价位,如 'S1'(卖一)、'B1'(买一)、'new'(最新价)。以下示例展示了如何在 handle_data 中结合 IOPV 溢价情况,进行买入成分券并申购 ETF 的基础逻辑:
def initialize(context):
# 设置操作的 ETF 标的
g.etf = '510050.SS'
set_universe(g.etf)
def handle_data(context, data):
etf_code = g.etf
# 1. 获取 ETF 基础参数(如最小申赎单位)
etf_info = get_etf_info(etf_code)
if not etf_info or etf_code not in etf_info:
return
# 最小申购赎回单位 (report_unit)
report_unit = etf_info[etf_code].get('report_unit', 1000000)
# 2. 发起申购示例:申购 1 个篮子单位的 ETF
# 注意:申购前需确保账户内已拥有足额的成分券或资金
purchase_order_id = etf_purchase_redemption(etf_code, amount=report_unit)
if purchase_order_id:
log.info("ETF 申购单已提交,订单号: %s" % purchase_order_id)
# 3. 发起赎回示例:赎回 1 个篮子单位的 ETF(传入负数)
# redemption_order_id = etf_purchase_redemption(etf_code, amount=-report_unit)
limit_price 需注意格式化,避免因精度不符报单失败。report_unit,通常为 50 万份或 100 万份)不同,可通过 get_etf_info 接口动态获取。etf_basket_order 配合申赎时,可通过 info 参数控制成分券的现金替代标识(cash_replace_flag)与持仓替代规则。