Control Panel Strategy
Обзор
Control Panel Strategy переносит ручную панель управления из исходного скрипта MQL5 в высокоуровневый API StockSharp. Класс предоставляет методы, которые повторяют каждую кнопку панели: переключатели объёмов, рыночные заявки на покупку и продажу, закрытие позиции, разворот и отдельную процедуру переноса стопа в безубыток. Стратегия также умеет автоматически выставлять защитные стоп-лоссы и тейк-профиты вокруг средней цены входа, как и оригинальный эксперт.
Вместо рисования элементов на графике реализация в StockSharp предлагает типизированный интерфейс. Его можно вызывать из пользовательского интерфейса, скриптов или внешних сервисов. Стратегия хранит выбранные пресеты объёмов, нормализует их по шагу инструмента и отправляет рыночные/стоп/лимитные заявки через встроенные методы BuyMarket, SellMarket, SellStop, BuyLimit и т. д.
Параметры
- VolumeList – список объёмов через точку с запятой. Используются только первые девять значений, чтобы сохранить совместимость с разметкой MQL. Пробелы игнорируются, некорректные числа пропускаются.
- CurrentVolume – суммарный объём, собранный из отмеченных пресетов. Сеттер округляет значение с использованием
Security.VolumeStep(если задан) либо до двух знаков после запятой. Параметр можно задавать вручную при интеграции с внешним UI. - BreakEvenSteps – количество шагов цены, добавляемое к цене входа при вызове
ApplyBreakEven(). Если у инструмента отсутствуетPriceStep, параметр трактуется как прямой ценовой сдвиг. - StopLossSteps – первоначальный отступ стоп-лосса в шагах цены. Нулевое значение отключает автоматическую установку стопов при открытии/изменении позиции.
- TakeProfitSteps – первоначальный отступ тейк-профита. Работает аналогично стоп-лоссу.
Ручные действия
Публичные методы позволяют привязать стратегию к кнопкам, хоткеям или внешним скриптам:
ToggleVolumeSelection(int index)– имитирует переключатели объёмов, добавляя или убирая выбранный пресет. При неверном индексе выбрасывается исключение.ResetVolumeSelection()– сбрасывает все пресеты и устанавливаетCurrentVolumeв ноль.ExecuteBuy()/ExecuteSell()– отправляют рыночные заявки с текущим объёмом. Возвращаютfalse, если объём равен нулю.CloseAllPositions()– закрывает текущую позицию рыночной заявкой противоположного направления.ReversePosition()– закрывает текущую позицию и сразу открывает новую в противоположную сторону с тем же выбранным объёмом – полный аналог кнопки «Reverse».ApplyBreakEven()– пересчитывает защитный стоп каксредняя цена ± BreakEvenSteps * PriceStepи выставляет новую стоп-заявку (SellStopдля длинной позиции,BuyStopдля короткой). Метод возвращаетtrueтолько при наличии открытой позиции и положительном смещении.
При каждом изменении позиции метод OnPositionChanged пересобирает защитные заявки: сначала отменяет старые стоп/тейк, затем создаёт новые на основе актуальной средней цены и заданных отступов. После закрытия позиции (вручную или по защитным ордерам) активные заявки снимаются, чтобы избежать «зависших» заявок на бирже.
Сценарий использования
- Настройте нужные пресеты объёмов в VolumeList, например
0.05; 0.10; 0.25; 0.50; 1.00. - Отметьте один или несколько пресетов с помощью
ToggleVolumeSelection. ПараметрCurrentVolumeпокажет суммарный объём с учётом округления. - Вызовите
ExecuteBuyилиExecuteSell, чтобы открыть позицию. Если StopLossSteps или TakeProfitSteps больше нуля, стратегия автоматически выставитSellStop/BuyStopиSellLimit/BuyLimitотносительно средней цены входа. - Когда цена движется в прибыль, используйте
ApplyBreakEven, чтобы перенести стоп в безубыток с заданным запасом. CloseAllPositionsполностью закрывает позицию, аReversePositionзакрывает и сразу переворачивает её, сохраняя выбранный объём.ResetVolumeSelectionочищает панель перед следующим циклом торговли.
Примечания
- Логика безубытка и защитных ордеров опирается на
PositionAvgPriceиSecurity.PriceStep. Перед запуском убедитесь, что метаданные инструмента заполнены. - В
OnStartedвызываетсяStartProtection(), чтобы движок StockSharp отслеживал связанные стопы и тейки. - Методы являются синхронными обёртками над ордерными помощниками StockSharp. Если адаптер требует строгой последовательности подтверждений, дождитесь событий ордеров перед следующей командой.
- Класс удобно встраивать в собственные панели WPF/WinForms, REST-сервисы или консольные утилиты, сопоставляя события интерфейса с описанными методами.