Так время открытия бара у все равно то которое получено до закрытия терминала. Образуется новый бар, обновиться время. В чем проблема.
В том то и дело, что терминал выключается когда последний часовой бар на графике имеет час 22:00. Выключается в 22:45, например. Включается в 23:01 - запрос времени последнего часа после установления связи с сервером, и после предзапроса в OnInit() без всяких таймеров - все равно 22 часа. Это нормально по Вашему?
Проверяйте не расчет баров, а время свечи. Вот так будет правильно обновляться (проверил).
//--- Проверяем первый запуск индикатораif(prev_calculated<=0 ||
_weekOpenTime!=iTime(_Symbol,PERIOD_W1,0)+SEC_PER_DAY ||
_dayOpenTime!=iTime(_Symbol,PERIOD_D1,0) ||
_hourOpenTime!=iTime(_Symbol,PERIOD_H1,0) )
{
_weekOpenTime= 0;
_dayOpenTime = 0;
_hourOpenTime= 0;
//--- Проверяем, записано ли время открытия текущей неделиif(!CheckCurrentWeekOpenTime()) // Если время не записаноreturn(0); // Выходим//--- Проверяем, записано ли время открытия текущего дняif(!CheckCurrentDayOpenTime()) // Если время не записаноreturn(0); // Выходим//--- Проверяем, записано ли время открытия текущего часаif(!CheckCurrentHourOpenTime()) // Если время не записаноreturn(0); // Выходим//--- Устанавливаем флаг соединения с сервером для запуска таймера
_isConnected=true;
//---Print(__FUNCTION__,": Данные старших ТФ загружены!");
}
Проверяйте не расчет баров, а время свечи. Вот так будет правильно обновляться (проверил).
О каком расчете баров идет речь?
Проверю Ваш вариант, но, по сути, Вы просто добавили один "холостой" запрос данных в OnCalculate() и все, причем по логике, до "холостого" запроса дело даже не дойдет, т.к. prev_calculated <= 0 уже выполнится и будет исполнен блок первого запуска.
В любом случае - это костыльное решение, не должно быть таких ситуаций в языке. Связь установлена, функция получения данных проверяется на ошибки и на корректность полученных данных. А в итоге что? Данные все равно левые.
Вообще, если действовать наверняка, можно просто в ините запросить текущее время, затем в OnCalculate() запрашивать текущее время и сравнивать их до тех пор, пока они не будут различаться. Но это такой же костыль и быть такого не должно.
В том то и дело, что терминал выключается когда последний часовой бар на графике имеет час 22:00. Выключается в 22:45, например. Включается в 23:01 - запрос времени последнего часа после установления связи с сервером, и после предзапроса в OnInit() без всяких таймеров - все равно 22 часа. Это нормально по Вашему?
Время закрытия любого последнего бара будет TimeCurrent(то есть текущее). оно вам похоже и нужно, судя по вашему вопросу.
Taras Slobodyanik: Как я понимаю, терминал, в первый раз, выдает последние данные, те которые у него есть в истории, а уже потом происходит подгрузка с сервера.
Вопрос! Почему он выдает предыдущие данные после того, как связь с сервером уже установлена, был предзапрос данных в OnInit(), проверка на подгрузку данных в каждой из функций CheckCurren..(). Сколько, блин, проверок нужно сделать, чтобы все нормально отработало...
Попробуйте сами. Запустите индикатор, выключите терминал и включите, когда наступит новый час.
Так если вы получаете TimeCurrent
Возвращает последнее известное время сервера, время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов.
Так если вы получаете TimeCurrent
Возвращает последнее известное время сервера, время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов.
Подскажите, где в этом коде вызов TimeCurrent?
Подскажите, где в этом коде вызов TimeCurrent?
Так время открытия бара у все равно то которое получено до закрытия терминала. Образуется новый бар, обновиться время. В чем проблема.
Так время открытия бара у все равно то которое получено до закрытия терминала. Образуется новый бар, обновиться время. В чем проблема.
В том то и дело, что терминал выключается когда последний часовой бар на графике имеет час 22:00. Выключается в 22:45, например. Включается в 23:01 - запрос времени последнего часа после установления связи с сервером, и после предзапроса в OnInit() без всяких таймеров - все равно 22 часа. Это нормально по Вашему?
Проверяйте не расчет баров, а время свечи.
Вот так будет правильно обновляться (проверил).
Проверяйте не расчет баров, а время свечи.
Вот так будет правильно обновляться (проверил).
О каком расчете баров идет речь?
Проверю Ваш вариант, но, по сути, Вы просто добавили один "холостой" запрос данных в OnCalculate() и все, причем по логике, до "холостого" запроса дело даже не дойдет, т.к. prev_calculated <= 0 уже выполнится и будет исполнен блок первого запуска.
В любом случае - это костыльное решение, не должно быть таких ситуаций в языке. Связь установлена, функция получения данных проверяется на ошибки и на корректность полученных данных. А в итоге что? Данные все равно левые.
Вообще, если действовать наверняка, можно просто в ините запросить текущее время, затем в OnCalculate() запрашивать текущее время и сравнивать их до тех пор, пока они не будут различаться. Но это такой же костыль и быть такого не должно.
В том то и дело, что терминал выключается когда последний часовой бар на графике имеет час 22:00. Выключается в 22:45, например. Включается в 23:01 - запрос времени последнего часа после установления связи с сервером, и после предзапроса в OnInit() без всяких таймеров - все равно 22 часа. Это нормально по Вашему?
Время закрытия любого последнего бара будет TimeCurrent (то есть текущее). оно вам похоже и нужно, судя по вашему вопросу.
Как я понимаю, терминал, в первый раз, выдает последние данные, те которые у него есть в истории, а уже потом происходит подгрузка с сервера.
Вопрос! Почему он выдает предыдущие данные после того, как связь с сервером уже установлена, был предзапрос данных в OnInit(), проверка на подгрузку данных в каждой из функций CheckCurren..(). Сколько, блин, проверок нужно сделать, чтобы все нормально отработало...
Время закрытия любого последнего бара будет TimeCurrent (то есть текущее). оно вам похоже и нужно, судя по вашему вопросу.
Какого закрытия? Мне нужно время открытия...