问题描述
解决方案
您好。在聚宽(JoinQuant)平台进行融资融券(信用交易)策略回测时,默认的账户类型是普通股票账户(stock)。要进行融资买入或融券卖出,必须在 initialize 函数中使用 set_subportfolios API 将账户类型显式设置为 'stock_margin'。
以下是具体的设置方法和代码示例。
设置方法
- 使用函数:
set_subportfolios - 配置对象:
SubPortfolioConfig - 关键参数:将
type设置为'stock_margin'
代码示例
# -*- coding: utf-8 -*-
from jqdata import *
def initialize(context):
# 1. 获取回测设置的初始资金
init_cash = context.portfolio.starting_cash
# 2. 设定账户为融资融券账户
# type='stock_margin' 表示信用账户
# 如果不进行此设置,默认 type='stock'(普通账户),无法调用融资融券API
set_subportfolios([SubPortfolioConfig(cash=init_cash, type='stock_margin')])
# 3. (可选) 设置融资融券的利率和保证金比率,如果不设置则使用系统默认值
# 设置融资利率: 年化8%
set_option('margincash_interest_rate', 0.08)
# 设置融资保证金比率: 100%
set_option('margincash_margin_rate', 1.0)
# 设定融券利率: 年化10%
set_option('marginsec_interest_rate', 0.10)
# 设定融券保证金比率: 100%
set_option('marginsec_margin_rate', 1.0)
# 4. 设置基准和其他常规设置
set_benchmark('000300.XSHG')
set_option('use_real_price', True)
# 打印日志确认
log.info("融资融券账户初始化完成")
def handle_data(context, data):
# 示例:这里可以调用融资融券专用API
# margincash_open('000001.XSHE', 1000) # 融资买入
pass
注意事项
- API 限制:只有将账户类型设置为
'stock_margin'后,才能使用如margincash_open(融资买入)、marginsec_open(融券卖出)、get_mtss(获取融资融券信息)等专用函数。如果在普通账户模式下调用这些函数会报错。 - 多账户设置:如果您需要同时操作普通股票账户和信用账户,可以在
set_subportfolios中传入多个配置对象。例如:
在这种情况下,下单时需要通过set_subportfolios([ SubPortfolioConfig(cash=init_cash*0.5, type='stock'), # 仓位0:普通账户 SubPortfolioConfig(cash=init_cash*0.5, type='stock_margin') # 仓位1:信用账户 ])pindex参数指定仓位索引(如pindex=1)。
Q&A
Q: 如果我不设置 set_subportfolios,直接调用 margincash_open 会发生什么?
A: 程序会报错。因为默认初始化的账户类型是 'stock'(普通账户),普通账户不支持融资融券操作。系统会提示您当前的仓位类型不支持该操作。
Q: 设置为 'stock_margin' 后,我还能买卖普通股票吗?
A: 可以。在信用账户(stock_margin)中,您依然可以使用 order、order_target 等基础下单函数进行担保品买入卖出(即用自有资金买卖股票)。只有当您使用 margincash_open 等专用函数时,才会触发融资或融券逻辑。
Q: 融资融券回测支持设置利率和保证金比例吗?
A: 支持。可以使用 set_option 函数设置。例如 set_option('margincash_interest_rate', 0.08) 设置融资利率,set_option('margincash_margin_rate', 1.0) 设置融资保证金比例。如果不设置,系统会使用默认值(通常融资利率默认8%,融券利率默认10%,保证金比例默认100%)。