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

JoinQuant 聚宽平台获取 MA、KDJ 等日线指标时,日期参数该如何传入?

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

问题描述

MA等日指标问题

MA KDJ等一些指标,传入的日期格式为Y-m-d的话,实际获取的指标数据,是不是为0点,也就是前一天收盘之后的结果。

比如我要获取2020-02-02的MA指标,实际我应该传入后一个交易日的Y-m-d格式才对?

解决方案

在 JoinQuant 聚宽平台中,关于日期格式 Y-m-d 的处理以及指标数据的获取,需要分具体的 API 场景来理解。您的理解有一部分是正确的(即 Y-m-d 等同于当天的 00:00:00),但在获取日线级别指标时,您不需要传入后一个交易日

以下是详细的解答:

1. Y-m-d 格式的底层含义

在 JoinQuant 中,如果您只传入日期字符串(如 '2020-02-02'),系统在底层确实会将其解析为该日的 0 点,即 2020-02-02 00:00:00

2. 获取日线指标(如 MA、KDJ)的正确传参方式

如果您想获取 2020-02-02 这一天收盘后 的 MA 或 KDJ 指标,直接传入 '2020-02-02' 即可,不需要传入后一个交易日

这取决于您使用的是哪种方式获取指标:

方式一:使用 get_priceget_bars 自己计算 MA

如果您使用 get_price 获取历史数据来计算 MA:

# 获取截至 2020-02-02 的 5 根日线数据
df = get_price('000001.XSHE', end_date='2020-02-02', frequency='1d', fields=['close'], count=5)
ma5 = df['close'].mean()

原理解释:对于日线数据(frequency='1d'),end_date='2020-02-02' 会包含 2020-02-02 这一整天的交易数据(即该日收盘后的结果)。系统会自动匹配到该交易日的日线 Bar。

方式二:使用技术分析指标库 (jqlib.technical_analysis)

如果您使用的是聚宽内置的技术指标库:

from jqlib.technical_analysis import *

# 获取 2020-02-02 的 MACD 指标
macd_dif, macd_dea, macd_macd = MACDC('000001.XSHE', check_date='2020-02-02')

原理解释check_date='2020-02-02' 明确表示查询这一天的指标值,底层计算时会包含 2020-02-02 当天的收盘数据。

方式三:在回测环境中使用 historyattribute_history

如果您是在回测的 handle_data 中运行:

def handle_data(context, data):
    # 假设当前逻辑时间 context.current_dt 是 2020-02-03 09:30:00
    # 获取过去 5 天的收盘价(不包含 2020-02-03 当天)
    close_data = attribute_history('000001.XSHE', 5, '1d', ['close'])
    ma5 = close_data['close'].mean() # 这里计算出的就是截至 2020-02-02 收盘的 MA5

原理解释:回测专用 API historyattribute_history 默认不包含当前单位时间的数据。在 2020-02-03 调用时,获取到的最新一天数据就是 2020-02-02 的收盘数据。

3. 为什么分钟级数据会有“0点”的错觉?

文档中提到:“当取分钟数据时,如果 end_date 只有日期,则日内时间等同于 00:00:00,所以返回的数据是不包括 end_date 这一天的。”

  • 分钟线end_date='2020-02-02' -> 2020-02-02 00:00:00,因为 2 号的交易还没开始,所以拿不到 2 号的分钟线,只能拿到 1 号 15:00 之前的分钟线。
  • 日线:日线数据的标识通常是按天对齐的,end_date='2020-02-02' 会被引擎理解为“获取截至 2020-02-02 这一天的日线”,因此会包含 2 号当天的收盘数据。

总结

  • 不需要传入后一个交易日。要获取哪一天的日线指标,就直接传入哪一天的日期(如 '2020-02-02')。
  • 对于日线级别的数据和指标,传入 'Y-m-d' 代表获取截至该日收盘后的结果。