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

ptrade 平台如何使用 close_today 精确控制上期所平今仓与平昨仓?

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

问题描述

ptrade 期货交易避坑:上海期货交易所今仓与昨仓平仓控制 (close_today) 详解
在 ptrade 中进行上期所期货品种交易时,如何使用 close_today 参数精确控制平今仓与平昨仓?

解决方案

ptrade 期货交易避坑:上海期货交易所今仓与昨仓平仓控制 (close_today) 详解

在期货量化交易中,**上海期货交易所(XSGE)**对“平今仓”(平掉当天开的仓位)和“平昨仓”(平掉历史持仓)通常实行不同的手续费率(平今仓手续费往往较高)。因此,精确控制平今还是平昨是期货策略优化交易成本的关键。

ptrade 平台提供了 close_today 参数来帮助开发者解决这一问题。本文将详细解析其运行逻辑、API 接口及避坑指南。


一、 核心平仓接口与参数说明

在 ptrade 中,多头平仓使用 sell_close,空头平仓使用 buy_close。这两个接口均支持 close_today 参数:

1. 接口定义

  • 多平(卖出平仓)
    sell_close(contract, amount, limit_price=None, close_today=False)
    
  • 空平(买入平仓)
    buy_close(contract, amount, limit_price=None, close_today=False)
    

2. close_today 参数逻辑

  • close_today=False(默认值)
    优先平昨仓(历史持仓),如果昨仓不足,再平今仓(当天持仓)。
  • close_today=True
    仅平今仓。如果委托数量大于当前的今仓数量,系统会自动将委托数量调整为当前的今仓数量。

二、 交易所差异(核心避坑点)

close_today=True 的平今控制仅对上海期货交易所(XSGE)生效。对于其他交易所(如中金所 CCFX、大商所 XDCE、郑商所 XZCE 等):

  1. 无需传入 close_today 字段。
  2. 若强行设置为 True,ptrade 系统会发出警告,并强行将参数转换为 False(即按照优先平昨、不足平今的逻辑执行)。

三、 策略代码示例

以下是一个在 ptrade 中针对上期所沪铜(CU)合约进行开仓并精确平今仓的策略示例:

def initialize(context):
    # 设置操作的期货合约(上海期货交易所沪铜合约)
    g.security = 'CU1806.XSGE'
    set_universe(g.security)

def handle_data(context, data):
    # 1. 买入开仓(多开)1手
    buy_open(g.security, 1, limit_price=52220)
    
    # 2. 针对上期所品种,若需要当天平仓,必须指定 close_today=True
    # 此时将严格执行“平今仓”逻辑
    sell_close(g.security, 1, limit_price=52250, close_today=True)

四、 期货平仓避坑指南

  1. 价格精度限制
    不同期货品种的最小变动价位(每一跳价格)不同。在传入 limit_price 时,务必确保价格符合该品种的精度要求,否则会导致报单失败。
  2. 今仓不足时的自动调整
    当设置 close_today=True 时,若你指令平仓 5 手,但实际今仓只有 3 手,ptrade 引擎不会报错废单,而是会自动将你的报单数量缩减为 3 手进行委托。
  3. 非上期所品种切勿盲目传参
    对于非上期所品种(如中金所股指期货),由于交易所本身不区分平今平昨指令,直接使用默认的 close_today=False 即可,避免因系统强转参数产生不必要的警告日志。