🚀 AI 一键生成 joinquant 策略代码

如何在 JoinQuant 策略中获取当前可用资金和股票持仓?

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

问题描述

怎么查询我当前账户里有多少现金和持有哪些股票?

解决方案

在聚宽(JoinQuant)策略中,您可以通过 context.portfolio 对象来获取当前的资金状况和持仓信息。

以下是具体的获取方法和代码示例:

1. 获取可用现金

使用 context.portfolio.available_cash 获取当前账户中可用于交易的资金。

2. 获取持仓股票

使用 context.portfolio.positions 获取持仓详情。这是一个字典(dict),键(key)是标的代码(如 '000001.XSHE'),值(value)是 Position 对象,包含了该标的的具体持仓信息(如数量、成本、价值等)。

代码示例

您可以将以下代码放入 handle_data 或定时运行的函数中进行查看:

def handle_data(context, data):
    # --- 查询现金 ---
    # 获取可用资金
    available_cash = context.portfolio.available_cash
    # 获取总资产(现金 + 持仓价值)
    total_value = context.portfolio.total_value
    
    log.info(f"当前可用现金: {available_cash}")
    log.info(f"当前总资产: {total_value}")

    # --- 查询持仓 ---
    positions = context.portfolio.positions
    
    # 遍历所有持仓
    # 注意:positions 中可能包含已清仓但对象未销毁的记录,建议判断 total_amount > 0
    has_holdings = False
    for security, position in positions.items():
        if position.total_amount > 0:
            has_holdings = True
            log.info(f"=== 持仓标的: {security} ({position.security}) ===")
            log.info(f"  总持仓量: {position.total_amount}")
            log.info(f"  可卖数量: {position.closeable_amount}") # T+1 制度下可能与总持仓不同
            log.info(f"  开仓均价: {position.avg_cost}")
            log.info(f"  当前标的价值: {position.value}")
            log.info(f"  当前浮动盈亏: {position.value - position.avg_cost * position.total_amount}")

    if not has_holdings:
        log.info("当前没有持有任何股票")

关键属性说明

  • context.portfolio.available_cash: 账户里的闲置资金,可以直接用来买入股票。
  • position.total_amount: 该股票的总持仓股数。
  • position.closeable_amount: 当前可以卖出的股数(考虑了A股T+1规则,今日买入的股票今日不可卖出,此时 closeable_amount 会小于 total_amount)。
  • position.avg_cost: 持仓成本价。
  • position.value: 持仓当前的市值(最新价 × 总持仓量)。