🚀 AI 一键生成 joinquant 策略代码
立即体验

JoinQuant 聚宽持仓成本计算详解:avg_cost 与 acc_avg_cost 的区别及应用

joinquant | 发布时间: 2026/7/23
以下内容由 EasyQuant 生成。

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: joinquant 持仓成本计算:Position 对象的 avg_cost 与 acc_avg_cost 区别

Question: joinquant 中当前持仓成本 avg_cost 和累计持仓成本 acc_avg_cost 有什么区别?

解决方案

JoinQuant 持仓成本计算:avg_cost 与 acc_avg_cost 详解

在 JoinQuant(聚宽)量化交易平台中,Position 对象提供了两个核心的成本计算属性:avg_cost(当前持仓成本)acc_avg_cost(累计持仓成本)。理解两者的算法差异,对于精确计算策略浮动盈亏、调仓止盈止损至关重要。


1. 核心概念与区别概览

属性名称 属性说明 触发更新时机 卖出/减仓时的变化 核心用途
avg_cost 当前持仓成本 仅在开仓、加仓时更新 保持不变 计算当前持仓的浮动盈亏、设置止盈止损点
acc_avg_cost 累计持仓成本 开仓、加仓、减仓/清仓时均更新 随清算收益重新计算 衡量该标的自历史建仓以来的综合累计成本与收益

2. 计算公式与逻辑详解

(1) 当前持仓成本 (avg_cost)

avg_cost 表示当前所持有股票的平均买入成本,包含买入交易手续费。

  • 开仓/加仓时
    $$\text{new_avg_cost} = \frac{\text{position_value} + \text{trade_value} + \text{commission}}{\text{position_amount} + \text{trade_amount}}$$
    其中 commission 为本次交易的手续费/佣金。

  • 卖出/减仓时
    avg_cost 保持不变。卖出股票不影响剩余持仓的单价成本。


(2) 累计持仓成本 (acc_avg_cost)

acc_avg_cost 是将该标的历史上所有的交易损益(包括卖出盈利或亏损)和手续费摊销到持仓中的累计成本。初始状态下(持仓为0时)为 0。

  • 加仓时
    $$\text{new_acc_avg_cost} = \frac{\text{acc_avg_cost} \times \text{amount} + \text{trade_value} + \text{commission}}{\text{amount} + \text{trade_amount}}$$

  • 减仓/卖出时
    $$\text{new_acc_avg_cost} = \frac{\text{acc_avg_cost} \times \text{amount} - \text{trade_value} + \text{commission}}{\text{amount} - \text{trade_amount}}$$
    注意:如果卖出获得大幅盈利,- trade_value 会导致 acc_avg_cost 降低甚至变为负数,这代表历史卖出收益已经收回了全部本金。


3. 代码示例与获取方式

在 JoinQuant 策略中,可以通过 context.portfolio.positionscontext.subportfolios[0].long_positions 获取 Position 对象:

    security = '000001.XSHE'
    # 获取持仓对象
    position = context.portfolio.positions[security]
    
    if position.total_amount > 0:
        print("标的:", position.security)
        print("当前持仓数量:", position.total_amount)
        print("当前持仓成本 (avg_cost):", position.avg_cost)
        print("累计持仓成本 (acc_avg_cost):", position.acc_avg_cost)
        print("最新价格:", position.price)
        
        # 计算当前持仓浮动盈亏(基于 avg_cost)
        floating_pnl = (position.price - position.avg_cost) * position.total_amount
        print("持仓浮动盈亏:", floating_pnl)

4. 总结与使用建议

  1. 止盈止损策略:推荐使用 avg_cost。因为它真实反映了当前这批持仓的实际买入均价,不受此前历史卖出盈亏的干扰。
  2. 历史绩效评估:可参考 acc_avg_cost。它综合反映了对该标的多轮建仓、平仓后的整体资金回收情况。