Стратегия последовательных покупок по таймеру
Общее описание
Стратегия последовательных покупок по таймеру повторяет работу советника MetaTrader buy_order.mq4, который отправляет рыночные заявки на покупку каждую секунду. Перенос на StockSharp сохраняет ту же синхронизацию: ордера выставляются в тот момент, когда таймер совпадает с ожидаемой секундой текущей минуты, а после отправки заданного количества сделок стратегия останавливается автоматически.
Реализация основана на высокоуровневом сервисе Timer из StockSharp, поэтому дополнительные индикаторы и подписки на свечи не требуются — логика полностью детерминирована таймером.
Основной алгоритм
- При старте стратегия включает защитный модуль
StartProtection()и запускает таймер с указанным интервалом (по умолчанию 1 секунда). - Каждое срабатывание таймера проверяет, доступна ли торговля, и совпадает ли текущая секунда с ожидаемой последовательностью.
- Если условия выполнены, отправляется рыночный ордер на покупку с заданным объемом.
- Процесс повторяется, пока не будет достигнуто требуемое количество ордеров, после чего стратегия завершает работу.
Сравнение секунд позволяет полностью воспроизвести поведение оригинального советника: первая заявка уходит только когда значение секунд равно нулю, дальнейшие заявки следуют за каждой следующей секундой.
Параметры
| Название | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
OrderVolume |
decimal |
0.01 |
Объем каждой рыночной покупки. При неположительном значении стратегия выводит предупреждение и завершает работу. |
OrdersToPlace |
int |
60 |
Количество заявок, которое нужно отправить перед остановкой стратегии. |
Interval |
TimeSpan |
1s |
Интервал между срабатываниями таймера. Значение в 1 секунду полностью повторяет логику из MQL, но при необходимости может быть изменено. |
Все параметры задаются через StrategyParam<T>, что упрощает оптимизацию и конфигурирование через пользовательский интерфейс.
Ход выполнения
- Инициализация — метод
OnReseted()сбрасывает счетчики перед повторным запуском или оптимизацией. - Запуск — в
OnStarted()стратегия обнуляет счетчики, активирует защиту и запускает таймер. - Срабатывание таймера — метод
OnTimer()синхронизирует секунды, отправляет ордера и ведет журналирование. После последней заявки стратегия останавливается. - Завершение — вспомогательный метод
CompleteStrategy()предотвращает повторные вызовыStop().
Особенности портирования
- Вызов
EventSetTimer(1)заменен наTimer.Start(TimeSpan.FromSeconds(1), OnTimer). - Комментарии к ордерам и «магическое» число из MetaTrader не используются; для отслеживания прогресса применяются сообщения в журнал.
- Для сохранения 60 заявок в минуту используется сравнение номера секунды, а не только счетчик срабатываний таймера.
Рекомендации по применению
- Укажите нужный инструмент и портфель перед запуском.
- Отрегулируйте
OrderVolumeв соответствии с минимальным лотом и требованиями брокера. - Уменьшите
OrdersToPlace, если нужно меньше сделок; для отключения привязки к секундам потребуется модифицировать код (продвинутый сценарий). - Следите за журналом сообщений, чтобы контролировать синхронизацию таймера и фактические отправки ордеров.
Ограничения
- Стратегия выполняет только покупки; для выхода из позиции требуется ручное вмешательство или внешний риск-менеджмент.
- Точность отправки ордеров зависит от таймера операционной системы и подключения; большие задержки могут нарушить равномерность последовательности.
Содержимое папки
CS/TimedBuyOrderStrategy.cs— реализация на C#.README.md— документация на английском языке.README_zh.md— документация на китайском языке.
Согласно требованиям проекта, Python-версия и соответствующая папка не создавались.