🚀 AI 一键生成 ptrade 策略代码

如何在 PTrade 平台实现 ETF 一二级市场套利策略?

ptrade | 发布时间: 2025/11/25
以下内容由 EasyQuant 生成。

问题描述

我想编写一个ETF套利策略,在一级市场申购ETF,然后在二级市场卖出,或者反向操作,需要用到哪些API函数?

解决方案

编写ETF一二级市场套利策略(即瞬时套利或延时套利)时,核心逻辑是捕捉二级市场交易价格与一级市场IOPV(参考净值)之间的价差。

在PTrade中,你需要重点使用以下几类API函数来实现这一逻辑:

1. 获取ETF基础与成分股信息

在进行套利前,必须知道ETF的最小申赎单位、现金替代标志以及成分股构成。

  • get_etf_info(etf_code)
    • 作用:获取ETF的IOPV(实时参考净值)、最小申赎单位(report_unit)、现金差额、申购赎回上限等关键信息。
    • 用途:计算是否存在套利空间(对比二级市场价格与IOPV),以及确定下单的手数必须是report_unit的整数倍。
  • get_etf_stock_list(etf_code) / get_etf_stock_info(etf_code, security)
    • 作用:获取ETF的成分股列表及具体的替代标志(允许现金替代、必须现金替代等)。
    • 用途:在折价套利(赎回ETF卖出股票)时,需要知道赎回后会得到哪些股票。

2. 获取实时行情

套利对速度要求极高,通常需要Tick级别的数据。

  • get_snapshot(security)
    • 作用:获取ETF及其成分股的实时快照数据(包括最新价、买一卖一价量等)。
    • 用途
      • 获取ETF的二级市场价格(last_px)与IOPV进行对比。
      • 获取盘口深度(bid_grp, offer_grp),判断是否有足够的流动性吃掉你的套利单。

3. 一级市场申购与赎回(核心)

这是套利策略中连接一二级市场的桥梁。

  • etf_purchase_redemption(etf_code, amount, limit_price=None)

    • 作用:直接向柜台发送ETF申购或赎回指令。
    • 参数amount 为正数表示申购(Creation),负数表示赎回(Redemption)。
    • 用途
      • 溢价套利:买入成分股后,调用此函数申购ETF份额。
      • 折价套利:买入ETF份额后,调用此函数赎回成一篮子股票。
  • etf_basket_order(etf_code, amount, price_style=None, position=True, info=None)

    • 作用ETF成分券篮子下单。这是一个非常强大的便捷接口,它能自动根据ETF清单买入一篮子股票。
    • 用途:在溢价套利(申购套利)时,你需要先买入一篮子股票。使用此函数可以避免手动循环几百只股票下单,极大提高速度和准确性。

4. 二级市场交易

用于买卖ETF份额或卖出赎回后的股票。

  • order(security, amount) / order_market(...)
    • 作用:普通的股票/基金买卖接口。
    • 用途
      • 溢价套利:申购得到ETF份额后,在二级市场卖出ETF。
      • 折价套利:在二级市场买入ETF,或者赎回后卖出成分股(也可以用etf_basket_order传入负数尝试卖出篮子,或循环调用order卖出成分股)。

策略逻辑简述与API对应关系

场景 A:溢价套利 (市价 > IOPV + 成本)

  1. 监控:调用 get_snapshot 获取ETF最新价,调用 get_etf_info 获取IOPV。
  2. 买入成分股:调用 etf_basket_order 买入一篮子股票。
  3. 申购ETF:调用 etf_purchase_redemption (amount > 0) 将股票换成ETF份额。
  4. 卖出ETF:T+0日(如果是深市或特定ETF)或T+1日,调用 order 在二级市场卖出ETF。

场景 B:折价套利 (市价 < IOPV - 成本)

  1. 监控:同上。
  2. 买入ETF:调用 order 在二级市场买入ETF份额。
  3. 赎回ETF:调用 etf_purchase_redemption (amount < 0) 将ETF换回一篮子股票。
  4. 卖出成分股:调用 etf_basket_order (amount < 0) 或循环调用 order 卖出所有股票。

注意事项

  1. T+0规则:不同市场的ETF(沪市单市场、深市单市场、跨市场等)对于申购后的份额何时可用、赎回后的股票何时可卖有不同的T+0或T+1规定,编写策略时需严格遵守。
  2. 最小单位:申赎数量必须是 get_etf_info 返回的 report_unit 的整数倍(通常是100万份或几十万份)。
  3. 精度:ETF价格通常为3位小数,下单时需注意价格精度。