Стратегия AnyRange Cloud Tail System Tm Plus
Стратегия переносит логику эксперта Exp_i-AnyRangeCldTail_System_Tm_Plus.mq5 в экосистему StockSharp. Она строит пользовательский внутридневной диапазон между двумя заданными моментами времени, отслеживает пробои этого диапазона и выставляет сделки через заданное число баров так, чтобы синхронизироваться с оригинальной MQL-реализацией.
Поддерживаются как длинные, так и короткие позиции. Пользователь может управлять разрешением на открытие/закрытие сделок, расстояниями до стоп‑приказов в шагах цены, временем удержания позиции и окнами расчёта индикатора. Дополнительно реализован принудительный выход по времени, аналогичный циклу, который в исходном эксперте закрывал сделки по истечении nTime минут.
Торговая логика
Построение диапазона
- Параметры
RangeStartTimeиRangeEndTimeзадают часовое окно, внутри которого вычисляется опорный диапазон. - Для каждого завершённого дня стратегия запоминает максимум и минимум внутри этого окна. Если время начала больше времени окончания, диапазон автоматически переносится через полночь, как и в MQL-индикаторе.
- Пока новый диапазон не сформирован, используется последняя завершённая величина.
- Параметры
Определение пробоев
- Каждая закрытая свеча сравнивается с текущим диапазоном.
- Свечи, закрывшиеся выше верхней границы, получают цветовой код 2 или 3, свечи ниже нижней границы — код 0 или 1, а свечи внутри диапазона — код 4 (нет сигнала).
- Параметр
SignalBarзадаёт смещение: анализируется свеча, которая находится наSignalBar + 1бар назад, при этом более новая свеча (смещениеSignalBar) не должна повторять тот же цвет. Такой подход воспроизводит задержку, используемую экспертом перед выставлением ордеров.
Открытие позиций
- Покупка: допускается, если
AllowBuyEntry = true, на сигнале обнаружен цвет 2 или 3, а следующая свеча его не повторяет. - Продажа: допускается, если
AllowSellEntry = true, на сигнале обнаружен цвет 0 или 1, а следующая свеча его не повторяет. - При наличии встречной позиции её объём добавляется к новому рыночному ордеру, что позволяет мгновенно перевернуть позицию, как это делали функции из
TradeAlgorithms.mqh.
- Покупка: допускается, если
Закрытие позиций
- Обратный сигнал: если
AllowBuyExit = true, появление цвета 0 или 1 закрывает длинную позицию; еслиAllowSellExit = true, цвета 2 или 3 закрывают короткую позицию. - Выход по времени: при
UseTimeExit = trueпозиции ликвидируются по истеченииExitAfterMinutesминут удержания, что соответствует оригинальному ограничениюnTime. - Стоп‑приказы: параметры
StopLossPointsиTakeProfitPointsзадаются в шагах цены; значение 0 отключает соответствующую защиту.
- Обратный сигнал: если
Управление рисками
- Все заявки используют объём
OrderVolume. При развороте позиция закрывается и открывается заново с учётом текущего размера. - Метод
StartProtectionрегистрирует OCO‑стопы и тейк‑профиты сразу после запуска стратегии.
- Все заявки используют объём
Параметры
| Параметр | Описание | Значение по умолчанию |
|---|---|---|
OrderVolume |
Базовый объём ордера. | 0.1 |
AllowBuyEntry |
Разрешить вход в лонг при пробое вверх. | true |
AllowSellEntry |
Разрешить вход в шорт при пробое вниз. | true |
AllowBuyExit |
Разрешить закрывать лонг при пробое вниз. | true |
AllowSellExit |
Разрешить закрывать шорт при пробое вверх. | true |
UseTimeExit |
Включить выход по времени. | true |
ExitAfterMinutes |
Максимальное время удержания в минутах. | 1500 |
StopLossPoints |
Стоп‑лосс в шагах цены (0 = выключен). | 1000 |
TakeProfitPoints |
Тейк‑профит в шагах цены (0 = выключен). | 2000 |
SignalBar |
Смещение по барам при анализе индикатора (аналог MQL). | 1 |
RangeLookbackDays |
Максимальное количество прошлых сессий, в которых ищется завершённый диапазон; 0 — только текущий. | 1 |
RangeStartTime |
Время начала окна для диапазона. | 02:00 |
RangeEndTime |
Время окончания окна для диапазона. | 07:00 |
CandleType |
Тип/таймфрейм свечей для расчётов. | 30 минут |
Особенности реализации
- Используется подписка
SubscribeCandlesи обработчикWhenNew, поэтому решения принимаются только по завершённым свечам, как и в исходном эксперте. - Диапазон хранится в компактных структурах, а максимум/минимум вычисляются вручную без LINQ, что соответствует требованиям проекта.
- Выход по времени запоминает момент открытия длинной и короткой позиции по отдельности, полностью повторяя MQL-логику перебора открытых сделок.
OrderVolumeсинхронизируется с базовым свойствомStrategy.Volume, поэтому заданный объём корректно отображается в интерфейсе.- Все комментарии в коде оставлены на английском языке, что упрощает дальнейшую поддержку и адаптацию.
Рекомендации по использованию
- Убедитесь, что поставщик данных передаёт свечи того же таймфрейма, что указан в
CandleType, иначе сигналы пробоя будут смещены. - При работе с инструментами, имеющими сложную сессию, измените
RangeStartTime/RangeEndTime, чтобы диапазон формировался в релевантный период накопления. - Для инструментов с нестандартным шагом цены проверяйте реальные уровни стоп‑приказов в журнале заявок или на графике, чтобы убедиться в корректности пересчёта точек.
- При переходе на более быстрые таймфреймы сократите
ExitAfterMinutes, чтобы ограничить время удержания позиции.