Vitaly Gorbunov: Ну я бы не сказал что это костыль. Я ожидаю потока котировок от сервера иначе история не будет обновлена. Другой вариант это брать локальное время компьютера вводить поправку на тайм зону, которую можно высчитывать автоматически и в конце концов всё равно ждать обновления котировок. Да немного кривовато но не думаю что Метаквотовцы будут что то менять в МТ4. В конце концов эта проблема коннекта к серверу которую надо обрабатывать так или иначе.
Вот. И Вы поняли, что это проблема! Но, я считаю, что ее нужно исправить и/или справку дополнить алгоритмом на все случаи жизни.
Функция получения данных не должна выдавать левые данные без ошибок и предупреждений!
Это уже не первая моя тема (предыдущая была про МТ5, вразумительных ответов по ней я до сих пор не получил) про синхронизацию и последующие зависания/ошибки.
Да, похоже такой прием работает. Как вариант использовать можно. Спасибо! Но, все таки хотелось бы нормальной работы функций.
Он сработает только в только случае, если нет пропусков баров - а такой гарантии быть не может. Допустим за текущий час ещё не было новых котировок на сервере (а быть может и за предыдущий тоже). Соответственно последним баром является какой-то прошлый бар.
В Вашем подходе к проверке имеется две существенные ошибки:
В OnInit() индикатора невозможно получить корректные данные какого-либо ТФ, даже текущего. OnInit() индикатора при старте терминала выполняется практически в пустом окне (там может не быть даже тех данных, которые были на момент выключения терминала). Даже рыночное окружение зачастую еще недоступно. В справке достаточно много предупреждений насчет того, чего не стоит делать в OnInit(). Поэтому в ее код мало, что можно включать. Обычно это проверка значений настроечных параметров, связывание буферов индикатора с массивами и создание классов, если таковые используются. Все остальное приходится делать в OnCalculate().
Все подобные проверки можно делать только после того, как хотя бы один раз произошел вызов OnCalculate.
1. Игорь, Вы код смотрели? Где я что-то получаю в OnInit()?
2. Какие проверки? Где написано, что индикатор обязательно должен хотя бы один раз использовать OnCalculate() для корректной работы?
Он сработает только в только случае, если нет пропусков баров - а такой гарантии быть не может. Допустим за текущий час ещё не было новых котировок на сервере (а быть может и за предыдущий тоже). Соответственно последним баром является какой-то прошлый бар.
Это (как я уже сказал, костыль) решение пока что лучше, чем ничего. Как я уже сказал (и доказал), есть ошибка. Чем быстрее разработчики ее исправят - тем лучше.
Так она не выдает левые данные, она выдает последние полученные данные и ошибка не возникнет до тех пор пока терминал не начнет получать поток котировок. В вашем случае вы пытаетесь получить данные раньше чем пошли котировки такие исключительные ситуации программист обязан обрабатывать самостоятельно. Так же как и любые обрывы связи. А что там за проблема с МТ5 очень интересно почитать?
Он сработает только в только случае, если нет пропусков баров - а такой гарантии быть не может. Допустим за текущий час ещё не было новых котировок на сервере (а быть может и за предыдущий тоже). Соответственно последним баром является какой-то прошлый бар.
Приём с iBarShift позволяет выявить дыры в истории, но для этого необходимо шерстить её с каким то интервалом. Я написал для себя процедуру которая этим занимается, после этого я забыл про пропуски в МТФ программах.
Vitaly Gorbunov: Так она не выдает левые данные, она выдает последние полученные данные и ошибка не возникнет до тех пор пока терминал не начнет получать поток котировок. В вашем случае вы пытаетесь получить данные раньше чем пошли котировки такие исключительные ситуации программист обязан обрабатывать самостоятельно. Так же как и любые обрывы связи. А что там за проблема с МТ5 очень интересно почитать?
Ну е-мае... Мы же уже прошли этот этап разбора. Смотрите ваш же лог:
2018.09.2115:02:42.910 Custom indicator test XAUUSD,H1: removed
2018.09.2115:15:27.985 test XAUUSD,H1: initialized
2018.09.2115:15:29.520 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:29.552 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:29.589 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:29.605 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:29.636 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:29.667 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:29.705 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:29.736 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:29.768 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:29.805 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:29.837 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:29.868 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:29.906 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:29.937 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:29.969 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:30.006 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:30.038 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:30.069 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:30.106 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:30.138 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:30.169 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.2115:15:31.880 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #40662018.09.2115:15:31.900 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #02018.09.2115:15:31.940 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #02018.09.2115:15:31.990 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #02018.09.2115:15:32.010 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #02018.09.2115:15:32.074 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #02018.09.2115:15:32.100 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #02018.09.2115:15:32.120 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #02018.09.2115:15:32.174 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0
Последовательность. Сначала проверяем связь. Как только связь установлена, получаем время. Объясните мне, пожалуйста, какого лешего сначала возвращается ошибка 4066, а потом она не возвращается!? Что изменилось за 20 мс с последнего вызова?
Это (как я уже сказал, костыль) решение пока что лучше, чем ничего. Как я уже сказал (и доказал), есть ошибка. Чем быстрее разработчики ее исправят - тем лучше.
Ну если уж говорить о лучшем костыле, то надо проверять не только текущий час, но и все предыдущие часы, прошедшие с последнего известного бара. В противном случае вы так и застрянете на этой проверке, если котировок за текущий час не придёт.
Ну е-мае... Мы же уже прошли этот этап разбора. Смотрите ваш же лог:
Последовательность. Сначала проверяем связь. Как только связь установлена, получаем время. Объясните мне, пожалуйста, какого лешего сначала возвращается ошибка 4066, а потом она не возвращается!? Что изменилось за 20 мс с последнего вызова?
Данные грузятся ошибка 4066 потом уже косяк метаквотовцев скорее всего полученные данные обрабатываются для этой ситуации ошибку не придумали. А до этого момента всё логично.
Ну я бы не сказал что это костыль. Я ожидаю потока котировок от сервера иначе история не будет обновлена. Другой вариант это брать локальное время компьютера вводить поправку на тайм зону, которую можно высчитывать автоматически и в конце концов всё равно ждать обновления котировок. Да немного кривовато но не думаю что Метаквотовцы будут что то менять в МТ4. В конце концов эта проблема коннекта к серверу которую надо обрабатывать так или иначе.
Вот. И Вы поняли, что это проблема! Но, я считаю, что ее нужно исправить и/или справку дополнить алгоритмом на все случаи жизни.
Функция получения данных не должна выдавать левые данные без ошибок и предупреждений!
Это уже не первая моя тема (предыдущая была про МТ5, вразумительных ответов по ней я до сих пор не получил) про синхронизацию и последующие зависания/ошибки.
Да, похоже такой прием работает. Как вариант использовать можно. Спасибо! Но, все таки хотелось бы нормальной работы функций.
Он сработает только в только случае, если нет пропусков баров - а такой гарантии быть не может. Допустим за текущий час ещё не было новых котировок на сервере (а быть может и за предыдущий тоже). Соответственно последним баром является какой-то прошлый бар.
В Вашем подходе к проверке имеется две существенные ошибки:
1. Игорь, Вы код смотрели? Где я что-то получаю в OnInit()?
2. Какие проверки? Где написано, что индикатор обязательно должен хотя бы один раз использовать OnCalculate() для корректной работы?
Он сработает только в только случае, если нет пропусков баров - а такой гарантии быть не может. Допустим за текущий час ещё не было новых котировок на сервере (а быть может и за предыдущий тоже). Соответственно последним баром является какой-то прошлый бар.
Это (как я уже сказал, костыль) решение пока что лучше, чем ничего. Как я уже сказал (и доказал), есть ошибка. Чем быстрее разработчики ее исправят - тем лучше.
Он сработает только в только случае, если нет пропусков баров - а такой гарантии быть не может. Допустим за текущий час ещё не было новых котировок на сервере (а быть может и за предыдущий тоже). Соответственно последним баром является какой-то прошлый бар.
Так она не выдает левые данные, она выдает последние полученные данные и ошибка не возникнет до тех пор пока терминал не начнет получать поток котировок. В вашем случае вы пытаетесь получить данные раньше чем пошли котировки такие исключительные ситуации программист обязан обрабатывать самостоятельно. Так же как и любые обрывы связи. А что там за проблема с МТ5 очень интересно почитать?
Ну е-мае... Мы же уже прошли этот этап разбора. Смотрите ваш же лог:
Последовательность. Сначала проверяем связь. Как только связь установлена, получаем время. Объясните мне, пожалуйста, какого лешего сначала возвращается ошибка 4066, а потом она не возвращается!? Что изменилось за 20 мс с последнего вызова?
А что там за проблема с МТ5 очень интересно почитать?
https://www.mql5.com/ru/forum/219829
Это (как я уже сказал, костыль) решение пока что лучше, чем ничего. Как я уже сказал (и доказал), есть ошибка. Чем быстрее разработчики ее исправят - тем лучше.
Ну е-мае... Мы же уже прошли этот этап разбора. Смотрите ваш же лог:
Последовательность. Сначала проверяем связь. Как только связь установлена, получаем время. Объясните мне, пожалуйста, какого лешего сначала возвращается ошибка 4066, а потом она не возвращается!? Что изменилось за 20 мс с последнего вызова?