3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
可以实现。 在JoinQuant(聚宽)平台的模拟交易中,完全可以同时交易股票和期货。
您遇到的“股票成功下单,但期货未能成功下单”的问题,根本原因在于未正确配置多子账户(subportfolios)以及下单时未指定对应的账户索引(pindex)。
在聚宽平台中,如果不显式配置账户类型,系统默认只初始化一个子账户 subportfolios[0],且其类型(type)默认为 'stock'(仅允许买卖股票与场内基金等)。
'stock' 的账户去下期货订单,系统会直接拒绝(报错或返回None),导致期货下单失败。要实现股票和期货的混合交易,您必须在 initialize 函数中将初始资金分配到两个不同的子账户中:一个用于股票(type='stock'),另一个用于期货(type='futures')。并且在调用下单API时,通过 pindex 参数明确告诉系统使用哪个账户的资金。
在 initialize 函数中使用 set_subportfolios 进行配置:
def initialize(context):
# 获取总初始资金
init_cash = context.portfolio.starting_cash
# 将资金分为两份,分别给股票和期货账户
stock_cash = init_cash * 0.5
futures_cash = init_cash * 0.5
# 设定 subportfolios[0] 为股票账户
# 设定 subportfolios[1] 为期货账户
set_subportfolios([
SubPortfolioConfig(cash=stock_cash, type='stock'),
SubPortfolioConfig(cash=futures_cash, type='futures')
])
# 其他初始化设置...
set_benchmark('000300.XSHG')
set_option('use_real_price', True)
pindex在您的交易逻辑中,调用 order、order_target 等函数时,必须加上 pindex 参数:
pindex=0 代表使用股票账户。pindex=1 代表使用期货账户。def handle_data(context, data):
# --- 股票交易逻辑 ---
stock_code = '000001.XSHE'
# 买入股票,必须指定 pindex=0
order(stock_code, 100, pindex=0)
# --- 期货交易逻辑 ---
# 获取主力合约(注意:不能直接交易'RB9999.XSGE',必须获取具体合约)
future_code = get_dominant_future('RB')
# 买入期货多单,必须指定 pindex=1
order(future_code, 1, side='long', pindex=1)
subportfolios[0] 和 subportfolios[1] 的资金是隔离的。如果股票账户资金不足,即使期货账户有钱,股票也无法下单。如果需要在运行中动态调配资金,可以使用 transfer_cash(from_pindex, to_pindex, cash) 函数。IF9999.CCFX)下单,必须使用 get_dominant_future 获取真实的交易合约代码(如 IF2309.CCFX)。close_today 参数的设置。按照上述方法修改您的策略代码,明确区分股票账户和期货账户,您的混合策略就可以在模拟交易中顺利运行了。