---
source_url: https://docs.dolphindb.cn/zh/funcs/themes/mFunctions.html
fetched_at: 2026-05-19T09:44:33Z
category: funcs
title: 滑动窗口系列（m 系列）
sha1: 238b3c3f571fcbb006a5d37692113797c35eff0b
---

# 滑动窗口系列（m 系列）

对窗口内聚合计算，DolphinDB引入了 m 系列函数。m
系列函数对数据内的每个元素进行一次窗口计算，返回一个和原数据等长的结果。

## m 系列函数介绍

- m 系列函数对应的高阶函数 [moving](../ho_funcs/moving.html)：

  ```dolphindb
  moving(func, funcArgs, window, [minPeriods])
  ```

  注：

  m 系列函数为各自的计算场景进行了优化，因此比 [moving](../ho_funcs/moving.html) 高阶函数有更好的性能。
- 内置的 m
  系列函数的通用参数模板如下：

  ```dolphindb
  mfunc(X, window, [minPeriods])
  mfunc(X, Y, window, [minPeriods])
  ```

## 参数

**X**  是一个向量/矩阵/表/元组（元素为标量或等长向量）/字典。

**Y** 是一个向量/矩阵/表/元组（元素为标量或等长向量）/字典。

**window** 是大于等于 2 的正整型或 DURATION 标量。表示滑动窗口的长度。

注：

在流计算引擎中调用滑动窗口函数时，window 的上限为 102400。

**minPeriods** 是一个正整数。为滑动窗口中最少包含的观测值数据。

## 函数列表

根据 *window*
的取值，可以分为两类：

***window* 是正整数或 DURATION 类型**

- 单目：

  - [msum](../m/msum.html)
  - [msum2](../m/msum2.html)
  - [mavg](../m/mavg.html)
  - [mprod](../m/mprod.html)
  - [mmax](../m/mmax.html)
  - [mmin](../m/mmin.html)
  - [mmed](../m/mmed.html)
  - [mfirst](../m/mfirst.html)
  - [mlast](../m/mlast.html)
  - [mrank](../m/mrank.html)
  - [mcount](../m/mcount.html)
  - [mpercentile](../m/mpercentile.html)
  - [mstd](../m/mstd.html)
  - [mstdp](../m/mstdp.html)
  - [mvar](../m/mvar.html)
  - [mvarp](../m/mvarp.html)
  - [mkurtosis](../m/mkurtosis.html)
  - [mskew](../m/mskew.html)
  - [mimax](../m/mimax.html)
  - [mimin](../m/mimin.html)
  - [mfirstNot](../m/mfirstnot.html)
  - [mlastNot](../m/mlastnot.html)
  - [mifirstNot](../m/mifirstNot.html)
  - [milastNot](../m/milastNot.html)
  - [miminLast](../m/miminlast.html)
  - [mimaxLast](../m/mimaxlast.html)
  - [mLowRange](../m/mlowrange.html)
  - [mTopRange](../m/mtoprange.html)
- 双目：

  - [mwavg](../m/mwavg.html)
  - [mwsum](../m/mwsum.html)
  - [mcorr](../m/mcorr.html)
  - [mcovar](../m/mcovar.html)
  - [mcovarp](../m/mcovarp.html)
  - [mbeta](../m/mbeta.html)

***window* 是正整数时**

- [mmad](../m/mmad.html)
- [mmaxPositiveStreak](../m/mmaxPositiveStreak.html)
- [mmse](../m/mmse.html)
- [mslr](../m/mslr.html)

## 窗口确定规则

m
系列函数，支持一个向前的窗口，即基于数据中的每个元素，向前选取 *window* 指定范围的窗口。

**X
是普通向量/矩阵/表时**

此时 *window* 表示以窗口内元素个数衡量的滑动窗口的长度。

注：

对于表，只有布尔类型和数值型的列参与计算。

![](../../images/mfunc_1.png)

m 系列函数（mrank, mcount 除外）提供了 *minPeriods*
参数，用于约束窗口的观测值。对于计算结果：

注：

1. 如果没有指定 *minPeriods*，前(*window* - 1)个元素为 NULL；
2. 如果指定了 *minPeriods*，前(*minPeriods* - 1)个元素为 NULL。

上图的对应代码，这里以 [msum](../m/msum.html)
为例：

```dolphindb
X = 2 1 3 7 6 5 4 9 8 10
msum(X, 3);

//output: [ , , 6, 11, 16, 18, 15, 18, 21, 27]
```

**X
是索引序列或索引矩阵时**

此时 *window* 表示以时间衡量的滑动窗口的长度。若此时
*window* 是一个正整数，则默认将其视作和 X 中索引单位一致的量。

其滑动规则如下图：

![](../../images/mfunc_2.png)

上图的对应代码，这里以 [msum](../m/msum.html)
为例：

```dolphindb
T = [2022.01.01, 2022.01.02, 2022.01.03, 2022.01.06, 2022.01.07, 2022.01.08, 2022.01.10, 2022.01.11]
X = 1..8
X1 = indexedSeries(T, X)
msum(X1, window=3d);
```

返回：

| label | col0 |
| --- | --- |
| 2022.01.01 | 1 |
| 2022.01.02 | 3 |
| 2022.01.03 | 6 |
| 2022.01.06 | 4 |
| 2022.01.07 | 9 |
| 2022.01.08 | 15 |
| 2022.01.10 | 13 |
| 2022.01.11 | 15 |
