🚀 AI 一键生成 joinquant 策略代码

JoinQuant 如何获取融资融券账户的总负债(total_liability)?

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

问题描述

怎么获取当前账户的总负债金额,包括融资和融券的部分?

解决方案

在 JoinQuant 聚宽平台中,获取当前账户的总负债金额(包含融资、融券及利息),可以通过访问 context.portfolio 对象下的 total_liability 属性来实现。

以下是具体的获取方式和属性说明:

1. 获取总负债金额

直接使用 context.portfolio.total_liability 即可获取总负债。

def handle_data(context, data):
    # 获取账户总负债
    total_debt = context.portfolio.total_liability
    print(f"当前账户总负债: {total_debt}")

2. 获取负债的详细组成

如果您需要分别获取融资负债(借钱)和融券负债(借币/借券),可以使用以下属性:

  • 融资负债context.portfolio.cash_liability
  • 融券负债context.portfolio.sec_liability
  • 利息负债context.portfolio.interest

关系公式:
$$ \text{total_liability} = \text{cash_liability} + \text{sec_liability} + \text{interest} $$

3. 代码示例

以下是一个完整的示例,展示如何在策略中打印这些信息:

def handle_data(context, data):
    # 获取各项负债数据
    portfolio = context.portfolio
    
    # 总负债
    total_liab = portfolio.total_liability
    
    # 融资负债 (借入资金)
    cash_liab = portfolio.cash_liability
    
    # 融券负债 (借入标的证券的价值)
    sec_liab = portfolio.sec_liability
    
    # 需偿还的利息
    interest_liab = portfolio.interest
    
    log.info(f"总负债: {total_liab}")
    log.info(f"其中 -> 融资负债: {cash_liab}, 融券负债: {sec_liab}, 利息负债: {interest_liab}")

注意事项

  1. 账户类型:要产生负债,您的策略必须初始化为融资融券账户。需要在 initialize 函数中设置:
    def initialize(context):
        # 设定账户类型为 'stock_margin' (融资融券)
        set_subportfolios([SubPortfolioConfig(cash=context.portfolio.starting_cash, type='stock_margin')])
    
  2. 多仓位情况:如果您使用了 set_subportfolios 设置了多个子账户,context.portfolio 通常指向汇总信息或默认的第一个仓位。如果需要获取特定子账户的负债,请使用 context.subportfolios[i].total_liability(其中 i 为子账户索引)。

Q&A

Q: 为什么我的 total_liability 一直是 0?
A: 这通常有两个原因:

  1. 您没有进行融资(借钱买入)或融券(卖出借来的股票)操作。
  2. 您的账户类型默认为 stock(普通股票账户),普通账户无法进行融资融券。请检查 initialize 中是否使用 set_subportfolios 将类型设置为 stock_margin

Q: sec_liability(融券负债)是按什么价格计算的?
A: 融券负债是根据您借入证券的当前市值计算的。如果股价上涨,您的融券负债金额也会相应增加(因为您需要花更多的钱买回股票还券),这体现了做空的风险。

Q: total_liability 包含交易佣金吗?
A: 不包含。total_liability 主要包含融资融券的本金和累计的利息(interest)。交易佣金在交易发生时直接从可用资金(available_cash)中扣除。