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

JoinQuant平台MA均线(移动平均线)是如何计算的?包含当天数据吗?

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

问题描述

技术分析指标中MA均线的计算公式

想确认下技术分析指标中MA均线的计算公式,比如计算5日均线时,是选取check_date的前5日收盘价,还是check_date前4日的收盘价再加check_date当天的收盘价进行计算的?

解决方案

在 JoinQuant(聚宽)平台的技术分析指标库(jqlib.technical_analysis)中,计算 MA(移动平均线)等指标时,是包含 check_date 当天的数据的

具体来说,当您计算 5日均线(MA5) 并指定了 check_date 时,系统选取的计算范围是:check_date 当天的收盘价 + check_date 往前推4个交易日的收盘价,总共 5 个交易日的收盘价来计算平均值。

详细原理解析

聚宽的技术分析指标库是基于通达信、同花顺等传统行情软件的公式逻辑编写的。在传统行情软件中,您在某一天(T日)看到的 5 日均线,必然是包含了 T 日当天的收盘价的。因此,check_date 就相当于这个 T 日。

  • 计算公式MA5 = ( C(T) + C(T-1) + C(T-2) + C(T-3) + C(T-4) ) / 5
  • 其中 C(T) 就是 check_date 当天的收盘价。

代码验证示例

如果您想在策略或研究中手动验证或计算,可以使用 get_priceattribute_history 函数。以下是在研究环境中手动计算包含 check_date 当天的 5 日均线的示例:

from jqdata import *

# 设定我们要查询的日期和股票
check_date = '2023-10-10'
security = '000001.XSHE'

# 获取包含 check_date 在内的过去 5 个交易日的收盘价
# 注意:get_price 的 end_date 包含当天
df = get_price(security, end_date=check_date, count=5, frequency='1d', fields=['close'])

# 计算这 5 天的平均值
ma5_value = df['close'].mean()
print(f"{check_date} 的 5日均线价格为: {ma5_value}")

策略回测中的注意事项

如果您是在回测的 handle_data 中使用 data[security].mavg(5),需要注意:

  • handle_data 是在盘中(如 9:30 - 15:00)运行的。
  • 此时当天的收盘价尚未产生,因此 mavg(5) 计算时,使用的是**过去5天(不含今天)**的每天收盘价的平均值。
  • 如果您希望在盘中计算包含当天最新价格的动态均线,需要手动获取前4天的收盘价,再加上 data[security].price(当前最新价)来求平均。

总结:调用技术指标库并传入 check_date 时,计算包含该日期当天的数据;而在回测盘中调用历史函数时,通常只包含到昨天的收盘价(除非明确获取分钟级或当前 tick 数据)。