Функция сна
Возможность ожидать до определенного времени необходима для сиБотов, особенно для тех, которые должны быть запланированы или активированы при наступлении какого-либо события (например, публичного объявления). Метод Sleep() в cTrader позволяет приостанавливать алгоритмы до истечения или приближения указанного времени.
Примечание
Функция сна доступна только для сиБотов и индикаторов.
Это руководство по API познакомит вас с методом Sleep() и тем, как правильно его использовать.
Метод Sleep() за одну минуту!
- Метод
Sleep()позволяет разработчикам приостанавливать выполнение алгоритма с установленными гибкими временными параметрами. - Если вы знаете дату и время конкретного события, на которое ваш сиБот должен отреагировать индивидуальной стратегией, используйте функцию сна для торговли на новостях и реагирования на запланированные события.
- Установите период для функции сна — от миллисекунд до любого промежутка времени.
- Метод
Sleep()доступен только для алгоритмов .NET 6 и работает должным образом в бэктестинге.
Как работает метод sleep()
Функция сна доступна только для алгоритмов .NET 6. Пока сиБот находится в спящем режиме, все остальные события в коде будут игнорироваться.
Пример
Если событие BarOpened произошло пять раз во время спящего режима, ни один из пропущенных обработчиков OnBar() не будет вызван после пробуждения сиБота. В этом случае будут вызваны только новые предстоящие события.
Тем не менее, сиБоты обрабатывают все сообщения данных, находясь в спящем режиме (например, если вызывается RefreshData()).
Примечание
Указывая время сна, вы устанавливаете минимальный интервал приостановки алгоритма. Фактическое время сна всегда будет равно или больше запрошенного времени приостановки.
Для применения метода Sleep() разработчики алгоритмов должны использовать одну из этих сигнатур в зависимости от своей цели.
Чтобы приостановить алгоритм до истечения указанного промежутка времени:
void Sleep(Timespan timespan)
Чтобы приостановить алгоритм до истечения указанного количества миллисекунд:
void Sleep(int milliseconds)
Чтобы приостановить алгоритм до приближения указанного времени и даты:
void Sleep(DateTime dateTime)
Пример
Предположим, что следующее выступление действующего председателя Федеральной резервной системы Джерома Пауэлла запланировано на 11 декабря 2023 года в 11:00. Вы ожидаете некоторых заявлений, которые повлияют на тренд EURUSD, и разработали сиБота, который будет следовать соответствующей стратегии прямо с начала выступления. В этом случае вы можете применить метод Sleep() следующим образом.
DateTime doomsday = new DateTime(2023, 12, 11, 11, 0, 0);
Sleep(doomsday)
Предупреждение
Если параметр DateTime не соответствует часовому поясу алгоритма, будет выброшено исключение ArgumentException.
Метод Sleep() работает должным образом в бэктестинге. Если вы хотите остановить спящий сиБот из пользовательского интерфейса, вам не нужно ждать, пока он проснется. Нажмите кнопку Stop, и он прекратит работу без тайм-аута.
Создайте пример сиБота
Следующий пример сиБота засыпает на 30 секунд после запуска, при этом соответствующее сообщение выводится в журнал. После этого он размещает рыночный ордер на покупку для USDJPY.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |

Обзор
Функция сна позволяет разработчикам алгоритмов приостанавливать выполнение других методов, даже если сиБот был запущен. Применяя метод Sleep() с его гибкими временными параметрами, вы всегда будете вовремя реагировать на запланированные события своей индивидуальной стратегией.