3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在PTrade中,如果您想平掉今日新开的期货仓位(即“平今仓”),需要使用平仓函数 sell_close(卖出平多)或 buy_close(买入平空),并将参数 close_today 设置为 True。
sell_close(contract, amount, close_today=True)buy_close(contract, amount, close_today=True)close_todayclose_today=True:仅平今仓。系统会强制平掉今日新开的仓位。如果今日仓位不足,可能会报错或根据交易所规则处理。
True 可能会警告并强制转为 False,但在逻辑上如果您只有今日仓位,默认方式也能平掉。close_today=False (默认):优先平昨仓。系统会优先平掉昨日(或更早)持有的历史仓位,如果昨仓不足,再平今日仓位。以下是一个完整的策略示例,展示了如何在开仓后,显式地指定平掉今日的仓位。
def initialize(context):
# 设置关注的期货合约,这里以上海期货交易所的沪铜为例
# 注意:上期所品种严格区分平今和平昨
g.future = 'CU2306.XSGE'
set_universe([g.future])
# 设置标志位,用于控制开平仓逻辑
g.has_opened = False
def handle_data(context, data):
# 获取当前时间
current_hour = context.blotter.current_dt.hour
current_minute = context.blotter.current_dt.minute
# ---------------------------------------------------
# 1. 上午 10:00 开仓(买入开仓 / 多开)
# ---------------------------------------------------
if current_hour == 10 and current_minute == 0 and not g.has_opened:
#以此为例:买入开仓 2 手
order_id = buy_open(g.future, 2)
if order_id:
log.info("上午10点:买入开仓(多开)2手 %s" % g.future)
g.has_opened = True
# ---------------------------------------------------
# 2. 下午 14:30 平掉今日仓位(卖出平今 / 多平)
# ---------------------------------------------------
if current_hour == 14 and current_minute == 30 and g.has_opened:
# 获取当前持仓对象
position = get_position(g.future)
# 检查多头持仓量
if position.long_amount > 0:
# 【关键操作】使用 close_today=True 强制平今仓
# sell_close 用于平多头
sell_close(g.future, 2, close_today=True)
log.info("下午14点30分:强制平今仓(多平)2手 %s" % g.future)
g.has_opened = False
# ---------------------------------------------------
# 补充:如果是做空(卖出开仓),平仓时使用 buy_close
# ---------------------------------------------------
# 假设之前是 sell_open(g.future, 2),则平今仓代码如下:
# buy_close(g.future, 2, close_today=True)
要在PTrade中实现“平今仓”操作,请遵循以下规则:
sell_close。buy_close。close_today=True。Q1: 如果我在非上海期货交易所(如大商所)的品种上使用 close_today=True 会怎样?
A: 根据PTrade文档,对于不支持严格区分平今/平昨指令的交易所,系统可能会发出警告,并将参数强制转换为 False(即优先平昨)。但如果您账户里只有今天开的仓位,没有历史老仓,那么无论设为 True 还是 False,效果都是平掉今天的仓位。
Q2: 为什么要区分平今和平昨?
A: 主要是因为手续费不同。特别是在上海期货交易所,某些品种的“平今仓”手续费可能比“平昨仓”贵很多(为了抑制日内过度投机),或者在某些特殊时期反而免费。在策略中明确指定 close_today 可以帮助您更精确地控制交易成本和逻辑。
Q3: 如果我既有昨仓又有今仓,想全部平掉怎么办?
A: 您可以分两步下单,或者直接使用 close_today=False(默认值)并输入总数量。系统会先平掉昨仓,剩下的数量自动平掉今仓。但如果您只想平今仓而保留昨仓,则必须使用 close_today=True。