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

ptrade 平台如何正确设置上期所期货平今平昨仓(close_today)?

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

问题描述

ptrade 期货实战:上期所平今平昨仓控制(close_today)避坑指南
在 ptrade 中交易上海期货交易所的品种,如何正确设置平今平昨(close_today)逻辑?

解决方案

ptrade 期货实战:上期所平今平昨仓控制(close_today)避坑指南

在进行国内商品期货量化交易时,**上海期货交易所(上期所,XSGE)上海国际能源交易中心(INE)**有着特殊的“平今/平昨”规则。如果平仓指令选择错误,可能会面临高昂的平今手续费,或者直接导致委托失败。本文将为您详细解析如何在 ptrade 中通过 close_today 参数完美控制平仓逻辑。


一、ptrade 平仓核心 API 解析

在 ptrade 中,期货平仓主要使用以下两个接口:

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

close_today 参数控制逻辑:

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

二、上期所平仓避坑指南(核心要点)

1. 仅对上海期货交易所(XSGE)生效

close_today=True 参数仅对上海期货交易所生效。对于中金所(CCFX)、郑商所(XZCE)、大商所(XDCE)等其他交易所,无需传入此字段。若在非上期所品种中强行设置 close_today=True,ptrade 系统会发出警告,并强行将其转换为 False

2. 规避高额平今手续费

部分上期所品种(如螺纹钢、热卷等)的平今仓手续费远高于平昨仓。在编写策略时,应优先通过 close_today=False 平昨仓;只有在确需日内超短线交易时,才显式指定 close_today=True


三、实战代码示例

以下是一个完整的 ptrade 期货双均线平今平昨控制策略示例:

def initialize(context):
    # 订阅上期所沪铜合约(示例)
    g.security = 'CU2112.XSGE'
    set_universe(g.security)
    
def handle_data(context, data):
    # 获取当前持仓信息
    position = get_position(g.security)
    
    # 假设触发了多头平仓信号
    if trigger_sell_signal():
        if position.long_amount > 0:
            # 获取今仓和昨仓数量
            today_long = position.today_long_amount
            yesterday_long = position.long_amount - today_long
            
            log.info(f"当前总多仓: {position.long_amount}, 昨多仓: {yesterday_long}, 今多仓: {today_long}")
            
            # 避坑逻辑:优先平昨仓
            if yesterday_long > 0:
                log.info("优先平昨仓")
                sell_close(g.security, yesterday_long, close_today=False)
            
            # 如果昨仓平完后还需要平今仓
            if today_long > 0:
                log.info("平今仓")
                sell_close(g.security, today_long, close_today=True)

def trigger_sell_signal():
    # 策略信号判断逻辑(示例返回 True)
    return True