3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在聚宽(JoinQuant)的融资融券账户中,查询当前的可用保证金余额,需要通过访问 context.subportfolios 对象中的 available_margin 属性来实现。
以下是具体的实现步骤和代码示例:
initialize 函数中,必须使用 set_subportfolios 将账户类型设置为 'stock_margin'(融资融券账户)。如果不设置,默认是普通股票账户('stock')。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 包含了担保品折算后的购买力。Q1: 为什么我获取到的 available_margin 和 available_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 获取当前的维持担保比例。