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

JoinQuant聚宽平台盘中获取实时均线(MA)的正确方法

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

问题描述

如何获取实时均线?

老师,MA(security_list,check_date,timeperiod=5)是获取到指定日期(过去时间)的均线数值,如何在盘中获取到当前时间(当前K线)的均线数值?

解决方案

在 JoinQuant(聚宽)平台中,技术分析指标库(如 MA 函数)通常是基于历史已经走完的 K 线数据进行计算的。如果您需要在盘中(例如 handle_data 或分钟级的定时运行函数中)获取包含当前正在交易的 K 线的实时均线数值,最推荐的方法是使用 get_bars 函数,并将 include_now 参数设置为 True

核心解决思路

使用 get_bars 函数获取包含当前时刻的过去 N 根 K 线的收盘价(close),然后直接对这些收盘价求平均值(.mean()),即可得到实时的均线数值。

具体代码示例

以下是在策略中获取实时均线的代码示例:

# 导入聚宽函数库
import jqdata

def initialize(context):
    # 设定要操作的股票
    g.security = '000001.XSHE'
    # 按分钟运行
    run_daily(market_open, time='every_bar')

def market_open(context):
    # 1. 获取包含当前分钟的实时 5分钟 均线 (以1分钟K线为基础计算过去5分钟)
    # include_now=True 表示包含当前尚未走完的这一分钟的最新价
    bars_1m = get_bars(g.security, count=5, unit='1m', fields=['close'], include_now=True)
    if len(bars_1m) == 5:
        realtime_ma5_1m = bars_1m['close'].mean()
        print(f"当前时间 {context.current_dt},实时5分钟均线值为: {realtime_ma5_1m}")

    # 2. 获取包含今天最新价的实时 5日 均线 (以日K线为基础)
    # include_now=True 表示当天的收盘价取的是当前的最新价
    bars_1d = get_bars(g.security, count=5, unit='1d', fields=['close'], include_now=True)
    if len(bars_1d) == 5:
        realtime_ma5_1d = bars_1d['close'].mean()
        print(f"当前时间 {context.current_dt},包含今日最新价的实时5日均线值为: {realtime_ma5_1d}")

为什么不使用 historyattribute_history

  • historyattribute_history 函数在设计上不包含当前单位时间的数据。例如,在按天回测时,它们只能获取到昨天的收盘价;在按分钟回测时,只能获取到上一分钟的数据。这主要是为了防止新手在回测中不小心引入“未来函数”。
  • get_bars 是更底层的行情获取 API,通过显式指定 include_now=True,您可以明确告诉系统您需要包含当前时刻的快照数据(即当天的最新价或当前分钟的最新价),从而准确计算出盘中实时指标。

注意事项

  1. 数据长度校验:在计算均线前,建议像示例代码中那样判断一下获取到的 bars 长度是否等于您请求的 count(例如停牌刚复牌的股票可能数据不足)。
  2. 复权设置get_bars 默认不复权,如果您需要计算复权价格的均线,请务必传入 fq_ref_date 参数(例如 fq_ref_date=context.current_dt.date() 获取动态前复权数据)。