3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 Ptrade 量化交易平台中,ETF 申购与赎回是实现 ETF 一级市场与二级市场套利(一二级市场折溢价套利)的核心操作。通过 etf_purchase_redemption 接口,投资者可以高效提交单只 ETF 的申购或赎回委托。
etf_purchase_redemption 仅在 Ptrade 客户端的股票交易模块可用。
etf_purchase_redemption(etf_code, amount, limit_price=None)
| 参数名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
etf_code |
str | 是 | 单只 ETF 代码,例如 '510050.SS' |
amount |
int | 是 | 申赎数量。正数表示申购,负数表示赎回(单位:份) |
limit_price |
float | 否 | 申赎保护限价/指定价格 |
order_id。在进行 ETF 申赎套利前,通常需要配合以下接口获取成分股与篮子数据:
get_etf_info(etf_code):获取 ETF 的最小申购/赎回单位(report_unit)、现金差额、T-1日净值等基础参数。etf_basket_order(...):当需要一键一二级市场对冲时,用于买入或卖出 ETF 成分券篮子。def initialize(context):
# 设置订阅标的
g.etf_code = '510050.SS'
set_universe(g.etf_code)
g.flag = False
def handle_data(context, data):
if not g.flag:
# 1. 获取 ETF 详细信息(如最小申赎单位)
etf_info = get_etf_info(g.etf_code)
min_unit = etf_info.get(g.etf_code, {}).get('report_unit', 900000)
# 2. 执行 ETF 申购(正数为申购)
order_id_buy = etf_purchase_redemption(g.etf_code, min_unit)
log.info(f"ETF 申购委托提交,订单号: {order_id_buy}")
# 3. 执行 ETF 赎回(负数为赎回,附带限价)
order_id_sell = etf_purchase_redemption(g.etf_code, -min_unit, limit_price=2.9995)
log.info(f"ETF 赎回委托提交,订单号: {order_id_sell}")
g.flag = True
以溢价套利为例(二级市场价格 > 一级市场 IOPV/净值):
etf_basket_order 买入一篮子股票。etf_purchase_redemption(etf_code, amount) 将股票申购为 ETF 份额。order 或 order_market 在二级市场卖出申购获得的 ETF 份额,锁定溢价收益。report_unit)的整数倍,否则柜台会拒绝报单。