3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 ptrade 量化平台中进行期货交易时,由于国内不同期货交易所对“平今仓”(平掉今日新开仓位)和“平昨仓”(平掉历史持仓)的手续费及规则设定不同(尤其是上海期货交易所 XSGE),策略编写时需要准确处理平仓逻辑。
ptrade 提供了专用的期货下单接口,用于明确区分多空方向和开平仓操作:
buy_open(contract, amount, limit_price=None):买入开仓(多头开仓)sell_close(contract, amount, limit_price=None, close_today=False):卖出平仓(多头平仓)sell_open(contract, amount, limit_price=None):卖出开仓(空头开仓)buy_close(contract, amount, limit_price=None, close_today=False):买入平仓(空头平仓)close_today 参数作用close_today=False(默认值):优先平昨仓,若昨仓不足再平今仓。close_today=True:仅平今仓。若委托数量大于当前今仓数量,系统会自动调整委托数量为当前今仓数量。close_today=True。close_today=True,ptrade 引擎会发出警告并强行转换为 close_today=False 运行。通过 get_position(contract) 获取持仓对象时,可以读取以下期货专用字段:
today_long_amount:多头今仓数量today_short_amount:空头今仓数量long_amount:多头总持仓量short_amount:空头总持仓量long_enable_amount:多头可用数量short_enable_amount:空头可用数量以下示例展示了如何在 ptrade 中对沪铜(CU,上期所合约)进行平今仓与平昨仓的精准控制:
g.security = 'CU2112.XSGE'
set_universe(g.security)
# 设置保证金比例与手续费(回测环境)
set_margin_rate('CU', 0.08)
set_future_commission('CU', 0.00004)
def handle_data(context, data):
symbol = g.security
pos = get_position(symbol)
# 1. 假设触发买入开仓信号:开多仓 2 手
if pos.amount == 0:
buy_open(symbol, 2)
log.info("买入开仓 2 手")
return
# 2. 假设触发平仓信号:优先平今仓,若无今仓则平昨仓
# 平多仓逻辑处理
if pos.long_amount > 0:
if pos.today_long_amount > 0:
# 存在今仓,执行平今仓
sell_close(symbol, pos.today_long_amount, close_today=True)
log.info("平今仓多头 %s 手" % pos.today_long_amount)
else:
# 不存在今仓,执行优先平昨
sell_close(symbol, pos.long_amount, close_today=False)
log.info("平昨仓多头 %s 手" % pos.long_amount)
limit_price,若留空默认使用快照最新价。close_today=False。get_open_orders() 检查并撤销挂单,避免冻结可用持仓。