Когда вы программируете индикатор или советник, во многих случаях вам потребуется выполнить какую-либо задачу при открытии новой свечи. Для многих начинающих это может показаться сложной задачей, но вы увидите, что это не так. В этой статье мы рассмотрим пример простого кода.
В автоматизации торговли часто требуется выполнить некоторые задачи или проверки, когда свеча закрывается и открывается. К примеру:
- Отправка уведомлений о статусе последней закрытой свечи.
- Проверка, стоит ли открывать или закрывать новый ордер при определенных значениях индикатора.
- Обновление цен для тейк-профита или стоп-лосса.
Эти задачи можно выполнять всего лишь один раз на открытии свечи. Посмотрим, как это можно реализовать в коде.
//Создаем переменную для хранения времени открытия новой свечи. Присваиваем переменной текущее время сервера. datetime NewCandleTime=TimeCurrent(); //Создааем функцию, кторая возвращает true каждый раз, когда инициализируется скрипт, например, при первой загрузке индикатора или советника или при изменении таймфрейма. bool IsNewCandle(){ //Если время свечи при последнем запуске функции совпадает со временем открытия этой свечи, возвращаем false, потому что это не новая свеча. if(NewCandleTime==iTime(Symbol(),0,0)) return false; //В противном случае это новая свеча, возвращаем true и обновляем ее время. else{ NewCandleTime=iTime(Symbol(),0,0); return true; } } void OnTick(){ if(IsNewCandle()){ //Задание, которое должно быть выполнено в начале открытия новой свечи. } }
Логика кода следующая:
- Создаем переменную и сохраняем в нее текущее время сервера.
- Создаем функцию, которая проверяет время и возвращает истину, если это новая свеча, и ложь, если нет.
- Сравниваем время открытия последней свечи со временем открытия текущей свечи.
- Если это время одинаковое, тогда это та же самая свеча, если оно другое, тогда это новая свеча.
- Если это новая свеча, возвращаем true и обновляем ее время.
Стоит помнить, что IsNewCandle() будет возвращать true каждый раз при инициализации функции. Например, при первом запуске, а также при изменении торгового инструмента или таймфрейма.