🚀 AI 一键生成 joinquant 策略代码

JoinQuant `context.portfolio` 详解:全面掌握账户资产信息

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

问题描述

怎么查询我的总资产、可用现金和累计收益率?

解决方案

在聚宽(JoinQuant)平台中,您可以通过 context.portfolio 对象来获取当前的账户资金状况和收益情况。这些属性通常在 handle_datarun_daily 或其他策略函数中调用。

以下是具体的属性名称和代码示例:

核心属性说明

  1. 总资产 (Total Value): context.portfolio.total_value
    • 含义:账户的总权益,包含可用现金、冻结资金(如挂单锁住的资金)以及持仓标的的当前市值。
  2. 可用现金 (Available Cash): context.portfolio.available_cash
    • 含义:当前账户中可用于购买证券的资金。
  3. 累计收益率 (Cumulative Returns): context.portfolio.returns
    • 含义:从策略开始运行至今的累计收益率(是一个比例值,例如 0.15 代表 15%)。

代码示例

您可以将以下代码复制到您的策略中进行测试(例如放在 handle_data 中):

# -*- coding: utf-8 -*-
def handle_data(context, data):
    # 获取总资产
    total_assets = context.portfolio.total_value
    
    # 获取可用现金
    available_cash = context.portfolio.available_cash
    
    # 获取累计收益率 (转换为百分比显示)
    total_returns = context.portfolio.returns * 100
    
    # 打印信息到日志
    log.info("当前总资产: %.2f" % total_assets)
    log.info("当前可用现金: %.2f" % available_cash)
    log.info("累计收益率: %.2f%%" % total_returns)

补充说明

  • 持仓市值: 如果您想查询当前持有的股票或基金的总市值,可以使用 context.portfolio.positions_value
  • 初始资金: 如果需要获取策略启动时的初始资金,可以使用 context.portfolio.starting_cash
  • 多账户模式: 如果您使用了 set_subportfolios 设置了多个子账户(例如同时操作股票和期货),上述 context.portfolio 获取的是所有子账户的汇总信息。如果需要获取特定子账户的信息,请使用 context.subportfolios[i](i为子账户索引)。

Q&A

Q: context.portfolio.total_valuecontext.portfolio.positions_value 有什么区别?
A: total_value 是总资产,包含现金和持仓市值;而 positions_value 仅代表当前持有的证券(股票、基金、期货等)的市场价值,不包含现金。即:总资产 ≈ 可用现金 + 持仓市值 + 冻结资金。

Q: 为什么 context.portfolio.returns 显示的是小数?
A: 聚宽系统内部使用小数来表示比例。例如 0.05 代表 5%-0.1 代表 -10%。在打印或展示时,通常需要乘以 100 并加上 % 符号以便于阅读。

Q: 如何查询当天的盈亏?
A: 可以通过 context.portfolio.daily_gains (当日收益额) 或 context.portfolio.daily_returns (当日收益率) 来获取当天的盈亏情况(注:部分旧版回测环境可能需要通过计算 total_value 变化来手动获取,建议查阅最新API文档确认支持情况)。