Стратегия Cross (конверсия MQL 27596)
Общее описание
Cross Strategy — это перенос советника MetaTrader Cross.mq4 из каталога MQL/27596. Оригинальный алгоритм сравнивает цену открытия бара с экспоненциальной скользящей средней (EMA), при каждом пересечении разворачивает позицию и сразу задаёт фиксированные значения тейк-профита и стоп-лосса. Версия на StockSharp полностью повторяет логику, но использует высокоуровневый API платформы: подписки на свечи, привязку индикаторов и встроенные средства учёта позиций.
Логика торговли
- Индикатор — одна EMA по ценам закрытия. Период по умолчанию 200, как и в оригинальном MQL-скрипте.
- Формирование сигналов:
- Если бар открылся выше EMA и ранее условие было ложным, фиксируется бычий сигнал (
Cross(0, Open[0] > EMA)в MQL). - Если бар открылся ниже EMA после периода, когда условие было истинным или равным, появляется медвежий сигнал (
Cross(1, Open[0] < EMA)).
- Если бар открылся выше EMA и ранее условие было ложным, фиксируется бычий сигнал (
- Управление позицией — каждый сигнал приводит к развороту:
- При бычьем сигнале стратегия закрывает короткую позицию (если она есть) и открывает новую длинную с объёмом
Volume + |Position|. - При медвежьем сигнале выполняется зеркальное действие: закрывается длинная позиция и открывается короткая.
- При бычьем сигнале стратегия закрывает короткую позицию (если она есть) и открывает новую длинную с объёмом
- Фиксация результата — в процессе удержания позиции стратегия контролирует экстремумы свечи. Достижение стоп-лосса или тейк-профита, заданных в шагах цены, приводит к немедленному закрытию.
Параметры
| Параметр | Значение по умолчанию | Назначение |
|---|---|---|
EMA Length |
200 | Период EMA для определения направления. Значение должно быть больше нуля. |
Take Profit (steps) |
200 | Расстояние до тейк-профита в шагах цены. Ноль отключает цель по прибыли. |
Stop Loss (steps) |
100 | Расстояние до стоп-лосса в шагах цены. Ноль отключает защитный стоп. |
Candle Type |
Таймфрейм 1 минута | Тип свечей, на которых выполняются расчёты. Можно выбрать другой таймфрейм или пользовательский тип свечей StockSharp. |
Объём заявок задаётся свойством Volume. При развороте стратегия всегда отправляет объём Volume + |Position|, чтобы сначала закрыть текущую позицию и только после этого открыть новую.
Последовательность работы
- В
OnStartedстратегия подписывается на поток свечей с заданным типом и привязывает к нему EMA через методBind. - Обработчик пропускает незавершённые свечи и ждёт, пока EMA полностью сформируется. После этого он:
- Проверяет активную позицию и при необходимости закрывает её по стоп-лоссу или тейк-профиту (сравниваются минимум и максимум свечи).
- Анализирует новое состояние пересечения цены открытия и EMA.
- При появлении сигнала отправляет рыночный ордер на разворот.
- Метод
OnNewMyTradeотслеживает среднюю цену входа и направление текущей позиции, что важно при последовательных доливках. - При наличии графика создаются визуализации: свечи, EMA и сделки.
Управление рисками
- Стоп-лосс вычисляется как
цена входа ± StopLoss × PriceStepв зависимости от направления позиции. Если минимум (для лонга) или максимум (для шорта) свечи пересекает уровень, позиция закрывается. - Тейк-профит рассчитывается аналогично и срабатывает по пересечению соответствующего экстремума свечи.
- Защита счёта — при запуске вызывается
StartProtection(), чтобы использовать глобальные настройки защиты капитала в StockSharp.
Рекомендации по настройке
- Сокращение периода EMA или выбор более мелкого таймфрейма увеличивает число сделок и чувствительность к шуму. В этом случае разумно увеличивать расстояние стопов.
- Для мульти-инструментальной торговли создавайте отдельные экземпляры стратегии с собственными инструментами и параметрами свечей.
- При оптимизации выбирайте диапазоны параметров, соответствующие волатильности и шагу цены торгуемого инструмента.
Особенности конверсии
- MQL-массив
crossed[2]реализован через два булевых поля, которые сохраняют прошлое состояние условий пересечения. - Функция
OrderSendзаменена наBuyMarket/SellMarket, что позволяет одновременно закрывать противоположные позиции и открывать новые. - Значения EMA поступают через callback метода
Bind, поэтому в коде не используется прямой доступ кGetValue, что соответствует требованиям репозитория.
Данное описание позволит развернуть стратегию в экосистеме StockSharp и добиться поведения, идентичного оригинальному советнику MetaTrader, с дополнительными преимуществами по визуализации, тестированию и интеграции.