---
id: document_item.spread-strategy-and-its-parameters
page_type: documentation_article
title: "Spread 策略及其参数"
description: "高风险的 Spread 策略如何结合设定的时间和价格条件，分析并交易 ASK 与 BID 边界之间区域内的价格运动。"
section: documentation
category: "策略 / 策略的专用参数"
url: https://moonbot.pro/zh/documentation/advanced-strategy-parameters/spread-strategy-and-its-parameters?format=md
locale: zh
alternate_ru: https://moonbot.pro/ru/documentation/advanced-strategy-parameters/spread-strategy-and-its-parameters?format=md
alternate_en: https://moonbot.pro/documentation/advanced-strategy-parameters/spread-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/ema-strategy-and-its-parameters?format=md
next: https://moonbot.pro/zh/documentation/advanced-strategy-parameters/moonhook-strategy-and-its-parameters?format=md
status: published
updated_at: 2026-11-11T00:18:03+03:00
---

# Spread 策略及其参数

要让 Spread 策略出现在 Moonbot 终端的策略列表中，需要激活“[自动交易](https://moonbot.pro/zh/moonbot-pro/modules/autotrading?format=md)”模块。

⚠️ 注意！Spread 策略伴随极高的风险。请先在不开启自动买入的情况下把它当作检测工具使用，以了解它的工作方式。只有在完全理解之后，再将其配置用于真实交易。

![Spread 策略在 DODO 上币时的工作示例](https://moonbot.pro/storage/editor-images/%D0%A1%D1%82%D1%80%D0%B0%D1%82%D0%B5%D0%B3%D0%B8%D1%8F%20Spread_1.png)

![Spread 策略在 DODO 上币时的工作示例 (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%20Spread_1.png)

Spread 策略在 DODO 上币时的工作示例。

这里所说的价差，是指在 ASK 与 BID 边界之间的区域内进行的活跃交易，该区域由时间和价格振幅确定。

### 通用参数

- **TimeInterval**：用于指定进行计算的时间区间，单位为秒，可填小数（0.5 至 30 秒，默认 5）；
- **TradesDensity**：用于指定按时间计算的成交密度，取 10 至 100 的整数百分比，默认 80。计算成交密度时，TimeInterval 区间被切分为若干 100 ms 的小段（时间桶），然后计算其中至少有 2 笔不同价格成交的小段与“空”小段（无成交）之间的比例。例如，成交密度 TradesDensity = 100（%）表示至少每 100 ms 就有不同价格的成交；
- **TradesDensityPrev**：用于指定检测之前的成交密度，它按检测前的上一个时间区间计算，该区间同样等于 TimeInterval 的值。取 0 至 100 的正整数，默认 20；为 0 时不使用该参数。可用来剔除此前一直沉寂的币种。针对拉盘行情，应将此参数设为 0，因为这时需要的恰恰是沉寂的币种（在出现价差之前波动率很低）；
- **TradesCountMin**：用于指定在整个检测区间内每 100 ms 的最少成交笔数。取 0 及以上的正整数，无上限，默认 0。为 0 时不应用。数值较大时，此参数可能大幅减少检测次数，因为只会选取成交密度很高的行情；
- **PriceIntervals**：用于指定将 TimeInterval 等分成多少段来计算价格振幅。取 1 至 100 的正整数，默认 10。TimeInterval 被分成 PriceIntervals 段，在每一段上计算最高价、最低价以及二者之间的 Delta（差值）；
- **PriceIntervalShift**：用于指定 0 至 5 的正整数。此设置用于剔除由恰好落在被测分段边界上的单根插针引发的检测。计算原理：将分析区间向左平移 100 ms，共平移 PriceIntervalShift 次。每次都在平移后的区间上重新计算检测条件。只有在所有平移后的区间上条件都满足时，才会最终触发检测。为 0 时不进行重新计算；
- **PriceSpread**：用于指定触发检测所需的最小价差，单位为百分比。取 0.01 及以上的正小数，无上限，默认 0.3。当 PriceIntervals 的每一段上的价格振幅都大于 PriceSpread 时，触发检测。如果 Spread 策略启用了修正系数（modifiers），该阈值会随波动率动态上调。总振幅必须大于交易所的三个价格步长——在价格步长较粗的币种上不会产生检测；
- **PriceSpreadMax**：用于指定整个计算窗口内允许的最大总振幅。取 0 及以上的正整数，无上限，默认 0。为 0 时不应用。
- **IntervalsForBuySpread**：用于指定取 PriceIntervals 中最后多少个分段来计算价差通道的最低价和最高价边界，入场价和出场价均以这些边界为基准计算。取 0 至 10 的正整数，默认 3。为 0 时按整个 TimeInterval 计算。价格完全没有变动的分段不参与边界计算；
- **BuyPriceInSpread**：用于指定 Buy 订单在价差内的挂单位置，单位为百分比。取正整数或负整数，无限制，默认 20。做多时，该百分比从最低价向上计算；做空时，从最高价向下计算。\
  示例：
  - 若 BuyPriceInSpread = 0（%），做多的 Buy 订单将挂在价差内的最低价
  - 若 BuyPriceInSpread = 50（%），做多的 Buy 订单将挂在价差的正中间
  - 若 BuyPriceInSpread = -100（%），做空的 Buy 订单将挂在更高处，距离为价差宽度的两倍。

    请注意！Buy conditions 选项卡中的参数 **buyPrice** 同样会影响买入价。此时 BuyPriceInSpread 决定的是“基准价”，buyPrice 再以它为基准计算。 此外，每一笔重复订单都会使该值减少 4（不低于 0），也就是说，重复订单会挂得更深入通道内部。
- **SellPriceInSpread**：用于指定 Sell 订单在价差内的挂单位置，单位为百分比。取正整数或负整数，无限制，默认 80。与参数 BuyPriceInSpread 类似，只不过这里是根据价差预先确定的卖出价。与 BuyPriceInSpread 不同的是，卖出价取 SellPrice 与按价差计算的卖出价二者中较高的一个。换句话说，如果 SellPrice 小于价差，例如 SellPrice=0，则按价差挂卖单；如果更大，则按 SellPrice 挂卖单。此外，修正系数也会影响卖出价；
- **BuyOrderReduce**：用于指定计算平均成交量所用的时间区间，单位为毫秒。策略挂出的订单大小不会超过该平均成交量。取 0 至 TimeInterval×1000 的正整数，例如 TimeInterval=5 秒时，BuyOrderReduce 的最大值为 5×1000 = 5000 ms，默认 100 ms。为 0 时不应用。

  成交量的计算方式：将 TimeInterval 区间内所有买入 + 卖出成交的成交量（BV + SV）相加，再按 BuyOrderReduce 的时长折算。例如，TimeInterval = 5（秒），即 5000 ms，BuyOrderReduce = 100（ms），5 秒内全部成交的成交量为 10 000$，则 100 ms 的平均成交量为 10000 / 5000 ms \* 100 ms = 200$。此时策略挂出的 Buy 订单不会超过 200$。\
  换句话说，就是看 100 ms / 10 ms / 5 ms 内的平均成交量是多少，这就是策略会挂出的最大订单。

  订单缩减机制的工作情况可以通过日志中的如下记录看到：\
  IOTA: \[1\] (40) Buy order reduced: 1000.00$ => 23$ (Vol: 23$)\
  在这条日志中，策略里的 OrderSize 为 1000$，但 100 ms 的平均成交量只有 23$，因此策略挂出了 23$ 的 Buy 订单。\
  订单缩减机制不会把订单缩减到低于交易所的最小订单金额。
- **MinReducedSize**：用于指定应用 BuyOrderReduce 参数之后 Buy 订单的最小金额（USDT），低于该金额时不挂 Buy 订单。取 0 及以上的正小数，无上限，默认 0。为 0 时不应用。\
  该参数仅在 BuyOrderReduce 大于零时生效，并且是最早的一道筛选——早于成交密度和价差振幅的检查。\
  例如，MinReducedSize = 50（USDT），应用 BuyOrderReduce 参数后算出只能挂 23$ 的 Buy 订单，但这小于 50$，因此不会挂出 23$ 的 Buy 订单。\
  此时日志中会出现记录“Reduced order would be too small”。
- **SpreadRepeatIfProfit**：用于指定从买入价到卖出价之间的相对百分比，达到后允许策略在检测后的最初约 2 秒内（不会更晚）再次挂出 Buy 订单。也就是说，如果当前价格上涨并比买入价高出 SpreadRepeatIfProfit 百分比，且发生在检测后约 2 秒之内，就可以挂出重复的 Buy 订单。为 0 时不挂重复订单。\
  例如，若 SpreadRepeatIfProfit = 100（%），则当前价格必须达到 Sell 订单的价格且仓位已卖出，之后才允许策略挂出重复的 Buy 订单。\
  若 SpreadRepeatIfProfit = 50（%），则当前价格必须达到买入价与 Sell 订单价格之间距离的一半，之后才允许策略挂出重复的 Buy 订单。\
  由于代码中的内部限制，Spread 策略中最多允许挂出 5 笔重复的 Buy 订单。
- **SpreadFlat**：复选框 YES/NO。若为 YES（默认），策略会尝试在水平通道内识别价差：最新的平均价格须位于最早一个分段的边界之内，且每个分段与最早分段的重叠不少于通道宽度的 75%，对倒数第二个分段也进行同样的检查。这正是为了防止策略在倾斜通道中工作——倾斜通道在形式上同样能给出所需的振幅；
- **Spread_BV_SV_Time**：用于指定测量买入成交量（BV: BuyVolume）和卖出成交量（SV: SellVolume）的时间区间，单位为毫秒。取 0 至 30000 ms 的正整数，默认 3000。为 0 时不应用，并关闭本策略中整组 BV_SV 参数；
- **Spread_BV_SV_Max**：用于指定买入成交量（BV: BuyVolume）与卖出成交量（SV: SellVolume）之比的最大值。取 0 至 100 的正小数（可以输入更大的数，但实际的最大值就是 100），默认 0。为 0 时不应用；
- **Spread_BV_SV_Min**：用于指定买入成交量（BV: BuyVolume）与卖出成交量（SV: SellVolume）之比的最小值。取 0 至 100 的正小数（可以输入更大的数，但实际的最大值就是 100），默认 0。为 0 时不应用。

  如果策略设置为做空，该比值会自动反转，即做空时计算的是卖出成交量（SV）与买入成交量（BV）之比。

  示例：\
  Spread_BV_SV_Time = 1500 ms。\
  最近 1500 ms 内，Buy 成交为 500$，Sell 成交为 1000$。\
  则 BV/SV 之比在做多时为 500/1000 = 0.5，在做空时为 1000/500 = 2。
- **SpreadPolarityMin**：用于指定价差极性通道的下边界。取 -100 至 100 的整数，默认 -100。
- **SpreadPolarityMax**：用于指定价差极性通道的上边界。取 -100 至 100 的整数，默认 100。

  价差极性表示价格相对于移动平均线更贴近通道的哪一侧：为“-100”时只有向下的插针，为“100”时只有向上的插针；越新的 100 ms 小段（时间桶）权重越大。\
  注意！最大值按最近 5 秒计算，即使窗口更宽也是如此。

#### Spread 策略示例

TimeInterval = 5（秒）\
TradesDensity = 100\
PriceIntervals = 5 \
PriceSpread = 0.3（%）\
IntervalsForBuySpread = 2\
BuyPriceInSpread = 5（%）\
SellPriceInSpread = 100（%）\
BuyOrderReduce = 100（ms）

按这组参数，要求在最近 5 秒内每一秒的价格波动都超过 0.3%。计算 Buy 和 Sell 订单时取最后 2 个分段（IntervalsForBuySpread=2），Buy 订单挂在相对于价差最低值 +5% 的位置，Sell 订单挂在相对 +100% 的位置，即价差的最高值。

同时，如果折算到 100 ms 的成交量小于策略参数 **OrderSize** 中指定的 Buy 订单金额，则挂出的 Buy 订单等于这一折算到 100 ms 的成交量。

1\. 在 Spread 策略中使用 **Latency** 过滤器非常重要，因为检测价差所用的价格取自成交（图表上的成交标记）。如果价格数据有延迟，检测可能在价格已经急剧上涨之后才触发！

2\. Buy 订单部分成交时，策略会撤销该订单，并把已成交的全部数量挂出卖单，与 MoonShot 策略的做法相同。

3\. 检测条件每半秒重新计算一次。

4\. 策略会考虑检测修正系数（修正系数影响 **PriceSpread**）。

5\. 建议将此策略与短周期 EMA 过滤器配合使用，例如 EMA(30,2)，用来判断价格上涨或下跌，并相应地在做空或做多时挂出较高的 Sell 订单。

6\. 如果 Moonbot 终端中启用了多个 Spread 策略，则每个策略都会各自产生检测并挂单，因为 Spread 策略在 **Main** 选项卡中的参数 **IndependentSignals = YES** 始终处于启用状态。此时，Spread 策略触发检测后，图表上方会显示一行信息，其中是检测时刻的各项数值。

7\. 此外，还可以在触发该策略的币种图表上方查看 Spread 策略各参数的数值。为此需要在 **Settings** **→ Advanced →** **System** 选项卡中勾选复选框 **Extended Debug Mode**（扩展调试）。

![](https://moonbot.pro/storage/editor-images/Spread_Strategy1_W.jpg)

![(dark)](https://moonbot.pro/storage/editor-images/Spread_Strategy1_B.jpg)

这些数值同样会出现在报告中带有检测信息的那一行：

![Spread 策略](https://moonbot.pro/storage/editor-images/Spread_Strategy2_W-eng.jpg)

![Spread 策略 (dark)](https://moonbot.pro/storage/editor-images/Spread_Strategy2_B-eng.jpg)

8\. 另外，还可以设置把 Spread 策略的消息发送到 Telegram，并在那里收到如下形式的消息：

Signal (strategy ) coin: #KNTQ SpreadDetection: Spread: TD: 10% TD2: 2% dP: 1.9% Vol: 1.7 k Trades: 2 Spread: 1.9% N: 2 (K2: +64.1) bv/sv: 4.19

**TD:** 成交密度，单位为百分比（TradesDensity）

**TD2:** 检测前的成交密度，单位为百分比（TradesDensityPrev）

**dP:** 整个 TimeInterval 区间内的价格振幅，单位为百分比

**Vol:** 按参数 BuyOrderReduce 计算出的平均成交量，单位为 USDT

**Trades:** 成交笔数（TradesCountMin）

**Spread:** 各分段中的最小振幅，单位为百分比 （PriceSpread）

**N:** 检测到价差的分段数量，最后两个分段只在检测触发的那一刻才出现在图表上 （PriceIntervals）

**K2:** 价差的极性（方向），取值范围为 +100 至 -100（SpreadPolarity）

**bv/sv:** 买入成交量 BuyVolume 与卖出成交量 SellVolume 之比（Spread_BV_SV）

## 导航

路径: [首页](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) / Spread 策略及其参数

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

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

下一页: [MoonHook 策略及其参数](https://moonbot.pro/zh/documentation/advanced-strategy-parameters/moonhook-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)
