|
Хм.. Hour() возвращает серверное время, это полезно, разумеется, но в процессе работы программы значение этой функции не меняется. Как же нам начать работу ровно в 10 часов утра, например?..
подумайте еще раз
Hour() Возвращает текущий час.
В старте программы пишем: "Если текущий час стал равен 10, то выполняем какие-то действия."
Могу дать готовые фрагменты подобного кода. Входной параметр времени старта для удобства задаем как double dbTime0= ЧАСЫ.МИНУТЫ.
extern double dbTime0 = 9.15; //Время старта = 9ч.15мин, входной параметр. ///////// datetime dt_T0;// Время старта (datetime), глобальная переменная советника. /////////
В init() пересчитываем double в datetime и суммируем с началом текущего дня. Проверяем на этапе отладки Принтом.
init() ////////// dt_T0=dbTime0; //расчет-преобразование double(Time0) в datetime(dt_T0) dt_T0=(dbTime0*100-dt_T0*40)*60 + TimeCurrent()-TimeCurrent()%(24*60*60); Print("init:TimeStart= ",TimeToStr(dt_T0)); //после проверки удаляем ///////////
В start() остается сравнить задаваемое время с текущим
start() //////// if(TimeCurrent()<dt_T0) return(0); //ожидаем время старта ////////
К сожалению, не работает. Я сделал такое условие:
if(TimeCurrent()!=dt_T0) {return(0);}
else {Alert("Time");}
Сообщение не появляется.
Сделайте простой скрипт:
Alert("Текущий час терминального времени = ",Hour()," текущая минута = ",Minute()," Итого время в терминале сейчас = ",Hour(),":", Minute() );
Затем откомпилируйте скрипт и бросьте его на график. Далее бросьте его на график через пару тройку минут, потом через час-другой и сравните выданные им результаты. Это Вам кое-что прояснит.
Все, проблема уже не актуальна - работает Alert("Time");
Есть другая проблема. Задача моя заключается в том, что по наступлении определенного времени необходимо начать анализировать график, отлавливать моменты появления новых баров и выполнять определенные действия при появлении каждого нового бара. Как же я всё это реализовал? Вот так:
функция NewBar() возвращает true, если появился новый бар:
start () {
if(TimeCurrent()!=dt_T0) {return(0);}
else {
if (NewBar== true) {..действия..}
return 0;
} }
Очевидно, что это работать не будет.. Ибо, например, запустились мы в 13:58, проверили, появился ли новый бар: не появился (ибо H1). Return 0; При следующем запуске функции start() новый бар, может, уже и появился, но время-то не 13:58 уже! Так вот, какой алгоритм можно вообще составить, чтобы при наступлении заданного времени он не завершал функцию start();, а просто ждал появления нового бара?
Не завершать функцию Старт - значит "подвесить" советника. Это не корректно.
Перед блоком инициализации объявляете целочисленную переменную, например, OldBars
В блоке инициализации пишете:
OldBars=Bars;
В функции start() пишете
if(Bars>OldBars){ OldBars=Bars; // преверяем, а ни наступило ли нужное время // если наступило, то выполняем какие-то действия }

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день. Кто может подсказать, как советнику начать исполнять код в определенное время? В 9 утра, например. Ну или может, есть какой другой способ рассматривать первый бар после открытия биржи. То есть запускаю я советника днем, а он ждет до вечера, биржа закрывается, ждет всю ночь, пока биржа не откроется, наконец, и начинает работу (анализ первого поступившего бара).
Я просто не могу понять, как это реализовать, ибо в данных типа datetime хранится вовсе не дата и время, а кол-во секунд с 01.01.1970...