3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant(聚宽)量化交易平台上进行期货交易时,使用 order_target 函数可以非常方便地将某只期货合约的持仓调整至目标手数。对于期货交易,支持同时持有多头(side='long')和空头(side='short')仓位。
order_target(security, amount, style=None, side='long', pindex=0, close_today=False)
'IF2309.CCFX',不可直接对主力连续合约如 'IF9999.CCFX' 下单)。'long' 表示多头仓位,'short' 表示空头仓位。'futures'。注意:针对多空对冲策略,调整多头仓位时指定
side='long',调整空头仓位时指定side='short',二者互不干扰。
以下示例展示了如何在聚宽平台初始化期货子账户,获取股指期货主力合约,并通过 order_target 动态调整多头与空头持仓手数:
# 导入聚宽函数库
import jqdata
def initialize(context):
# 开启动态复权/真实价格模式
set_option('use_real_price', True)
# 1. 初始化期货账户 (设置初始资金并指定账户类型为 futures)
init_cash = context.portfolio.starting_cash
set_subportfolios([SubPortfolioConfig(cash=init_cash, type='futures')])
# 2. 设定沪深300作为基准
set_benchmark('000300.XSHG')
# 3. 设置定时运行函数(每日开盘运行)
run_daily(rebalance_positions, time='09:31', reference_security='IF9999.CCFX')
def rebalance_positions(context):
# 获取当前股指期货 IF 的主力合约代码
dominant_contract = get_dominant_future('IF', context.current_dt)
log.info("当前沪深300股指期货主力合约: %s" % dominant_contract)
# 假定根据策略信号,我们需要:
# 将该合约的多头持仓目标调整为 3 手
# 将该合约的空头持仓目标调整为 2 手(实现多空套利/对冲)
target_long_amount = 3
target_short_amount = 2
# 使用 order_target 调整多头仓位
order_target(dominant_contract, target_long_amount, side='long', pindex=0)
log.info("已发送多头调仓指令,目标多头手数: %d" % target_long_amount)
# 使用 order_target 调整空头仓位
order_target(dominant_contract, target_short_amount, side='short', pindex=0)
log.info("已发送空头调仓指令,目标空头手数: %d" % target_short_amount)
def after_trading_end(context):
# 打印每日收盘后的持仓情况
positions_long = context.subportfolios[0].long_positions
positions_short = context.subportfolios[0].short_positions
for security, pos in positions_long.items():
log.info("收盘持仓 - 标的: %s, 多头手数: %d" % (security, pos.total_amount))
for security, pos in positions_short.items():
log.info("收盘持仓 - 标的: %s, 空头手数: %d" % (security, pos.total_amount))
subportfolios[0] 账户类型为 stock,直接下单期货会报错。必须在 initialize 中使用 set_subportfolios([SubPortfolioConfig(cash=..., type='futures')]) 明确指定。get_dominant_future('IF') 返回具体合约代码(如 'IF2309.CCFX'),而主力代码(如 'IF9999.CCFX')仅用于行情获取,直接下单会导致委托失败。order_target 在执行时,如果该标的存在未完成的订单,会自动先撤销先前未完成的订单再下达新订单。None。