3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant 聚宽平台中,获取当前账户的总负债金额(包含融资、融券及利息),可以通过访问 context.portfolio 对象下的 total_liability 属性来实现。
以下是具体的获取方式和属性说明:
直接使用 context.portfolio.total_liability 即可获取总负债。
def handle_data(context, data):
# 获取账户总负债
total_debt = context.portfolio.total_liability
print(f"当前账户总负债: {total_debt}")
如果您需要分别获取融资负债(借钱)和融券负债(借币/借券),可以使用以下属性:
context.portfolio.cash_liabilitycontext.portfolio.sec_liabilitycontext.portfolio.interest关系公式:
$$ \text{total_liability} = \text{cash_liability} + \text{sec_liability} + \text{interest} $$
以下是一个完整的示例,展示如何在策略中打印这些信息:
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}")
initialize 函数中设置:def initialize(context):
# 设定账户类型为 'stock_margin' (融资融券)
set_subportfolios([SubPortfolioConfig(cash=context.portfolio.starting_cash, type='stock_margin')])
set_subportfolios 设置了多个子账户,context.portfolio 通常指向汇总信息或默认的第一个仓位。如果需要获取特定子账户的负债,请使用 context.subportfolios[i].total_liability(其中 i 为子账户索引)。Q: 为什么我的 total_liability 一直是 0?
A: 这通常有两个原因:
stock(普通股票账户),普通账户无法进行融资融券。请检查 initialize 中是否使用 set_subportfolios 将类型设置为 stock_margin。Q: sec_liability(融券负债)是按什么价格计算的?
A: 融券负债是根据您借入证券的当前市值计算的。如果股价上涨,您的融券负债金额也会相应增加(因为您需要花更多的钱买回股票还券),这体现了做空的风险。
Q: total_liability 包含交易佣金吗?
A: 不包含。total_liability 主要包含融资融券的本金和累计的利息(interest)。交易佣金在交易发生时直接从可用资金(available_cash)中扣除。