🚀 AI 一键生成 joinquant 策略代码

JoinQuant 策略中如何获取融资融券账户的可用保证金?

joinquant | 发布时间: 2025/12/24
以下内容由 EasyQuant 生成。

问题描述

在融资融券账户中,如何通过代码查询当前的可用保证金余额?

解决方案

在聚宽(JoinQuant)的融资融券账户中,查询当前的可用保证金余额,需要通过访问 context.subportfolios 对象中的 available_margin 属性来实现。

以下是具体的实现步骤和代码示例:

核心步骤

  1. 初始化账户类型:在 initialize 函数中,必须使用 set_subportfolios 将账户类型设置为 'stock_margin'(融资融券账户)。如果不设置,默认是普通股票账户('stock')。
  2. 获取属性:在策略运行过程中(如 handle_data 或定时函数中),通过 context.subportfolios[账户索引].available_margin 获取数值。

代码示例

# -*- coding: utf-8 -*-
from jqdata import *

def initialize(context):
    # 1. 设定初始资金
    init_cash = 100000
    
    # 2. 重要:必须将账户类型设定为 'stock_margin' (融资融券账户)
    # 如果不设置,默认为 'stock',无法进行融资融券操作
    set_subportfolios([SubPortfolioConfig(cash=init_cash, type='stock_margin')])
    
    # 开启真实价格模式(建议)
    set_option('use_real_price', True)
    
    # 每天开盘时运行查询
    run_daily(check_margin, '09:30')

def check_margin(context):
    # 3. 获取融资融券账户对象
    # 如果您只设置了一个账户,索引通常为 0
    margin_account = context.subportfolios[0]
    
    # 4. 获取可用保证金余额
    # available_margin: 融资融券可用保证金
    current_available_margin = margin_account.available_margin
    
    # 获取可用现金 (注意区分:available_cash 是账户里的现金余额,available_margin 是计算了杠杆后的可用保证金)
    current_cash = margin_account.available_cash
    
    # 打印日志
    log.info("当前账户可用现金: %.2f" % current_cash)
    log.info("当前融资融券可用保证金: %.2f" % current_available_margin)

def handle_data(context, data):
    pass

关键属性说明

  • context.subportfolios[i].available_margin

    • 含义:融资融券可用保证金。
    • 用途:这是您在开立融资(买入)或融券(卖出)仓位时,系统用来判断您是否有足够资金作为保证金的依据。
    • 计算逻辑:通常等于 现金 + 担保品折算价值 - 已占用保证金(具体计算受交易所规则及聚宽回测引擎逻辑影响)。
  • context.subportfolios[i].available_cash

    • 含义:账户内的可用现金余额。
    • 区别available_cash 是实打实的钱,而 available_margin 包含了担保品折算后的购买力。

常见问题 (Q&A)

Q1: 为什么我获取到的 available_marginavailable_cash 一样?
A: 这通常发生在您没有持仓(没有担保品)且没有负债的情况下。此时可用保证金主要由现金构成。如果您持有股票作为担保品,available_margin 通常会高于 available_cash

Q2: 如果我不调用 set_subportfolios 设置为 stock_margin 会怎样?
A: 默认账户类型为 stock(普通股票账户)。普通账户不支持融资融券交易,且其 available_margin 属性可能无法正确反映融资融券的逻辑,或者在调用融资融券专用API(如 margincash_open)时会报错。

Q3: 如何查询当前的维持担保比例?
A: 可以通过 context.subportfolios[i].maintenance_margin_rate 获取当前的维持担保比例。