问题描述
解决方案
在聚宽(JoinQuant)平台中,您可以通过 context.portfolio 对象来获取当前的账户资金状况和收益情况。这些属性通常在 handle_data、run_daily 或其他策略函数中调用。
以下是具体的属性名称和代码示例:
核心属性说明
- 总资产 (Total Value):
context.portfolio.total_value- 含义:账户的总权益,包含可用现金、冻结资金(如挂单锁住的资金)以及持仓标的的当前市值。
- 可用现金 (Available Cash):
context.portfolio.available_cash- 含义:当前账户中可用于购买证券的资金。
- 累计收益率 (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_value 和 context.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文档确认支持情况)。