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

JoinQuant 聚宽 history 函数中的 'avg' 字段到底代表什么?

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

问题描述

函数history中的'avg'是取多少天的平均值?

函数history(count, unit='1d', field='avg', security_list=None, df=True, skip_paused=False, fq='pre')中的'avg'是取count天的平均值吗?如果count=50,得到的是50个50天avg值吗?如果不是,'avg'是取多少天的平均值?

解决方案

不是的,history 函数中的 'avg' 并不是指过去 N 天的移动平均值

在 JoinQuant 的 API 中,'avg' 代表的是单个单位时间(例如1天或1分钟)内的平均成交价

具体解释如下:

  1. 'avg' 的计算逻辑

    • 天级别(unit='1d'avg = 当天的总成交额 / 当天的总成交量。它代表的是这一天之内的平均交易价格(日内均价)。
    • 分钟级别(unit='1m'avg = 该分钟内所有 tick 的现价乘以成交量之和 / 该分钟的总成交量。它代表的是这一分钟之内的平均交易价格。
  2. count=50 时会得到什么?
    如果您调用 history(50, unit='1d', field='avg', ...),您得到的将是过去 50 个交易日,每一天各自的日内均价。返回的数据长度为 50,代表 50 个单日的均价,而不是 50 个“50天移动平均值”。

如果您想获取移动平均价(如 50 日均线 MA50),应该怎么做?

如果您需要计算过去 50 天的移动平均价,正确的做法是获取过去 50 天的收盘价(close),然后对其求平均值:

# 获取过去 50 天的收盘价
close_data = history(50, unit='1d', field='close', security_list=['000001.XSHE'])

# 计算这 50 天收盘价的平均值(即当前的 MA50)
ma50 = close_data['000001.XSHE'].mean()

或者,如果您在 handle_data 中使用 data 对象,可以直接调用 mavg 方法:

def handle_data(context, data):
    # 获取过去 50 天收盘价的平均值
    ma50 = data['000001.XSHE'].mavg(50, field='close')

总结field='avg' 取的是单个 K 线 Bar(1天或1分钟)内部的均价,与 count 参数无关;要算多日的移动平均线,请取 close 价格后再使用 .mean() 计算。