My System Strategy — порт эксперта MetaTrader 4 MySystem.mq4 (каталог MQL/9601) на платформу StockSharp. В исходном советнике анализируются индикаторы Bulls Power и Bears Power, их значения складываются в единый показатель импульса, после чего открываются контртрендовые позиции при смене знака импульса. Перевод на C# полностью повторяет эту логику, добавляет явное хранение уровней защиты и делает каждый коэффициент доступным через параметры стратегии, что облегчает оптимизацию.
В оригинале iBullsPower и iBearsPower вызывались с разными типами цены. В версии StockSharp оба индикатора питаются общей свечной серией, а «предыдущее» значение рассчитывается и запоминается вручную, что сохраняет задуманный сдвиг. Сохраняются исходные настройки: таймфрейм 15 минут, расстояния для стопов/тейков и алгоритм трейлинг-выхода.
Торговая логика
Подписаться на выбранный поток свечей (по умолчанию 15-минутный) и ждать закрытия каждой свечи.
После завершения свечи получить свежие значения Bulls Power и Bears Power, вычислить среднее (bulls + bears) / 2.
Сохранить предыдущее среднее в _previousAveragePower, имитируя обращение к индикатору со сдвигом в MQL.
Правила входа (работают только без открытой позиции):
Шорт — если прошлое среднее больше текущего и текущее остаётся положительным (pos1pre > pos2cur && pos2cur > 0).
Лонг — если текущее среднее становится отрицательным (pos2cur < 0), то есть преобладает Bears Power.
Управление выходом выполняется до проверки новых сигналов на каждой свече:
Контролировать зафиксированные уровни тейк-профита и стоп-лосса, которые были записаны при открытии позиции.
Применять трейлинг из исходного эксперта: для лонга — выход при ослаблении импульса (pos1pre > pos2cur) и достижении ценой заданной дистанции; для шорта — выход при уходе совокупного импульса в отрицательную зону и прохождении нужного пути вниз.
При срабатывании любого условия вызвать ClosePosition() для закрытия позиции и ждать следующей свечи.
Параметры
Имя
Описание
Значение по умолчанию
Примечания
TakeProfitPoints
Расстояние до тейк-профита в шагах цены.
86
Аналог параметра TakeProfit в MQL. Ноль отключает тейк-профит.
StopLossPoints
Расстояние до стоп-лосса в шагах цены.
60
Аналог параметра StopLoss. Ноль отключает стоп.
TrailingStopPoints
Дистанция для трейлинг-выхода (шаги цены).
10
При нуле трейлинг не используется.
OrderVolume
Объём заявки при входе.
8.3
Соответствует Lots из исходника.
PowerPeriod
Период индикаторов Bulls/Bears Power.
13
Полностью повторяет оригинал.
CandleType
Тип свечей, используемый для расчётов.
15m
Измените при переносе на другой таймфрейм.
Параметры заданы через Param(), поэтому доступны в интерфейсе и в оптимизаторе.
Управление рисками
В OnPositionChanged запоминаются стартовые уровни стоп-лосса и тейк-профита. Пересчёт из «пунктов» выполняется с помощью вспомогательной функции, использующей PriceStep (для инструментов с 3 или 5 знаками после запятой применяется множитель ×10, как в MetaTrader).
При выполнении любого защитного условия вызывается ClosePosition(), что гарантирует единичную рыночную сделку на выход и не допускает дублирования приказов.
Стратегия работает только с одной позицией, полностью повторяя проверку OrdersTotal() < 1 в MQL; хеджирующие комбинации не используются.
Особенности портирования
Различие между PRICE_WEIGHTED и PRICE_CLOSE аппроксимировано хранением предыдущего среднего значения, что избавляет от необходимости заводить два отдельных индикатора с разными типами цены.
В исходном коде были некорректные вызовы OrderSelect внутри блока трейлинга. В C# реализовано ожидаемое поведение: позиция закрывается, когда цена проходит заданную дистанцию и одновременно выполняется условие по импульсу.
Для имитации внутридневных касаний трейлинг использует максимумы и минимумы свечей, поскольку в StockSharp по умолчанию обрабатываются закрытые свечи.
Объёмы заявок, расстояния стопов и периоды индикаторов оставлены неизменными, чтобы можно было воспроизвести прежние настройки.
Рекомендации по использованию
Подключайте стратегию к инструменту, у которого заданы PriceStep и Decimals; при их отсутствии расчёт «пункта» будет упрощён до 1.
Настройте OrderVolume, TakeProfitPoints и StopLossPoints в соответствии с размером контракта и тиковой стоимостью.
При смене таймфрейма обновите CandleType и заново подберите дистанцию трейлинга — на более коротких свечах он будет срабатывать чаще.