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

JoinQuant量化平台如何获取过去N天的MA5均线序列?

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

问题描述

关于MA序列

获取股票的收盘价
close_data5 = get_bars(security, count=5, unit='1d', fields=['close'])
# 取得过去五天的平均价格
MA5 = close_data5['close'].mean()
这样写只是取到最新5天的MA5的值,但是我想取3天或前10天的MA5值应该怎样写呢?

解决方案

在JoinQuant(聚宽)平台上,如果您想获取过去连续多天(例如过去3天或过去10天)的MA5序列,最标准且高效的方法是多获取几天的数据,然后使用 pandasrolling(滑动窗口)函数来计算

计算MA5需要5天的数据。因此,如果您想获取过去 $N$ 天的MA5序列,您需要获取过去 $N + 5 - 1$ 天的收盘价数据。

以下是具体的实现方法:

方法一:获取过去10天的MA5序列(推荐)

如果您想获取过去10天每天的MA5值,您需要获取 $10 + 5 - 1 = 14$ 天的收盘价数据。

import pandas as pd

def handle_data(context, data):
    security = '000001.XSHE'
    
    # 1. 获取过去14天的收盘价数据,注意设置 df=True 以返回 pandas.DataFrame
    # 这样方便后续使用 rolling 函数
    close_data = get_bars(security, count=14, unit='1d', fields=['close'], df=True)
    
    # 2. 使用 pandas 的 rolling 函数计算5日滑动平均
    # 这会计算出每一天对应的过去5天均值
    ma5_series = close_data['close'].rolling(window=5).mean()
    
    # 3. 截取最后10天的数据,这就是您需要的过去10天的MA5序列
    ma5_last_10 = ma5_series.tail(10)
    
    # 打印查看结果
    print("过去10天的MA5序列:\n", ma5_last_10)
    
    # 如果您想取3天前的MA5值(即倒数第4天的MA5)
    # 可以通过索引获取,例如:
    ma5_3_days_ago = ma5_series.iloc[-4]
    print("3天前的MA5值为:", ma5_3_days_ago)

方法二:只获取特定某一天(如3天前)的MA5值

如果您不需要整个序列,仅仅是想获取“3天前”那一天的MA5值,您可以通过切片来实现。3天前的MA5,实际上是倒数第4天到倒数第8天这5天的收盘价均值。

def handle_data(context, data):
    security = '000001.XSHE'
    
    # 获取过去8天的收盘价(因为3天前+5天窗口 = 8天)
    # 这里 df=False 返回的是 numpy 数组,切片速度更快
    close_data = get_bars(security, count=8, unit='1d', fields=['close'], df=False)
    
    # close_data['close'] 是一个长度为8的数组
    # 倒数第1天是今天(或昨天,取决于是否包含当前bar),倒数第4天是3天前
    # 我们取前5个数据(即索引0到4),这就是3天前那一天的过去5天收盘价
    ma5_3_days_ago = close_data['close'][0:5].mean()
    
    print("3天前的MA5值为:", ma5_3_days_ago)

总结建议

  • 获取序列:强烈建议使用 df=True 配合 pandas.Series.rolling(window=5).mean(),代码简洁且不易出错,非常适合计算MACD、多条均线等技术指标序列。
  • 获取单点:如果只取历史某一个特定点的均线,直接用 get_bars 获取对应区间的数据求 .mean() 即可,效率最高。