3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在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)
注意:所有函数中的 amount(数量)必须为正整数。
以下是一个完整的策略示例,展示了如何设置期货费率、保证金,并根据简单的均线逻辑进行多空交易及平仓操作。
def initialize(context):
# 1. 设置期货合约代码 (此处以中金所沪深300股指期货为例)
# 注意:实盘或回测时请确保合约代码在当前时间段内有效
g.security = 'IF2312.CCFX'
# 2. 设置股票池
set_universe(g.security)
# 3. 设置期货保证金比例 (可选,仅回测有效)
# 设置IF品种的保证金比例为10%
set_margin_rate('IF', 0.10)
# 4. 设置期货手续费 (可选,仅回测有效)
# 设置IF品种的手续费为万分之0.23
set_future_commission('IF', 0.000023)
def handle_data(context, data):
# 获取当前合约代码
security = g.security
# 获取过去5根分钟K线的收盘价 (假设回测频率为分钟)
# 为了计算指标,建议在get_history中获取足够的数据
history = get_history(6, '1m', 'close', security)
if len(history) < 6:
return
close_prices = history['close'].values
current_price = close_prices[-1]
# 计算简单均线 (MA5)
ma5 = close_prices[-5:].mean()
# 获取当前持仓信息
position = get_position(security)
# 获取多头和空头持仓数量
long_amount = position.long_amount # 多头持仓
short_amount = position.short_amount # 空头持仓
# ---------------------------------------------------
# 交易逻辑示例
# ---------------------------------------------------
# 策略逻辑:价格高于均线做多,价格低于均线做空
# 【情况1:价格高于均线】
if current_price > ma5:
# 如果持有空单,先平空 (买入平仓)
if short_amount > 0:
log.info("价格高于均线,平空单")
# close_today=False 表示优先平昨仓,不足再平今仓
# 如果是上期所(XSGE)品种且需要优先平今,需设为True
buy_close(security, short_amount, close_today=False)
# 如果没有多单,则开多 (买入开仓)
if long_amount == 0:
log.info("价格高于均线,开多单")
buy_open(security, 1)
# 【情况2:价格低于均线】
elif current_price < ma5:
# 如果持有多单,先平多 (卖出平仓)
if long_amount > 0:
log.info("价格低于均线,平多单")
sell_close(security, long_amount, close_today=False)
# 如果没有空单,则开空 (卖出开仓)
if short_amount == 0:
log.info("价格低于均线,开空单")
sell_open(security, 1)
平今仓与平昨仓 (close_today):
close_today 在 sell_close 和 buy_close 中使用。close_today=False (默认): 优先平昨仓(历史持仓),如果昨仓不够,再平今仓(当日新开的仓位)。适用于大多数交易所。close_today=True: 仅平今仓。这主要针对上海期货交易所 (XSGE) 的品种(如螺纹钢 RB、铜 CU 等),因为上期所对平今仓和平昨仓的手续费规定可能不同,且必须明确指定。其他交易所通常不需要设置为 True。持仓方向:
get_position(security).amount 代表持仓量。position.long_amount: 多头持仓数量。position.short_amount: 空头持仓数量。限价单 (limit_price):
limit_price,系统会默认使用当前行情快照的最新价或对手价(取决于回测/实盘设置)进行报单。buy_open(g.security, 1, limit_price=3500.0)。合约代码:
IF2312 代表2023年12月交割)。Python 版本兼容性:
% 格式化字符串进行日志输出。