Стратегия повторяет советник MetaTrader 4 «1-2-3_forCodeBase_v01.mq4» автора Martes. Алгоритм анализирует закрытые свечи в поисках разворотной модели 1-2-3: два последовательных трендовых участка и завершающая коррекция. В портированной версии сохранены все правила исходного эксперта, включая кастомные индикаторы длины трендов (RelDownTrLen_forCodeBase_v01 и RelUpTrLen_forCodeBase_v01) и фильтрацию по MACD.
Для входа в лонг нужен свежий минимум (точка 3) возле текущей цены, предыдущий максимум (точка 2) и более древний минимум (точка 1). Предыдущий нисходящий тренд обязан быть как минимум в TrendRatio раз длиннее текущей восходящей коррекции, а MACD должен пересечь сигнал (или нулевую линию) снизу вверх и оставаться положительным в точке 3. Правила для шорта зеркальны. Стоп выставляется на один пункт за точкой 3, тейк-профит равен высоте предыдущего свинга, а опциональный трейлинг по пунктам подтягивает стоп при движении позиции в прибыль.
Правила торговли
Подписка на заданный тип свечей (CandleType) и расчёт MACD (fast/slow/signal) по ценам закрытия.
Поддержание кольцевого буфера тел свечей для поиска структуры 1-2-3. Минимумы определяются как локальные минимумы тела, максимумы — как локальные максимумы.
Расчёт относительной длины трендов с помощью выпуклой оболочки, как в оригинальных индикаторах. Новейший нисходящий участок (нормирован к [0,1]) обязан превышать предыдущий восходящий участок не менее чем в TrendRatio раз (для шорта наоборот).
Подтверждение сигнала MACD:
Лонг: MACD пересекает сигнал (или ноль) снизу вверх и значение MACD в точке 3 положительное.
Шорт: MACD пересекает сигнал (или ноль) сверху вниз и значение MACD в точке 3 отрицательное.
Дополнительные фильтры:
Расстояние от текущей цены до точки 2 не превышает пяти пунктов.
Потенциальный стоп |point2 - point3| минимум 13 пунктов.
TakeProfitPips должен быть ≥ 10 — при меньшем значении торговля блокируется, как в оригинале.
Управление ордерами:
Вход BuyMarket/SellMarket объёмом TradeVolume (прибавляется к текущей позиции при развороте).
Стоп-лосс = точка 3 ± один шаг цены.
Тейк-профит = цена входа ± |point2 - point3|.
Если TrailingStopPips > 0, стоп подтягивается на указанную дистанцию после того, как плавающая прибыль превысит эту величину.
Закрытие по стопу, тейку или трейлингу. Одновременно может быть открыта только одна позиция.
Параметры
Параметр
Тип
Значение по умолчанию
Описание
TakeProfitPips
decimal
60
Наследованный параметр советника. Если установить меньше 10, торговля отключается.
TradeVolume
decimal
0.5
Объём сделок в лотах MetaTrader.
TrailingStopPips
decimal
30
Дистанция трейлинг-стопа в пунктах MetaTrader. 0 — отключить трейлинг.
TrendRatio
decimal
4
Минимальное соотношение длины основного тренда к коррекции.
CandleType
DataType
H1
Тип свечей для расчёта паттерна и MACD.
MacdFast
int
12
Период быстрой EMA в MACD.
MacdSlow
int
26
Период медленной EMA в MACD.
MacdSignal
int
9
Период сигнальной EMA.
PatternLookback
int
100
Максимальное число свечей, сканируемых при поиске точек 1-2-3.
Особенности реализации
Логика индикаторов RelDownTrLen и RelUpTrLen перенесена дословно: выпуклая оболочка на телах свечей находит самый длинный монотонный сегмент и возвращает его относительную длину в диапазоне [0,1].
История свечей и значений MACD хранится в ограниченных буферах (до 600 элементов), что предотвращает рост памяти и обеспечивает достаточную глубину для анализа.
Стопы и цели сопровождаются вручную, как в MetaTrader: проверяются экстремумы свечей, а трейлинг подтягивается только при достаточном продвижении цены.
Свойство Volume синхронизируется с TradeVolume при сбросе и старте, поэтому оптимизация использует стандартный механизм стратегии.