3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在进行国内商品期货量化交易时,**上海期货交易所(上期所,XSGE)与上海国际能源交易中心(INE)**有着特殊的“平今/平昨”规则。如果平仓指令选择错误,可能会面临高昂的平今手续费,或者直接导致委托失败。本文将为您详细解析如何在 ptrade 中通过 close_today 参数完美控制平仓逻辑。
在 ptrade 中,期货平仓主要使用以下两个接口:
sell_close(contract, amount, limit_price=None, close_today=False):多平(卖出平仓)buy_close(contract, amount, limit_price=None, close_today=False):空平(买入平仓)close_today 参数控制逻辑:close_today=False(默认值):
close_today=True:
close_today=True 参数仅对上海期货交易所生效。对于中金所(CCFX)、郑商所(XZCE)、大商所(XDCE)等其他交易所,无需传入此字段。若在非上期所品种中强行设置 close_today=True,ptrade 系统会发出警告,并强行将其转换为 False。
部分上期所品种(如螺纹钢、热卷等)的平今仓手续费远高于平昨仓。在编写策略时,应优先通过 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