Я уже не первый месяц используюсь функции, которые возвращают данные из таймсерий. Не было никаких косяков в этом плане. Сегодня наткнулся на эту ошибку:
...
Откуда берётся эта шибка при наличии истории и как с ней бороться?
А если так?
iTime(NULL, TimeFrame, shift);
А если так?
В 5-ке?
В 5-ке?
Конечно!
Конечно!
Хм. Интересно. Эти функции i* добавили на днях что-ли? раньше их точно не было когда я писал библиотеку. Может из-за этого и косяк сейчас?
Хм. Интересно. Эти функции i* добавили на днях что-ли? раньше их точно не было когда я писал библиотеку. Может из-за этого и косяк сейчас?
Меня всегда удивляют экспертописатели, которые не следят за новостями платформы для которой пишут, обновляют билды и не смотрят анонсы(
Меня всегда удивляют экспертописатели, которые не следят за новостями платформы для которой пишут, обновляют билды и не смотрят анонсы(
А меня удивляет бардак. Когда дублирующие функции клепают. Сразу бы их перенесли, а не лепили дубли, было бы гораздо лучше.
Не всегда есть время наблюдать за анонсами. Сейчас сильно загружен. Мониторю только ветки ксательно разработки.
А меня удивляет бардак. Когда дублирующие функции клепают. Сразу бы их перенесли, а не лепили дубли, было бы гораздо лучше.
Не всегда есть время наблюдать за анонсами. Сейчас сильно загружен. Мониторю только ветки ксательно разработки.
Ясно, но разрабы делают мир лучше, и это не может не радовать)
Следите изредка за новостями, там есть полезные вещи, которых иногда не хватает.
Удачи!
Ясно, но разрабы делают мир лучше, и это не может не радовать)
Следите изредка за новостями, там есть полезные вещи, которых иногда не хватает.
Удачи!
Спасибо)) Разгребусь и буду следить. По поводу того, что "разработички делают мир лучше".. Я бы хотел, что бы это было так, но, на данный момент, это не так. Кроме наличия возможности отладки кода на истории, кнопка которого в 4-ке не активна, в 5-ке нет ничего полезного.
По поводу этой ошибки 4401.. После замены функций получающих данные из таймсерии ничего не изменилось. Хотя.. Я проснулся т.к. вчера уже был явный перегруз. Подошёл к том месту, где вчера был косяк отладчиком и.. там его уже нет! С чего вдруг его нет.. если код не менялся вопрос.. Зато ошибка это появилась где-то в другом месте и как её ловить я пока что не понял. Там же вся история пересчитывается первый раз. Прнтовать всё, есс-но не вариант.
В 4-ке есть такой код:
ENUM_TREND_DIR getTrend(ZZProperty& stZZProperty, int barIndex) { // Новая свеча выше предыдущей if (iHigh(NULL, i_TF, barIndex) > iHigh(NULL, i_TF, barIndex + 1)) { return TREND_DIR_UPWARD; } // Новая свеча ниже предыдущей if (iLow(NULL, i_TF, barIndex) < iLow(NULL, i_TF, barIndex + 1)) { return TREND_DIR_DOWNWARD; } return TREND_DIR_NONE; }
В 5-ке подобное уже так не напишешь. Вот где искать пользу от разработчиков вопрос..
Если кому интересно почему так не напишешь? Объясню. Любая из функций, в данном случае, iHigh, iLow и тд может вернуть, как оказалось косяк в виде ошибки 4401 и того, по крайне мере в индикаторах уже не отрисовывается ничего вообще. Я проверил, если, грубо говоря, что бы не заморачиваться и не искать, где косяк и проверить мысли влепить в самом начале функции OnCalculate() строку:
ResetLastError();
Код начинает работать корректно, но скорость становится невыносимо низкая. Каждй бар мусолится по минуте где-то на не высоких ТФ. Но сбросом ошибком я проверим, что если есть ошибка:
- Не рисуется кривая зиг-зага (в моём случае)
Так как узнать где может возникнуть эта ошибка не вариант, придётся везде, где происходить обращение к таймсериям проверять ошибку 4401 и код будет в разы больше. Такого в 4-ке точно не было и всё там работаешь без этого отлично. Вот сравните предыдущий вариант кода и, такой примерно:
ENUM_TREND_DIR getTrend(ZZProperty& stZZProperty, int barIndex) { //--- // Новая свеча выше предыдущей barHighCur = iHigh(_Symbol, i_tf, barIndex); barHighPrior = iHigh(_Symbol, i_tf, barIndex + 1); if (barHighCur > 0 && barHighPrior > 0) if (barHighCur > barHighPrior) return TREND_DIR_UPWARD; // Новая свеча ниже предыдущей barLowCur = iLow(_Symbol, i_tf, barIndex); barLowPrior = iLow(_Symbol, i_tf, barIndex + 1); if ( barLowCur > 0 && barLowPrior > 0) if (barLowCur(barIndex, i_tf) < barLowPrior) return TREND_DIR_DOWNWARD; //--- return TREND_DIR_NONE; }
Жёлтые строки это проверка на то, что дынные из таймсерии получены. Дальше нужно будет в этой функции или в вызывающей проверять дополнительно на ошибку. Хотя, функция служит для поределения тренда (в примитивном виде), а получается, что там нужно всё перепроверять. Хотя, истроия есть. И последний бар я проверял, с него данные берутся. Значит с других тоже дод\лжны браться.
Неужели всё там заморачиваются и добавляют доп. проверки как я показал выше? Ведь без них не узнаешь, получены данные или нет..
Пытался я разобраться как происходит подкачка истории в MT5, но не вышло. Как ее ограничить (расширить)? Но никто не знает. Я понимаю что сейчас налетят и будут говорить, что история запрашивается по мере обращения к определенным функциям - но для меня, как для программиста, это не ответ. Должно быть все четко. Почему бы не создать функции вида:
bool LoadHistory (datetime from) // гарантированная загрузка истории в OnInit bool isHistoryExists (datetime dt) // проверка доступности истории на определенную дату void setHistoryLimit (datetime from) // установка ограничение подкачки истории
или что подобное
https://www.mql5.com/ru/forum/279499

- 2018.09.17
- www.mql5.com
Пытался я разобраться как происходит подкачка истории в MT5, но не вышло. Как ее ограничить (расширить)? Но никто не знает. Я понимаю что сейчас налетят и будут говорить, что история запрашивается по мере обращения к определенным функциям - но для меня, как для программиста, это не ответ. Должно быть все четко. Почему бы не создать функции вида:
или что подобное
vois setHistoryLimit (datetime from) // установка ограничение подкачки истории
https://www.mql5.com/ru/forum/279499
Who is "vois"?
:-)

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Я уже не первый месяц используюсь функции, которые возвращают данные из таймсерий. Не было никаких косяков в этом плане. Сегодня наткнулся на эту ошибку:
ERR_HISTORY_NOT_FOUND
4401
Запрашиваемая история не найдена
По сути, история у меня есть, а доступа к ней нет.
Функции получения данных из таймсерий такие как эта:
Я, конечно, понимаю, что в реал-тайме может не быть котировки последней, но, что бы котировок не было исторических, причём, не очень давних, а за начало 2017 года, это удивляет. Ещё недавно тестировал сову с 2015г. и всё чётко, а здесь с 2017г по той же паре GBPJPY уже ошибка получения исторических данных. С чем это вообще связано?
Откуда берётся эта шибка при наличии истории и как с ней бороться?