[СЕРВИСДЕСК] Ошибка получения времени старшего ТФ в таймере! - страница 11

 
Alexey Kozitsyn:

Какого закрытия? Мне нужно время открытия...

У вас же везде идет проверки проверки времени открытия последнего бара, вот его вы и получаете. Сразу после открытия терминала, бар еще не образовался в OnInit.

 
Konstantin Nikitin:

У вас же везде идет проверки проверки времени открытия последнего бара, вот его вы и получаете. Сразу после открытия терминала, бар еще не образовался в OnInit.

...без комментариев, с Вами я разговор закончил.

 
Alexey Kozitsyn:

Вопрос! Почему он выдает предыдущие данные после того, как связь с сервером уже установлена, был предзапрос данных в OnInit(), проверка на подгрузку данных в каждой из функций CheckCurren..(). Сколько, блин, проверок нужно сделать, чтобы все нормально отработало...

Символов и периодов много, если терминал был долго в оффлайне, то нужно загрузить много данных.
Чтобы не ждать этой загрузки, которая зависит от скорости интернета и сервера брокера, терминал сразу выдает предыдущие данные.
Те которые уже есть в наличии.

Поэтому это не "костыльное решение", а необходимая проверка подгрузки последней свечи.

пс. а как вы, в дальнейшем, проверяете появление нового бара?

 
Taras Slobodyanik:

Символов и периодов много, если терминал был долго в оффлайне, то нужно загрузить много данных.
Чтобы не ждать этой загрузки, которая зависит от скорости интернета и сервера брокера, терминал сразу выдает предыдущие данные.
Те которые уже есть в наличии.

Поэтому это не "костыльное решение", а необходимая проверка подгрузки последней свечи.

Вы чувствуете проблему логики? Если история еще не загружена, а давай я выдам "что-то" и подожду, пока данные не обновятся. И пофиг, корректные это данные или нет...

Плюс, даже если терминал 5-10 минут в оффлайне - та же ерунда. Даже если в окне данных всего 3 символа - та же ерунда. Все проверки соблюдены - та же ерунда.

Вы понимаете, что советы разработчиков по поводу корректной подгрузки - НЕ РАБОТАЮТ. Это Вам ни о чем не говорит?

 
Сейчас прилетело обновление 1126 на MQDemo... проверю еще на этой версии в понедельник.
 
Alexey Kozitsyn:

Вы чувствуете проблему логики? Если история еще не загружена, а давай я выдам "что-то" и подожду, пока данные не обновятся. И пофиг, корректные это данные или нет...

Эта логика только при первом запуске-открытии символа.
Терминал не знает будут ли еще свечи, выдает то что есть.

Потом появляется последняя свеча.

 
Taras Slobodyanik:

Эта логика только при первом запуске-открытии символа.
Терминал не знает будут ли еще свечи, выдает то что есть.

Потом появляется последняя свеча.

Обновил свое сообщение.

Вот скажите, Вы хотите каждый раз тратить часы работы, чтобы выяснять такие нюансы, или хотите один раз прочитать документацию и все понять? Вы хотите мучиться с "предзагрузками" или просто получать ошибку в случае, если данные еще не обновлены?

 
Taras Slobodyanik:

У Вас, кстати, какая версия терминала?

 
Taras Slobodyanik:

пс. а как вы, в дальнейшем, проверяете появление нового бара?

//+------------------------------------------------------------------+
//| Проверяем образование нового часа                                |
//+------------------------------------------------------------------+
bool CheckNewHour()     
        {
         //--- Сбрасываем код последней ошибки
         ResetLastError();
         //--- Получаем время открытия текущего часа
         const datetime hOpenTime = iTime( _Symbol, PERIOD_H1, 0 );
         //--- Проверяем корректность полученного времени
         if( hOpenTime == 0 || GetLastError() != 0 )            // Если возникла ошибка или время не получено
                 return( false );                                                                               // Возвращаем ложь
         //--- Сравниваем полученное время с сохраненным
         if( hOpenTime == _hourOpenTime )                                       // Если время совпадает
                 return( false );                                                                               // Возвращаем ложь
         //--- Запоминаем время нового часа
         _hourOpenTime = hOpenTime;
         //--- Возвращаем истину
         return( true );
        }
 

Не вижу проблемы, появилась новая свеча - делаем перерасчет последней свечи индикатора/советника.
Появилось больше одной новой свечи - делаем полный перерасчет индикатора/советника.
Это то же самое - появляется новая свеча.

Еще - нужные периоды нужно постоянно "дёргать" чтобы они обновлялись.
Если на символе-периоде никто не работает, (не проверяются котировки, не запущен индикатор), то он "засыпает" потому как считается ненужным.

Причина обращения: