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

PTrade 平台如何编写沪深300期现基差套利策略?(附 Python 源码)

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

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: PTrade 期货量化:期现基差套利(Basis Trading)策略实现

Question: 如何编写一个监控沪深300股指期货与现货指数基差并自动建仓的策略?

解决方案

PTrade 期货量化:期现基差套利(Basis Trading)策略实现

期现基差套利(Basis Trading)是一种经典的低风险量化交易策略,主要通过监控期货合约价格与现货指数(或现货 ETF)价格之间的差价(即基差 = 期货价格 - 现货价格),在基差大幅偏离理论无套利区间时进行反向操作,并在基差回归时平仓获利。


策略逻辑说明

  1. 监控标的:沪深300股指期货当月或主力合约(如 IF2309.CCFX)与沪深300 ETF(如 510300.SS)。
  2. 基差计算Basis = Futures_Price - Spot_Price * Multiplier(注意单位换算与对齐)。
  3. 建仓条件
    • 正向套利(正基差过大):期货价格显著高于现货价格,超出无套利区间上限时,做空期货(sell_open)同时买入现货 ETF(order_value)。
    • 反向套利(负基差过大):期货价格显著低于现货价格,超出无套利区间下限时,做多期货(buy_open)同时融券卖出现货/卖出现货。
  4. 平仓条件:当基差回归到合理范围(接近 0 或均值)时,对期货与现货同步平仓。

PTrade 代码实现示例

以下为在 PTrade 平台中运行的沪深300期现基差套利(正向套利示例)完整 Python 源码:

# -*- coding: utf-8 -*-

def initialize(context):
    # 设置监控标的:沪深300主力期货合约与沪深300ETF
    g.future_symbol = 'IF2309.CCFX'  # 期货合约
    g.spot_symbol = '510300.SS'     # 沪深300ETF
    
    # 订阅股票池
    set_universe([g.future_symbol, g.spot_symbol])
    
    # 参数设置
    g.upper_threshold = 15.0  # 开仓基差上限(升水超15点做空期货买现货)
    g.exit_threshold = 2.0    # 平仓基差临界值
    g.future_multiplier = 300 # 沪深300股指期货乘数
    g.trade_lots = 1          # 每次交易手数
    g.flag = 0                # 持仓状态标识:0-空仓,1-正套持仓中

def handle_data(context, data):
    # 获取当前期货与现货快照数据
    future_snapshot = get_snapshot(g.future_symbol)
    spot_snapshot = get_snapshot(g.spot_symbol)
    
    if not future_snapshot or not spot_snapshot:
        return
    
    future_price = future_snapshot[g.future_symbol].get('last_px', 0)
    spot_price = spot_snapshot[g.spot_symbol].get('last_px', 0)
    
    if future_price == 0 or spot_price == 0:
        return
        
    # 将 ETF 价格转化为指数对应点数进行基差对比(根据实际 ETF 份额/指数比例计算)
    # 假设 1 手 ETF 对应指数现货价值
    # 计算当前年化或绝对基差 (期货价格 - 现货换算价格)
    basis = future_price - (spot_price * 1000) # 假定换算比例
    
    log.info("当前期货价格: %s, 现货价格: %s, 当前基差: %s" % (future_price, spot_price, basis))
    
    # 当前可用资金检查
    cash = context.portfolio.cash
    
    # 1. 触发正向套利建仓条件:期指严重升水
    if basis > g.upper_threshold and g.flag == 0:
        log.info("基差上限触发,执行正向套利:卖出开仓期货,买入现货ETF")
        
        # 卖开期货合约 1 手
        sell_open(g.future_symbol, g.trade_lots)
        
        # 计算需要买入的 ETF 价值并下单
        spot_value = future_price * g.future_multiplier
        order_value(g.spot_symbol, spot_value)
        
        g.flag = 1
        
    # 2. 触发平仓条件:基差回归合理区间
    elif basis <= g.exit_threshold and g.flag == 1:
        log.info("基差回归,执行平仓:买入平仓期货,卖出现货ETF")
        
        # 平仓期货
        buy_close(g.future_symbol, g.trade_lots)
        
        # 卖出 ETF 现货持仓
        order_target(g.spot_symbol, 0)
        
        g.flag = 0

PTrade 部署与实盘注意事项

  1. 精度与跳价规则:股指期货最小变动价位为 0.2 点,股票/ETF 为 0.001 元,在限价单下单时注意入参价格精度。
  2. 展期风险(Roll Risk):股指期货存在到期日,若长期持仓需在临近交割日时进行平仓并换月展期(Roll Contract)。
  3. 冲击成本与滑点:由于套利策略需要期货与现货同时对冲成交,建议配合 PTrade 的 run_interval 提高检测频率,或者使用行情档位 get_gear_price 获取对价(如买一/卖一)下单以保证成交速度。