Стратегия повторяет советник MetaTrader 4 open_close.mq4. Она работает с одним инструментом и сравнивает цены открытия и закрытия двух последовательных свечей. При отсутствии позиции робот торгует против резких одноcвечных движений (паттерн разрыва и разворота). Когда сделка уже открыта, выход происходит при смене паттерна или при достижении порога защитного убытка по плавающему результату.
Торговые правила
Вход
Торговля возможна только после формирования предыдущей свечи (аналог исходного условия Volume[0] == 1).
Покупка: текущая свеча открылась выше, чем предыдущая, и закрылась ниже предыдущего закрытия. Объём покупается по рынку.
Продажа: текущая свеча открылась ниже предыдущей и закрылась выше предыдущего закрытия. Объём продаётся по рынку.
В каждый момент времени допускается только одна позиция. Новые сигналы игнорируются до её закрытия.
Выход
Защита капитала. Плавающий результат рассчитывается от средней цены входа. Если убыток превышает MaximumRisk × Portfolio.CurrentValue, позиция немедленно закрывается. В оригинале использовалась функция AccountMargin; здесь она заменена на доступную оценку стоимости портфеля.
Смена паттерна.
Длинная позиция закрывается, когда следующая свеча продолжает падение (open < предыдущий open и close < предыдущий close).
Короткая позиция закрывается, когда следующая свеча продолжает рост (open > предыдущий open и close > предыдущий close).
Управление объёмом
Базовый объём вычисляется по параметру MaximumRisk: стоимость портфеля умножается на коэффициент риска и делится на 1000, что повторяет формулу MetaTrader AccountFreeMargin * MaximumRisk / 1000.
Если данные портфеля недоступны, используется резервный параметр InitialVolume.
После двух и более убыточных сделок подряд объём уменьшается на volume × losses / DecreaseFactor, что воспроизводит цикл подсчёта убытков в исходном коде.
Минимальный размер сделки — 0.1 лота. Затем объём приводится к шагу инструмента и ограничениям биржи.
Параметры
Имя
Тип
Значение по умолчанию
Описание
InitialVolume
decimal
0.1
Резервный объём, если нет данных о капитале.
MaximumRisk
decimal
0.3
Доля капитала, определяющая размер сделки и максимально допустимый плавающий убыток.
DecreaseFactor
decimal
100
Коэффициент снижения объёма после серии убыточных сделок.
CandleType
DataType
таймфрейм 15 минут
Свечи, на которых оценивается паттерн.
Особенности реализации
Подписка выполняется на выбранный тип свечей; обрабатываются только закрытые свечи, что соответствует проверке Volume[0] > 1.
Плавающий результат вычисляется по текущей позиции и последней цене закрытия, поскольку в StockSharp нет прямых аналогов AccountProfit и AccountMargin из MetaTrader.
Серия убыточных сделок отслеживается по факту исполнения заявок, поэтому DecreaseFactor работает так же, как исторический анализ в MQL.
Объём корректируется по Security.VolumeStep, MinVolume и MaxVolume, чтобы соблюсти требования площадки.
При наличии области графика отображаются свечи и собственные сделки для визуальной отладки.