ZigZag EA
Обзор
Стратегия повторяет логику оригинального MT5 "ZigZag EA": она отслеживает три последовательных экстремума ZigZag и выставляет два стоп-ордера на пробой диапазона между предыдущими вершинами. Конвертация использует высокоуровневый API StockSharp и работает только с закрытыми свечами. Два последних завершённых экстремума формируют торговый коридор, а самый свежий экстремум ("room 0" в исходнике MQL) должен находиться внутри этого коридора, прежде чем стратегия активирует отложенные ордера. Подход симметричный: одновременно готовятся buy-stop и sell-stop заявки, позволяя рынку выбрать направление пробоя.
Индикаторы и входные данные
- Highest / Lowest. В StockSharp нет прямого аналога ZigZag, поэтому поведение индикатора моделируется через скользящие максимум и минимум с заданной глубиной. При смене направления обновляются буферы экстремумов так же, как оригинальный советник считывает буфер ZigZag.
- Свечи. Стратегия подписывается на настраиваемый тип свечей (по умолчанию минутные) и обрабатывает только завершённые бары, что делает её пригодной и для тестирования, и для реальной торговли.
Логика торговли
- Сохраняются последние три значения ZigZag. Два предыдущих экстремума определяют границы коридора (
high/low), а последний экстремум должен находиться внутри диапазона с учётом минимальной дистанции от брокера (StopsLevel). - Проверяются ограничения по размеру коридора (
MinCorridorPipsиMaxCorridorPips). Слишком узкие диапазоны фильтруются как шум, слишком широкие — чтобы избежать чрезмерных стопов. - Если коридор валиден и нет открытой позиции, выставляются симметричные отложенные ордера:
- Buy stop на уровне
high + EntryOffsetPips. - Sell stop на уровне
low - EntryOffsetPips.
- Buy stop на уровне
- Стоп-лосс и тейк-профит вычисляются по тем же правилам Фибоначчи, что и в MQL:
FiboStopLossумножает высоту коридора,FiboTakeProfitберёт выбранный уровень и вычитает из него исходный диапазон. Значения округляются к шагу цены инструмента. - При срабатывании одного из стоп-ордеров оставшийся отложенный ордер отменяется, а защитные stop-loss и take-profit регистрируются немедленно. Дополнительное трейлинг-сопровождение подтягивает стоп, когда цена проходит
TrailingStepPipsсверх базовой дистанции. - После закрытия позиции стратегия автоматически переходит в режим ожидания нового коридора.
Управление риском и ордерами
- Защитные stop-loss и take-profit выставляются как реальные стоп/лимит заявки, поэтому брокер контролирует исполнение и учёт гэпов.
- Логика трейлинга полностью повторяет советник: он активируется после прохождения
TrailingStopPips + TrailingStepPipsи затем перерегистрирует стоп при каждом улучшении не менее чем на один шаг трейлинга. - Размер позиции определяется базовым параметром
VolumeклассаStrategy. Блок выбора между фиксированным лотом и процентом риска из MQL опущен, так как в StockSharp расчёт объёма обычно настраивается отдельно.
Временной фильтр
- Торговля разрешена только в интервале
StartHour:StartMinute–StopHour:StopMinute. Если время окончания меньше времени начала, диапазон считается «ночным» и распространяется на следующую дату. - Все отложенные ордера отменяются при выходе за торговый интервал, что повторяет поведение MQL-версии.
Параметры
| Имя | Описание | Значение по умолчанию |
|---|---|---|
CandleType |
Тип свечей для анализа. | Минутные свечи |
ZigZagDepth |
Глубина поиска экстремумов. | 12 |
EntryOffsetPips |
Смещение ордеров от границ коридора. | 5 |
MinCorridorPips |
Минимальная высота допустимого коридора. | 20 |
MaxCorridorPips |
Максимальная высота коридора. | 100 |
FiboStopLoss |
Уровень Фибоначчи для расчёта стоп-лосса. | 61,8% |
FiboTakeProfit |
Уровень Фибоначчи для тейк-профита. | 161,8% |
StartHour / StartMinute |
Начало торгового окна. | 00:01 |
StopHour / StopMinute |
Конец торгового окна. | 23:59 |
TrailingStopPips |
Базовое расстояние трейлинг-стопа. | 5 |
TrailingStepPips |
Минимальное улучшение для переноса трейлинга. | 5 |
DrawCorridorLevels |
Отрисовывать маркер коридора на графике. | false |
Замечания по реализации
- Значения в пунктах вычисляются из шага цены. Для инструментов с 3 или 5 знаками после запятой шаг умножается на 10, что повторяет логику
adjusted_pointоригинального советника. - Используются высокоуровневые методы (
BuyStop,SellStop,SellLimit,BuyLimit), соответствующие рекомендациям репозитория. - Комментарии в коде оставлены на английском, а подробные описания подготовлены на трёх языках в README-файлах.
- Python-версия не создавалась — в каталоге находится только реализация на C#, как и требовалось.