3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 PTrade 量化交易平台中,进行期货做空(空头)交易主要依赖于两个核心 API 函数:sell_open(卖出开仓)和 buy_close(买入平仓)。本文将详细解析这两个 API 的参数说明、注意事项以及完整的实操策略代码。
用于建立期货空头头寸(卖出开仓)。
sell_open(contract, amount, limit_price=None)contract (str):期货合约代码,例如 'IF2309.CCFX'、'CU2112.XSGE'。amount (int):交易数量,须为正整数(表示开空的手数)。limit_price (float, 可选):委托限价。若不传,则回测环境按当前分钟最新价报单,实盘环境按行情快照最新价报单。None。用于平掉已有的空头头寸(买入平仓)。
buy_close(contract, amount, limit_price=None, close_today=False)contract (str):期货合约代码。amount (int):交易数量,须为正整数(表示平空的手数)。limit_price (float, 可选):委托限价。close_today (bool, 可选):平仓方式。默认为 False(优先平昨仓,不足部分平今仓)。仅对上海期货交易所(XSGE/INE)生效;若设置为 True,则仅平今仓。None。以下是一个基于 5 日与 10 日均线交叉的期货策略示例,展示了如何结合 buy_open、sell_close、sell_open 和 buy_close 进行多空双向交易。
def initialize(context):
# 设置标的合约:以沪铜为例
g.security = 'CU2112.XSGE'
set_universe(g.security)
# 设置期货保证金比例(例如 8%)
set_margin_rate('CU', 0.08)
def handle_data(context, data):
security = g.security
# 获取过去 10 天的收盘价
df = get_history(10, '1d', 'close', security, fq=None, include=False)
if df is None or len(df) < 10:
return
# 计算 5 日均线与 10 日均线
ma5 = df['close'][-5:].mean()
ma10 = df['close'][-10:].mean()
# 获取当前持仓对象
pos = get_position(security)
# 1. 死叉:5日均线跌破10日均线 -> 买入平多,卖出开空
if ma5 < ma10:
# 如果持有多头头寸,先平多
if pos.long_amount > 0:
sell_close(security, pos.long_amount)
log.info(f"平多仓:{security},手数:{pos.long_amount}")
# 如果没有空头头寸,则开空 1 手
if pos.short_amount == 0:
sell_open(security, 1)
log.info(f"卖出开空:{security},手数:1")
# 2. 金叉:5日均线突破10日均线 -> 买入平空,买入开多
elif ma5 > ma10:
# 如果持有空头头寸,先平空
if pos.short_amount > 0:
buy_close(security, pos.short_amount)
log.info(f"买入平空:{security},手数:{pos.short_amount}")
# 如果没有多头头寸,则开多 1 手
if pos.long_amount == 0:
buy_open(security, 1)
log.info(f"买入开多:{security},手数:1")
limit_price 时,请务必注意对应期货品种的价格跳动单位(如沪铜一手变动为 10 元),否则可能导致报单被柜台拒单。buy_close 的 close_today 参数设为 True;其他交易所无需特别指定。get_position(security) 获得 Position 对象,使用 pos.short_amount 获取空头总持仓量,使用 pos.short_enable_amount 获取空头可用持仓量。