---
id: document_item.ema-strategy-and-its-parameters
page_type: documentation_article
title: "EMA 策略及其参数"
description: "Moonbot 如何使用 CustomEMA 和 SellByCustomEMA 公式，在指定时间区间上比较 EMA、价格的最高值与最低值、BTC 以及市场平均值。"
section: documentation
category: "策略 / 策略的专用参数"
url: https://moonbot.pro/zh/documentation/advanced-strategy-parameters/ema-strategy-and-its-parameters?format=md
locale: zh
alternate_ru: https://moonbot.pro/ru/documentation/advanced-strategy-parameters/ema-strategy-and-its-parameters?format=md
alternate_en: https://moonbot.pro/documentation/advanced-strategy-parameters/ema-strategy-and-its-parameters?format=md
parent: https://moonbot.pro/zh/documentation/advanced-strategy-parameters?format=md
previous: https://moonbot.pro/zh/documentation/advanced-strategy-parameters/topmarket-strategy-and-its-parameters?format=md
next: https://moonbot.pro/zh/documentation/advanced-strategy-parameters/spread-strategy-and-its-parameters?format=md
status: published
updated_at: 2026-11-11T02:52:54+03:00
---

# EMA 策略及其参数

要在终端的所有策略中使用带公式的 EMA 过滤器，以及使用 EMA 策略以真实资金挂 Buy 订单，需要激活付费的自动交易扩展包；如果未激活，该扩展包中的功能只能在通过 **Menu** **→** **Emulation Mode**（模拟模式）开启的全局模拟器模式下运行。

### EMA 过滤器与 EMA 策略

在策略设置中，可以为参数 **CustomEMA**（入场过滤条件）和 **SellByCustomEMA**（离场条件）编写公式，用来实现任意的过滤条件：这些条件基于比较币种图表上不同时间区间的价格或成交量。

在 **CustomEMA** 或 **SellByCustomEMA** 参数字段中，以一行的形式写入一组用于比较的函数，格式如下：

**EMA(X,Y) > A AND MAX(X,Y) \< B AND...** 可以写任意数量的公式，用 AND 或 OR 连接（运算顺序与代数相同：先计算所有 AND，再计算 OR）。\
**示例：A AND B OR C AND D** 表示以下两者之一： **(A AND B) 或 (C AND D)**。

#### 公式类型

- **EMA(X,Y) >** 或 **\< A**：比较 X 秒、分钟或小时前的 EMA 价格与 Y 秒、分钟或小时前的 EMA 价格。\
  允许的取值：X=**1s...300s** 或 **2m...90m** 或 **1h...41h**，Y=**1s...300s** 或 **2m...90m** 或 **1h...41h**；
- **MAX(X,Y) >** 或 **\< A**：比较 X 分钟或小时前的最高价与 Y 秒、分钟或小时前的 EMA 价格。\
  允许的取值：X=**5m...90m** 或 **1h...41h**，Y=**1s...300s** 或 **2m...90m** 或 **1h...41h**。\
  关于最高价的计算说明，请参见下文“计算方法”；
- **MIN(X,Y) >** 或 **\< A**：比较 X 分钟或小时前的最低价与 Y 秒、分钟或小时前的 EMA 价格。\
  允许的取值：X=**5m...90m** 或 **1h...41h**，Y=**1s...300s** 或 **2m...90m** 或 **1h...41h**。\
  关于最低价的计算说明，请参见下文“计算方法”；
- **BTC(X,Y) >** 或 **\< A**：比较 BTC/USDT 在 **EMA X** 秒、分钟或小时前与 **EMA Y** 秒、分钟或小时前的价格。\
  允许的取值：X=**1s...300s** 或 **2m...90m** 或 **1h...41h**，Y=**1s...300s** 或 **2m...90m** 或 **1h...41h**。
- **MAvg(X,Y) >** 或 **\< A**：比较整个市场的平均价格在 **EMA X** 秒、分钟或小时前与 **EMA** **Y** 秒、分钟或小时前的值。\
  允许的取值：X=**1s...300s** 或 **2m...90m** 或 **1h...41h**，Y=**1s...300s** 或 **2m...90m** 或 **1h...41h**。\
  市场平均价格的计算受 2 项设置影响：
  - 在 **Settings → Main** 选项卡中，**Blacklist** 和 **Exclude from delta**： 如果勾选，则市场平均价格中会排除黑名单中的币种；
  - 在 **Settings → Advanced → Engine settings** 选项卡中，**Weighted mAvg**：如果勾选， 则计算平均值时各币种的价格按其日成交量加权。\
    换句话说，币种的日成交量越小，对平均值的影响就越小。\
    这种计算可以类比市值：即 (价格 \* 成交量) 之和。
- **Avg(X,Y) >** 或 \< A：写法与 EMA(X, Y) 类似。比较的是 X 秒或分钟前与 Y 秒或分钟前的价格。\
  允许的取值：X=**1s...300s** 或 **2m...90m** 或 **1h...41h**，Y=**1s...300s** 或 **2m...90m** 或 **1h...41h**。\
  如果 Y=1，则取当前价格。在图表上勾选 **AvgPrice** 复选框即可看到平均价格线；
- **Vol(X,Y) >** 或 **\< A**：成交量比较公式。X 和 Y 可以是：5s、15s、30s、1m、3m、5m、15m、30m、1h、3h、24h。\
  计算公式为：（Y 时间内的平均每分钟成交量）除以（X 时间内的平均每分钟成交量）。

**示例：** 1 小时成交量为 120000 USDT（则该小时的平均每分钟成交量为 2000 USDT）。\
最近 1 分钟的成交量：4000 USDT。

那么 Vol(1h,1m) = 4000/2000 = 2，即这一分钟的成交量是过去 1 小时平均每分钟成交量的 2 倍。

特殊情况：Vol(0,Y) 只给出 Y 时间内的平均每分钟成交量，不做比较。

- **Arb(交易所) > N%**\
  **Arb(交易所) \< -N%**

也可以使用这种写法：**Arb(\*) > N%**——表示至少在一个交易所上价格偏离超过 N%。\
公式可以用 **AND**（与）、**OR** （或）条件写在一行中。例如：Arb(**BinAlpha)>1%** **AND** Arb(**BinanceF)>1%**

目前价格套利公式可使用以下交易所名称：

**BinAlpha, BinanceF, BinanceQ, BinanceS, BitgetF, BitgetS, BybitF, BybitS, Forex, GateF, GateS, HL_F, HL_io, HL_mkts, HL_para, HL_S, HL_xyz, HtxS, OkxF, OkxS, UpBit**

\* 其中 **BinAlpha** 是 Binance Alpha；以字母 **S** 结尾的是现货交易所，以字母 **F** 结尾的是合约交易所，以字母 **Q** 结尾的是季度合约交易所，**HL\_** 表示 Hyperliquid 交易所

⚠️ 重要！我们不保证可获取价格的来源列表保持不变，也不保证这些来源持续稳定运行，外汇（Forex）市场尤其如此。今后来源列表可能会变化，不可靠的来源可能会被移除。

⚠️ 重要！对于自动交易，我们建议使用带白名单的策略，不要使用 Arb(\*) 公式，而是指定您关心的具体交易所。原因是：不同代币可能以相同名称上币，如果您在创建策略时没有限制白名单和交易所列表，就可能导致错误检测。

例如公式 Arb(\*) > 10%：创建策略时，所有交易所上交易的可能都是同一个 PEPE 币，检测是正确的。之后，例如 Binance Alpha 上可能上线 PePe——一个名称相同但价格差异很大的另一个代币。为避免误触发，建议在设置策略时预先指定白名单，以及交易所列表（即所需资产所在的交易所）。

**每个包含 (X, Y) > 或 \< A 的公式含义如下：**

1\) X、Y 为时间：数字后面带字母 s、m 或 h（分别表示秒、分钟、小时），或不带字母（此时数字按秒计算）。\
2\) 大于号或小于号。\
3\) A 为比较值（百分比）。\
计算原理：将 Y 秒前的平均价格与 X 秒前的平均价格进行比较：\
**价格(Y) / 价格(X) > 1 + A / 100**\
换句话说，价格(Y) 比价格(X) 高 A%（如果公式中是 \< 号，则为低于）

#### 计算方法与限制

由于不可能在内存中保存所有可能的组合，Moonbot 终端按以下原则计算价格：

1. 一组秒级平均值：从当前价格（1 秒）到 300 秒前。按每秒的平均价格以经典 EMA 方式计算：P新\[N\] = (P前\[N\] \* N + P当前) / (N + 1)，其中 N 为以秒计的时间；
2. 分钟级平均值：从 2 分钟前到 90 分钟前，按每分钟的简单平均价格计算；
3. 小时级平均值：从 1 小时前到大约 41 小时前（这是交易所对用于计算小时平均值的 K 线数据的限制），按 5 分钟 K 线计算每小时的平均价格。因此，EMA 公式中的参数 **X,Y** 可以是：1s..300s 或 2m..90m 或 1h..41h（参数 **X** 和 **Y** 的具体范围请参见上文各自 **MIN MAX EMA** 参数旁的说明）；
4. 如果 **Y** 设为 1s，则与当前价格比较；指定秒数时可以不写 s；
5. 小时级 **MAX/MIN** 每 5 分钟重新计算一次，即每出现一根新的 5 分钟 K 线时。为了让 MAX(1h)/MIN(1h) 与 MAX(60m)/MIN(60m) 不互相重复，小时级数值直接从 1 小时前开始。例如，对于 MAX(1h,1)，最高值取自 60 至 120 分钟前的 5 分钟 K 线；
6. 分钟级 **MAX/MIN** 每个 tick（1 tick = 2 秒）重新计算一次，即有 2 到 4 秒的延迟。同时，最近 60 秒不计入分钟级 **MAX/MIN** 水平的计算。

因此，最近 1 分钟内（对于分钟级区间）以及最近 60 分钟内（对于小时级区间）的急剧上涨不会计入 **MAX/MIN** 水平的确定，所以在当下 **MAX** 的值可能大于零，而 **MIN** 的值可能小于零。这样设计是为了能用公式表达创新高/创新低，即写出“当前价格高于最近 N 分钟/小时的最高价或低于最低价”的条件。

![EMA 策略](https://moonbot.pro/storage/editor-images/%D0%A1%D1%82%D1%80%D0%B0%D1%82%D0%B5%D0%B3%D0%B8%D1%8F%20EMA.jpg)

![EMA 策略 (dark)](https://moonbot.pro/storage/editor-images/%D0%A1%D1%82%D1%80%D0%B0%D1%82%D0%B5%D0%B3%D0%B8%D1%8F%20EMA.jpg)

计算出的 **MAX/MIN**、**EMA** 和 **MAvg** 点（为直观起见以蓝线连接）可以通过 **Show** **Spot trades\\OrderBook** 按钮的菜单显示在图表上（该按钮位于 **Filters on charts** 按钮左侧），见上图。

⚠️ 请注意！这不是指标，而只是直观展示 EMA 过滤器的数值是如何按点计算的。由于上述原因，蓝色平均价格线可能出现断点——即 300s 结束、2m 开始以及 90m 结束的位置。

当公式中的所有条件都满足时，**CustomEMA** 过滤器就会触发。这样就可以设置各种各样的入场条件，例如“长周期内价格下跌、随后短周期内上涨”等。

#### CustomEMA 字段中的表达式示例

**可以写入 CustomEMA 字段的示例**

1. **EMA(15m,3s)\< -1 AND EMA(5s,1s) > 0.1**\
   EMA(15m,3s)\<-1 表示出现了下跌，即 3 秒前的 EMA 平均价格比 15 分钟前的 EMA 平均价格低 1%。\
   EMA(5s,1s)>0.1 表示出现了上涨，即当前价格 EMA 1s 比 5 秒前的 EMA 平均价格高 0.1%。\
   这两个条件合在一起表示：在下跌之后出现上涨时，就会产生检测。
2. 公式 **MAX(1h,1s)>0.1** 表示价格创新高，即当前 EMA 1s 平均价格比 1 小时最高价 MAX 1h 高出 0.1% 以上；
3. 公式 **MAX(1h,1s)\<-5** 表示当前 EMA 1s 平均价格比其 1 小时最高价 MAX 1h 低 5%；
4. 公式 **MAX(1h,1s)\<-5 AND MIN(1h,1s)\<0.1 AND MIN(1h,1s)>-0.1** 表示当前 EMA 1s 平均价格比 1 小时最高价 MAX 1h 低 5%，同时当前 EMA 1s 平均价格位于 1 小时最低价附近，即相对 MIN 1h 在 -0.1% 到 +0.1% 之间。

为了方便测试这些公式，我们加入了 EMA 策略。它没有自己的专用参数，因为它完全基于 CustomEMA 过滤器条件进行检测。也就是说，只要过滤器条件满足就会产生检测，因此请谨慎使用！\
可能出现无限制的买入，所以请在策略设置的 Filters 选项卡中为 **NextDetectPenalty** 参数设置延迟。

**备注：**

1. 在策略中使用 Latency 过滤器非常重要，因为 EMA 价格取决于成交价格；如果价格数据到达有延迟，EMA 的计算就会不准确。
2. 如果策略启用了 EMA 过滤器，EMA 线会在策略检测时保存到报告中；对于 MoonShot 策略，则在 Buy 订单成交时保存。

## 导航

路径: [首页](https://moonbot.pro/zh?format=md) / [文档](https://moonbot.pro/zh/documentation?format=md) / [策略](https://moonbot.pro/zh/documentation/strategies?format=md) / [策略的专用参数](https://moonbot.pro/zh/documentation/advanced-strategy-parameters?format=md) / EMA 策略及其参数

上级栏目: [策略的专用参数](https://moonbot.pro/zh/documentation/advanced-strategy-parameters?format=md)

上一页: [TopMarket 策略及其参数](https://moonbot.pro/zh/documentation/advanced-strategy-parameters/topmarket-strategy-and-its-parameters?format=md)

下一页: [Spread 策略及其参数](https://moonbot.pro/zh/documentation/advanced-strategy-parameters/spread-strategy-and-its-parameters?format=md)

## 相关内容

- [Spread 策略及其参数](https://moonbot.pro/zh/documentation/advanced-strategy-parameters/spread-strategy-and-its-parameters?format=md)
- [MoonHook 策略及其参数](https://moonbot.pro/zh/documentation/advanced-strategy-parameters/moonhook-strategy-and-its-parameters?format=md)
- [Activity 策略及其参数](https://moonbot.pro/zh/documentation/advanced-strategy-parameters/activity-strategy-and-Its-parameters?format=md)
- [Alerts 策略及其参数](https://moonbot.pro/zh/documentation/advanced-strategy-parameters/alerts-strategy-and-its-parameters?format=md)
- [Watcher 策略及其参数](https://moonbot.pro/zh/documentation/advanced-strategy-parameters/watcher-strategy-and-its-parameters?format=md)
