-Alexey-: Попробуйте переложить на С - ошибка сама найдется. Да и вообще - с такими проектами только на нем и писать, если не хочешь проблем в будущем. К сожалению, сам я это слишком поздно понял и теперь переписываю :)
Возможно в ближайшем будущем изучу и C++. За последние полгода и так уже голова наполнилась: MQL4, MQL5, HTML, CSS, XML. И сейчас ещё JavaScript изучаю. Для C++ пока места и времени нет, хотя очень хочется.))
Отсюда вопрос: как правильно автоматизировать проверку и загрузку нужных данных другого ТФ?
В подобной ситуации контролирую процесс инициализации в OnCalculate. Если есть ошибка при инициализации, то возвращаю prev_calculated=0, и так пока все корректно не посчитается.
Lizar: В подобной ситуации контролирую процесс инициализации в OnCalculate. Если есть ошибка при инициализации, то возвращаю prev_calculated=0, и так пока все корректно не посчитается.
Идея хорошая, хотя в prev_calculated ничего присвоить нельзя, переменная объявлена как const, но я вас понял можно завести другую аналогичную переменную.
Остаётся один вопрос, а если данных так и нет, чего делать?
Я так понимаю что сам запрос данных не приводит к их закачке или загрузке из локальной базы, и в этом как раз проблема.
Идея хорошая, хотя в prev_calculated ничего присвоить нельзя, переменная объявлена как const, но я вас понял можно завести другую аналогичную переменную.
а не в присваивании дело! Дело в числе, какое возвращает OnCalculated. Если ваши данные не готовы, то вы соответственно из OnCalculated возвращаете 0. Посмотрите на примеры по BarsCalculated. Именно через него и надо делать проверку.
Остаётся один вопрос, а если данных так и нет, чего делать?
если их нет и не появятся, то и делать особо нечего. Если хотите, можете ожидание и расчет буферов по таймеру вызывать.
а не в присваивании дело! Дело в числе, какое возвращает OnCalculated. Если ваши данные не готовы, то вы соответственно из OnCalculated возвращаете 0. Посмотрите на примеры по BarsCalculated. Именно через него и надо делать проверку.
если их нет и не появятся, то и делать особо нечего. Если хотите, можете ожидание и расчет буферов по таймеру вызывать.
Не поможет, помогает только выгрузка индикатора и повторный запуск, в таком случае данные почему то уже есть.
Или как вариант открыть чарт с нужным ТФ М1, тогда данные на соседнем чарте М15 по запросу М1 готовы сразу.
Не поможет, помогает только выгрузка индикатора и повторный запуск, в таком случае данные почему то уже есть.
Или как вариант открыть чарт с нужным ТФ, тогда данные на соседнем чарте готовы сразу.
Николай не поверишь, сегодня полдня провозился с индюками. Были мультивалютный/мультитаймрфеймовый.
так вот проблема в неотображении в том, что выполняется попытка взять значение от бара, которого на этом ТФ просто нет. истории в памяти еще нет.
Поэтому надо проверить перед взятием бара - SeriesInfoInteger. Никаких выгрузок не надо. Все равно расчетную часть не выгрузишь (сегодня как раз тему по этому поводу поднял).
1. Идея хорошая, хотя в prev_calculated ничего присвоить нельзя, переменная объявлена как const, но я вас понял можно завести другую аналогичную переменную.
2. Остаётся один вопрос, а если данных так и нет, чего делать?
3. Я так понимаю что сам запрос данных не приводит к их закачке или загрузке из локальной базы, и в этом как раз проблема.
Имел ввиду из OnCalculate возвращаю 0, тогда prev_calculated=0;
Ставлю счетчик переинициализаций. При переполнении выгружаю индикатор.
С CopyХХХХ проблем не было. Если есть локальная история, то если не с первого, то со второго-третьего раза все считалось. На чемпионате используемый советником "шпион" считает исключительно на минутной истории, работает на Н1. И так по 9 парам. При отсутствии вообще локальной истории, срабатывал п.2. Но, насколько я помню, начиналась закачка истории с сервера.
Я так понимаю что сам запрос данных не приводит к их закачке или загрузке из локальной базы, и в этом как раз проблема.
Из справки по CopyXXXX:
При запросе данных из эксперта или скрипта, будет инициирована загрузка с сервера, если локально этих данных у терминала нет, либо начнется построение нужной таймсерии, если данные можно построить из локальной истории, но они еще не готовы. Функция вернет то количество данных, которые будут готовы к моменту истечения таймаута, но загрузка истории будет продолжаться, и при следующем аналогичном запросе функция вернет уже больше данных.
Речь только об экспертах и скриптах. Для индикаторов это не действует?
Попробуйте переложить на С - ошибка сама найдется. Да и вообще - с такими проектами только на нем и писать, если не хочешь проблем в будущем. К сожалению, сам я это слишком поздно понял и теперь переписываю :)
Имеем индикатор запускаемый на ТФ M15, в коде индикатор запрашивает таймсерию MqlRates с ТФ M1.
Индикатор не запускается сразу тк данные М1 не готовы, и добиться их загрузки при первом запуске не получается.
В результате имеем фейковый проход и индикатор больше не обращается к данным думая что они уже рассчитаны и пересчитывать их не стоит.
Сейчас я делаю запуск индикатора двумя способами:
Отсюда вопрос: как правильно автоматизировать проверку и загрузку нужных данных другого ТФ?
Отсюда вопрос: как правильно автоматизировать проверку и загрузку нужных данных другого ТФ?
В подобной ситуации контролирую процесс инициализации в OnCalculate. Если есть ошибка при инициализации, то возвращаю prev_calculated=0, и так пока все корректно не посчитается.
Идея хорошая, хотя в prev_calculated ничего присвоить нельзя, переменная объявлена как const, но я вас понял можно завести другую аналогичную переменную.
Остаётся один вопрос, а если данных так и нет, чего делать?
Я так понимаю что сам запрос данных не приводит к их закачке или загрузке из локальной базы, и в этом как раз проблема.
Идея хорошая, хотя в prev_calculated ничего присвоить нельзя, переменная объявлена как const, но я вас понял можно завести другую аналогичную переменную.
а не в присваивании дело! Дело в числе, какое возвращает OnCalculated. Если ваши данные не готовы, то вы соответственно из OnCalculated возвращаете 0.
Посмотрите на примеры по BarsCalculated. Именно через него и надо делать проверку.
Остаётся один вопрос, а если данных так и нет, чего делать?
Если хотите, можете ожидание и расчет буферов по таймеру вызывать.
а не в присваивании дело! Дело в числе, какое возвращает OnCalculated. Если ваши данные не готовы, то вы соответственно из OnCalculated возвращаете 0.
если их нет и не появятся, то и делать особо нечего.Посмотрите на примеры по BarsCalculated. Именно через него и надо делать проверку.
Если хотите, можете ожидание и расчет буферов по таймеру вызывать.
Не поможет, помогает только выгрузка индикатора и повторный запуск, в таком случае данные почему то уже есть.
Или как вариант открыть чарт с нужным ТФ М1, тогда данные на соседнем чарте М15 по запросу М1 готовы сразу.
Не поможет, помогает только выгрузка индикатора и повторный запуск, в таком случае данные почему то уже есть.
Или как вариант открыть чарт с нужным ТФ, тогда данные на соседнем чарте готовы сразу.
Николай не поверишь, сегодня полдня провозился с индюками. Были мультивалютный/мультитаймрфеймовый.
так вот проблема в неотображении в том, что выполняется попытка взять значение от бара, которого на этом ТФ просто нет. истории в памяти еще нет.
Поэтому надо проверить перед взятием бара - SeriesInfoInteger.Никаких выгрузок не надо. Все равно расчетную часть не выгрузишь (сегодня как раз тему по этому поводу поднял).
Николай не поверишь, сегодня полдня провозился с индюками. Были мультивалютный/мультитаймрфеймовый.
так вот проблема в неотображении в том, что выполняется попытка взять значение от бара, которого на этом ТФ просто нет. истории в памяти еще нет.
Поэтому надо проверить перед взятием бара - SeriesInfoInteger.Никаких выгрузок не надо. Все равно расчетную часть не выгрузишь (сегодня как раз тему по этому поводу поднял).
Мимо, у меня проверочка стоит, нахожу первую дату по ТФ М1, и расчёт баров М15 начинается от этой даты. TF в настройках указан как PERIOD_M1
1. Идея хорошая, хотя в prev_calculated ничего присвоить нельзя, переменная объявлена как const, но я вас понял можно завести другую аналогичную переменную.
2. Остаётся один вопрос, а если данных так и нет, чего делать?
3. Я так понимаю что сам запрос данных не приводит к их закачке или загрузке из локальной базы, и в этом как раз проблема.
Я так понимаю что сам запрос данных не приводит к их закачке или загрузке из локальной базы, и в этом как раз проблема.
Из справки по CopyXXXX:
При запросе данных из эксперта или скрипта, будет инициирована загрузка с сервера, если локально этих данных у терминала нет, либо начнется построение нужной таймсерии, если данные можно построить из локальной истории, но они еще не готовы. Функция вернет то количество данных, которые будут готовы к моменту истечения таймаута, но загрузка истории будет продолжаться, и при следующем аналогичном запросе функция вернет уже больше данных.