> For the complete documentation index, see [llms.txt](https://guide.moontrader.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://guide.moontrader.com/torgovlya/algoritmicheskii-treiding/algoritm-shot-detect.md).

# Алгоритм Shot Detect

Алгоритм торгует на откатах после резких ценовых прострелов. Shot Detect отслеживает поток сделок в реальном времени и фиксирует момент, когда цена совершила резкий прострел и начала возвращаться назад. Вход в сделку происходит не в момент самого движения, а после того, как откат достигает заданного диапазона.

Алгоритм разбивает окно наблюдения на небольшие временные интервалы, отслеживает ценовые прострелы и активность торгов, а затем автоматически размещает ордер при выполнении заданных условий.

***

### Как работает алгоритм

1. **Разбивка времени на интервалы**

   Фрейм делится на 3 равных интервала. Окно наблюдения скользящее: каждые \~⅓ фрейма добавляется новый интервал, самый старый уходит. В любой момент алгоритм анализирует окно из 3 интервалов.\
   Например, при размере фрейма 1 секунда каждый интервал длится \~0,33 секунды.
2. **Сбор данных в каждом фрейме**

   В каждом фрейме алгоритм анализирует:

   * минимальную и максимальную цену сделок;
   * количество сделок (Bid и Ask);
   * объём сделок (Bid и Ask).
3. **Проверка условий для входа**

   Алгоритм требует **3 полностью сформированных интервала**; триггер срабатывает по среднему из них. Это позволяет алгоритму определить, есть откат или нет.\
   Направление прострела определяется по первому и среднему интервалу:

   * находится средняя точка среднего интервала: (max + min) / 2
   * сравнивается с первой ценой первого интервала
   * если первая цена ниже средней точки — прострел **вверх**
   * если первая цена выше средней точки — прострел **вниз**

   <figure><img src="/files/1k2xYR5Ig7LakiE07VuC" alt=""><figcaption></figcaption></figure>

   Откат определяется относительно размера всего фрейма по границам двух последних интервалов:

   * **Прострел вниз —** сравнивается нижняя граница среднего интервала с нижней границей последнего интервала
   * **Прострел вверх —** сравнивается верхняя граница среднего интервала с верхней границей последнего интервала

   <figure><img src="/files/JgkPcKULa3rE1tUs7lBc" alt=""><figcaption></figcaption></figure>

   Алгоритм формирует сигнал, если:

   * в каждом интервале есть не менее одного трейда;
   * величина ценового прострела в среднем интервале попадает в Диапазон прострела;
   * направление прострела соответствует параметру Направление прострела;
   * количество сделок в фрейме не меньше параметра Минимум сделок во фрейме;
   * суммарный объём в фрейме не меньше параметра Минимальный объём торгов.
4. **Размещение ордера**

   При срабатывании триггера алгоритм ждёт отката цены в Диапазон отката. Цена выставления ордера зависит от выбранного режима размещения — Следящий или Фиксированный.

   * **Режим Следящий** — цена рассчитывается от текущей цены (цены в момент срабатывания триггера) с учётом Фактора расстояния и глубины прострела.
   * **Режим Фиксированный** — цена рассчитывается от границ прострела с учётом Фактора расстояния.

   Подробные формулы и примеры — в описании параметра [Фактор расстояния](#id-5.-faktor-rasstoyaniya).
5. **Управление позицией**

   После исполнения ордера активируются тейк-профит и стоп-лосс.

   * **Тейк-профит** — цель по прибыли рассчитывается от цены исполнения ордера с учётом Фактора расстояния TP и глубины прострела.
   * **Стоп-лосс** — классический стоп-лосс в процентах от цены исполнения ордера.

   Подробные формулы и примеры — в описании параметров [Фактор расстояния TP](#faktor-rasstoyaniya-tp) и [Стоп-лосс](#stop-loss).

***

### Основные параметры

#### 1. Фрейм

<figure><img src="/files/ubTzqFSwKSINPZvivmMf" alt=""><figcaption></figcaption></figure>

Длительность одного фрейма наблюдения в секундах.

Фрейм автоматически делится на 3 равных интервала. Чем меньше фрейм, тем короче интервалы и точнее анализ прострелов.

**Значение по умолчанию:** 0,2 секунды

***

#### 2. Диапазон прострела

Диапазон значений глубины прострела в среднем интервале, выраженный в процентах.

Триггер формируется только если глубина прострела в среднем интервале попадает в указанный диапазон.

**Минимальное значение:** 0%

**Максимальное значение:** без ограничений

***

#### 3. Минимум сделок во фрейме

Минимальное количество сделок, которое должно произойти в каждом фрейме.

Фреймы с меньшим количеством сделок исключаются из оценки триггера.

**Значение по умолчанию:** 2

**Минимальное значение:** 0

**Максимальное значение:** без ограничений

***

#### 4. Минимальный объём торгов

Минимальный суммарный объём сделок в котируемой валюте для всего окна наблюдения.

Помогает исключить сигналы при низкой ликвидности.

**Значение по умолчанию:** 10 000

**Минимальное значение:** 0

**Максимальное значение:** без ограничений

***

#### 5. Фактор расстояния

Множитель для расчёта расстояния ордера, в процентах от размера фрейма.

Фактор расстояния работает по-разному в зависимости от режима размещения ордера (Следящий или Фиксированный).

**Режим Следящий** — Фактор расстояния умножается на глубину прострела, цена ордера считается от текущей цены:

глубина прострела:

* Buy: `глубина прострела = (max − min) / max`
* Sell: `глубина прострела = (max − min) / min`

расстояние ордера и цена ордера:

* расстояние ордера = глубина прострела × Фактор расстояния
* Buy: цена ордера = текущая цена × (1 − расстояние ордера)
* Sell: цена ордера = текущая цена × (1 + расстояние ордера)

где **текущая цена** — цена в момент срабатывания триггера.

<figure><img src="/files/X4DfeVSYxp6gnRfpbCd9" alt=""><figcaption></figcaption></figure>

**Пример Buy (Следящий):** прострел со 100 до 50, текущая цена = 70, Фактор расстояния = 80%

* глубина прострела = (100−50)/100 = 0,5
* расстояние ордера = 0,5 × 0,8 = 0,4
* цена ордера = 70 × (1 − 0,4) = 42

**Пример Sell (Следящий):** прострел со 100 до 150, текущая цена = 130, Фактор расстояния = 80%

* глубина прострела = (150−100)/100 = 0,5
* расстояние ордера = 0,5 × 0,8 = 0,4
* цена ордера = 130 × (1 + 0,4) = 182

**Режим Фиксированный** — Фактор расстояния умножается на размер прострела, цена ордера считается от границ прострела:

* Прострел вверх: цена ордера = нижняя граница + (верхняя − нижняя) × Фактор расстояния
* Прострел вниз: цена ордера = верхняя граница − (верхняя − нижняя) × Фактор расстояния

<figure><img src="/files/U65TSvVNMabRYKx88kPQ" alt=""><figcaption></figcaption></figure>

**Пример прострела вверх:** нижняя граница = 1, верхняя = 100, Фактор расстояния = 80%

* размер прострела = 100 − 1 = 99
* цена ордера = 1 + 99 × 0,8 = 80

**Пример прострела вниз:** нижняя граница = 1, верхняя = 100, Фактор расстояния = 80%

* размер прострела = 100 − 1 = 99
* цена ордера = 100 − 99 × 0,8 = 20,8

**Значение по умолчанию:** 80%

**Минимальное значение:** 0%

**Максимальное значение:** без ограничений

***

#### 6. Время жизни ордера

Время в секундах, в течение которого ордер остаётся активным.

В режиме Следящий ордер следует за ценой всё это время; в режиме Фиксированном стоит на месте. После истечения — отменяется.

**В режиме Следящий таймер обнуляется при каждом новом простреле, проходящем фильтры.** С точки зрения алгоритма это новый триггер и новый цикл работы, даже если ордер уже стоит и следует за ценой.

**Значение по умолчанию:** 1 секунда

**Минимальное значение:** 0 секунд

**Максимальное значение:** без ограничений

***

#### 7. Максимум ордеров

Максимальное количество неисполненных ордеров в любой момент времени.

Новый ордер не будет размещён, если количество активных ордеров достигло указанного лимита. Открытые позиции в этот лимит не входят.

**Значение по умолчанию:** 1

**Минимальное значение:** 0

**Максимальное значение:** без ограничений

***

#### 8. Частота выставления ордеров

Частота размещения новых ордеров в секундах при активном триггере.

**Значение по умолчанию:** 0,1 секунды

**Минимальное значение:** 0 секунд

**Максимальное значение:** без ограничений

***

#### 9. Диапазон отката

Допустимый диапазон отката от максимального движения цены прострела, задаётся в процентах от размера фрейма.

Ордер выставляется только когда откат цены попадает в указанный диапазон.

* 0% — откат отсутствует
* 100% — полный возврат к начальной точке движения

**Значение по умолчанию:** от 0% до 80%

***

#### 10. Направление прострела

Направление движения, которое алгоритм должен обнаруживать:

* **Вверх** — резкий рост цены
* **Вниз** — резкое падение цены

***

### Режим размещения

Определяет, как ведёт себя выставленный ордер до момента исполнения.

#### Режим Следящий

Ордер следует за ценой, сохраняя расстояние ордера, до истечения времени жизни ордера.

Вокруг текущей цены создаётся буфер. Пока цена внутри коридора — ордер не двигается.

#### Авторасстояние ордера

При включении новый ордер выставляется с пересчитанным расстоянием ордера под размер свежего прострела.

**Как это работает:** первый ордер исполнился (например, рассчитан с расстоянием 1,2%), затем пришёл новый прострел сильнее (1,8%). Новый ордер выставляется уже с расстоянием 1,8%, под размер этого прострела.

**Тип буфера:**

* **Статический** — фиксированный размер буфера, считается как процент от цены (например, 0,4%)
* **Динамический** — размер буфера адаптируется к размеру фрейма, считается как процент от самого прострела (например, 15%)

<figure><img src="/files/kUI1TQHcb4hcxV7TOpJd" alt=""><figcaption></figcaption></figure>

**Буфер** — ширина коридора в процентах, внутри которого цена может колебаться без перемещения ордера.

#### Задержка следования за ценой

Количество секунд, в течение которых ордер не будет перемещаться вслед за ценой после пересечения верхней границы буфера (для Buy) или нижней границы буфера (для Sell).

**Как это работает:**

1. Цена пересекает верхнюю границу буфера (Buy) или нижнюю границу буфера (Sell) — запускается таймер
2. В течение N секунд ордер не двигается за ценой, даже если она продолжает уходить дальше
3. Если цена вернётся в буфер за время задержки — ордер не перемещается
4. Если цена пересечёт буфер в обратную сторону — ордер переставится сразу без задержки

**Зачем нужна:**

* Защищает от частых перестановок при волатильности
* Снижает нагрузку на API биржи

#### Задержка отодвигания от цены

Количество секунд, в течение которых ордер не будет отодвигаться от цены после того, как она пересекла нижнюю границу буфера (для Buy) или верхнюю границу буфера (для Sell).

**Как это работает:**

1. Цена пересекает нижнюю границу буфера (Buy) или верхнюю границу буфера (Sell) — запускается таймер
2. В течение N секунд ордер не отодвигается, даже если цена продолжает приближаться
3. Если цена вернётся в буфер за время задержки — ордер не перемещается
4. Если цена пересечёт буфер в обратную сторону — ордер переставится сразу без задержки

**Зачем нужна:**

* Защищает от срабатывания при стремительных движениях без последующего отката
* Уменьшает количество лишних срабатываний ордеров

***

#### Режим Фиксированный

Ордер выставляется один раз по фиксированной цене и не перемещается. Цена рассчитывается от границ прострела с учётом Фактора расстояния — подробные формулы и примеры в описании параметра [Фактор расстояния](#id-5.-faktor-rasstoyaniya).

Если ордер не исполнен в течение времени жизни ордера — автоматически отменяется.

***

### Управление прибылью и рисками

#### Фактор расстояния TP

Множитель для расчёта цели по прибыли от цены исполнения ордера, в процентах от размера фрейма.

Фактор расстояния TP умножается на глубину прострела — получается итоговое расстояние до цели (расстояние тейк-профита).

**Формулы:**

глубина прострела:

* Buy: `глубина прострела = (max − min) / max`
* Sell: `глубина прострела = (max − min) / min`

расстояние тейк-профита и цена тейк-профита:

* расстояние тейк-профита = глубина прострела × Фактор расстояния TP
* Buy: цена тейк-профита = цена исполнения × (1 + расстояние тейк-профита)
* Sell: цена тейк-профита = цена исполнения × (1 − расстояние тейк-профита)

где **цена исполнения** — цена исполнения ордера.

<figure><img src="/files/yNj5lAGuMSGI4E8QpZ33" alt=""><figcaption></figcaption></figure>

**Пример Buy:** прострел со 100 до 50, цена исполнения = 42, Фактор расстояния TP = 90%

* глубина прострела = (100−50)/100 = 0,5
* расстояние тейк-профита = 0,5 × 0,9 = 0,45
* цена тейк-профита = 42 × (1 + 0,45) = 60,9

**Пример Sell:** прострел со 100 до 150, цена исполнения = 182, Фактор расстояния TP = 90%

* глубина прострела = (150−100)/100 = 0,5
* расстояние тейк-профита = 0,5 × 0,9 = 0,45
* цена тейк-профита = 182 × (1 − 0,45) = 100,1

**Тип исполнения:**

* **Рыночный** — закрытие позиции рыночным ордером
* **Лимитный** — закрытие позиции лимитным ордером

***

#### Стоп-лосс

Классический стоп-лосс в процентах от цены исполнения ордера.

**Формулы:**

* Buy: цена стоп-лосса = цена исполнения × (1 − Стоп-лосс)
* Sell: цена стоп-лосса = цена исполнения × (1 + Стоп-лосс)

где **цена исполнения** — цена исполнения ордера.

**Пример Buy:** цена исполнения = 42, Стоп-лосс = 2%

* цена стоп-лосса = 42 × (1 − 0,02) = 41,16

**Пример Sell:** цена исполнения = 182, Стоп-лосс = 2%

* цена стоп-лосса = 182 × (1 + 0,02) = 185,64

**Тип исполнения:**

* **Рыночный** — закрытие позиции рыночным ордером
* **Лимитный** — закрытие позиции лимитным ордером

***

### Контакты и поддержка

Если у вас возникли вопросы по настройке алгоритма или вы хотите предложить улучшения, обратитесь в [службу поддержки](https://t.me/moontrader_support_ru).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://guide.moontrader.com/torgovlya/algoritmicheskii-treiding/algoritm-shot-detect.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
