3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant(聚宽)量化交易平台上,默认的单仓位账户(subportfolios[0])类型为 stock(仅允许买卖股票和场内基金)。如果您希望在同一个策略中同时交易股票和期货(包括股指期货与商品期货),必须在 initialize 初始化函数中调用 set_subportfolios API 来配置多仓位子账户。
本文将详细介绍如何使用 SubPortfolioConfig 进行子账户初始化,并提供完整的配置模板。
set_subportfolios用于初始化或修改策略子账户的配置。只能在 initialize 函数中调用。所有子账户配置的初始资金(cash)之和必须等于策略的总初始资金。
SubPortfolioConfig(cash, type)cash: 该子账户分配的初始资金。type: 子账户可操作的标的类型,支持以下选项:
'stock': 股票与场内基金账户。'futures': 期货账户(包含股指期货和商品期货)。'index_futures': 金融期货账户(专指股指期货)。'stock_margin': 融资融券账户。以下示例展示了如何将初始资金等分为两份,分别建立一个股票子账户(subportfolios[0])和一个期货子账户(subportfolios[1]):
# 导入聚宽函数库
import jqdata
from kuanke.user_space_api import *
def initialize(context):
# 1. 设定沪深300作为基准
set_benchmark('000300.XSHG')
# 2. 开启动态复权模式(真实价格) - 期货交易必须开启此模式
set_option('use_real_price', True)
# 3. 获取策略总初始资金,并等分为两份
total_starting_cash = context.portfolio.starting_cash
half_cash = total_starting_cash / 2.0
# 4. 初始化子账户配置
# subportfolios[0] 为股票账户,分配一半资金
# subportfolios[1] 为期货账户,分配一半资金
set_subportfolios([
SubPortfolioConfig(cash=half_cash, type='stock'),
SubPortfolioConfig(cash=half_cash, type='futures')
])
# 5. 设置运行函数(例如每日运行)
run_daily(market_open, time='every_bar')
def market_open(context):
# 在交易时,必须通过 pindex 参数指定对应的子账户
# pindex=0 对应股票账户,pindex=1 对应期货账户
# 示例:在股票账户(pindex=0)买入平安银行
stock_code = '000001.XSHE'
if stock_code not in context.subportfolios[0].long_positions:
order(stock_code, 100, pindex=0)
# 示例:在期货账户(pindex=1)开一手螺纹钢主力合约多单
# 注意:期货下单前需使用 get_dominant_future 获取具体合约代码
raw_future = 'RB'
future_code = get_dominant_future(raw_future, context.current_dt.date())
if future_code and (future_code not in context.subportfolios[1].long_positions):
order(future_code, 1, side='long', pindex=1)
pindex 参数:在进行 order、order_target、order_value 等交易操作时,必须传入 pindex 参数。若不传,系统默认指向 pindex=0。如果尝试向 type='stock' 的账户下期货单,或者向 type='futures' 的账户下股票单,系统将会报错或拒绝委托。transfer_cash(from_pindex, to_pindex, cash) 函数进行账户间资金转移。initialize 中设置 set_option('use_real_price', True),以确保保证金计算和撮合逻辑符合真实市场。