К сожалению, кроме того, что это костыль, есть еще один побочный эффект - при программном открытии графика - на него ставится фокус, т.е. все что вы делаете в данный момент сбрасывается, например, добавили ордер и открываем диалоговое окно изменения ордера чтобы выставить стоп-лосс ... в этот момент порисходит подгрузка истории, открывается, програмно открывается график и наше диалоговое окно изменения ордера закрывается ... печаль ...
Поэтому, единственный железный способ инициировать загрузку истории - это программно быстро открыть и закрыть график нужной валюты, но побочный эффект в этом случае описан выше.
Это случается если вызывать функцию Load() на событии OnCalculate().
К сожалению, кроме того, что это костыль, есть еще один побочный эффект - при программном открытии графика - на него ставится фокус, т.е. все что вы делаете в данный момент сбрасывается, например, добавили ордер и открываем диалоговое окно изменения ордера чтобы выставить стоп-лосс ... в этот момент порисходит подгрузка истории, открывается, програмно открывается график и наше диалоговое окно изменения ордера закрывается ... печаль ...
Поэтому, единственный железный способ инициировать загрузку истории - это программно быстро открыть и закрыть график нужной валюты, но побочный эффект в этом случае описан выше.
Это случается если вызывать функцию Load() на событии OnCalculate().
Что-то Вы совсем запутались. И это неудивительно, вопрос не простой. ))
Есть все необходимые функции для запроса, проверок, загрузки, получения данных с любого таймфрейма/символа и их отображения на текущем графике. Не надо открывать график, чтобы "железно" всё получить, достаточно правильного запроса и подгрузиться столько, сколько нужно.
Пример из справки в принципе то, что нужно. Изучив его можно понять, как и что нужно делать. Нужно учитывать максимальное количество баров в настройках терминала. Анализируйте ошибки (см. их код) и сразу станет ясно почему возвращается -1 или 0.
По двадцать символов пробовал выводить на график без проблем. Есть один глюк правда, но он очень редкий и пока пылится в Сервисдеске. ))
Что-то Вы совсем запутались. И это неудивительно, вопрос не простой. ))
Есть все необходимые функции для запроса, проверок, загрузки, получения данных с любого таймфрейма/символа и их отображения на текущем графике. Не надо открывать график, чтобы "железно" всё получить, достаточно правильного запроса и подгрузиться столько, сколько нужно.
Пример из справки в принципе то, что нужно. Изучив его можно понять, как и что нужно делать. Нужно учитывать максимальное количество баров в настройках терминала. Анализируйте ошибки (см. их код) и сразу станет ясно почему возвращается -1 или 0.
По двадцать символов пробовал выводить на график без проблем. Есть один глюк правда, но он очень редкий и пока пылится в Сервисдеске. ))
Пример:
Если я запутался, то обьясните мне, пожалуйста, как возможна такая ситуация - с функциями из справки я в течение часа ждал загрузки нужного символа, но не дождался, зато при открытии графика загрузка истории происходит за максимум 3 секунды?
Функции CopyX() НЕ инициируют запрос на сервер или инициирует его в необязательном порядке, в какой-то непонятной очереди запросов, увы ... по-другому я обьяснить это не могу.
Почему при открытии графика синхронизация происходит мнгновенно (это уже факт, на первом же тике между прочим)? Там у каждого запроса свой приоритет? Я серьезно, есть же разница - ждать час или 3 секунды ...
Так как мне, похоже, просто не верят я тоже попытаюсь вечером еще раз перепроверить и записать видео :)
Если я запутался, то обьясните мне, пожалуйста, как возможна такая ситуация - с функциями из справки я в течение часа ждал загрузки нужного символа, но не дождался, зато при открытии графика загрузка истории происходит за максимум 3 секунды?
Функции CopyX() НЕ инициируют запрос на сервер или инициирует его в необязательном порядке, в какой-то непонятной очереди запросов, увы ... по-другому я обьяснить это не могу.
Почему при открытии графика синхронизация происходит мнгновенно (это уже факт, на первом же тике между прочим)? Там у каждого запроса свой приоритет? Я серьезно, есть же разница - ждать час или 3 секунды ...
Так как мне, похоже, просто не верят я тоже попытаюсь вечером еще раз перепроверить и записать видео :)
Час ждать не нужно. Это значит что, что-то сделано неправильно. )) В справке всего лишь примеры, а дальше нужно с этим работать под свои задачи.
Делайте в цикле несколько запросов пока не получите то, что Вам нужно. Я не использую в чистом виде CheckLoadHistory(). Вместо этого разбил всё на отдельные функции, так намного проще решать проблемы, если они возникают. Вот так это примерно выглядит у меня:
//--- Если есть невалидный хэндл, попробуем получить его снова
...
//--- Проверяет количество доступных данных у всех символов
...
//--- Проверяет и подкачивает данные с сервера у всех символов
...
//--- Проверим синхронизированность данных по символу/периоду на данный момент
...
//--- Сообщим, если данных меньше, чем период индикатора
...
//--- Если данных для копирования указано больше, чем есть,// будем использовать столько, сколько есть
...
//--- Инициализируем буферы пустыми значениями
...
//--- Определим, с какого бара начинать отрисовку для каждого символа
//---
И после этого можно спокойно работать и лепить из данных всё, что захочешь. ))
Возможно из-за того, что сейчас рынок очень активный зарепродюсить ситуацию с йеной не смог, пока решил реализовать таким образом (эта функция дергается каждую секунду по таймеру + по OnCalculate) :
int Load()
{
for (int i = 0; i < Currencies.Total(); i++)
{
CSymbol * s = Currencies.At(i);
Bars(s.Name, _Period);
int countTimes = CopyTime(s.Name, _Period, 0, MaxBars, s.Time);
int countCloses = CopyClose(s.Name, _Period, 0, MaxBars, s.Close);
if (countTimes <= 0 || countCloses <= 0)
{
if (SeriesInfoInteger(s.Name, _Period, SERIES_SYNCHRONIZED))
{
CustomLog(StringFormat("INFO : Waiting for bars for %s", s.Name));
}
else
{
CustomLog(StringFormat("ERROR : No bars for %s", s.Name));
}
return(0);
}
}
CustomLog("INFO : History loaded");
return(1);
}
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
К сожалению, кроме того, что это костыль, есть еще один побочный эффект - при программном открытии графика - на него ставится фокус, т.е. все что вы делаете в данный момент сбрасывается, например, добавили ордер и открываем диалоговое окно изменения ордера чтобы выставить стоп-лосс ... в этот момент порисходит подгрузка истории, открывается, програмно открывается график и наше диалоговое окно изменения ордера закрывается ... печаль ...
Поэтому, единственный железный способ инициировать загрузку истории - это программно быстро открыть и закрыть график нужной валюты, но побочный эффект в этом случае описан выше.
Это случается если вызывать функцию Load() на событии OnCalculate().
К сожалению, кроме того, что это костыль, есть еще один побочный эффект - при программном открытии графика - на него ставится фокус, т.е. все что вы делаете в данный момент сбрасывается, например, добавили ордер и открываем диалоговое окно изменения ордера чтобы выставить стоп-лосс ... в этот момент порисходит подгрузка истории, открывается, програмно открывается график и наше диалоговое окно изменения ордера закрывается ... печаль ...
Поэтому, единственный железный способ инициировать загрузку истории - это программно быстро открыть и закрыть график нужной валюты, но побочный эффект в этом случае описан выше.
Это случается если вызывать функцию Load() на событии OnCalculate().
Что-то Вы совсем запутались. И это неудивительно, вопрос не простой. ))
Есть все необходимые функции для запроса, проверок, загрузки, получения данных с любого таймфрейма/символа и их отображения на текущем графике. Не надо открывать график, чтобы "железно" всё получить, достаточно правильного запроса и подгрузиться столько, сколько нужно.
Пример из справки в принципе то, что нужно. Изучив его можно понять, как и что нужно делать. Нужно учитывать максимальное количество баров в настройках терминала. Анализируйте ошибки (см. их код) и сразу станет ясно почему возвращается -1 или 0.
По двадцать символов пробовал выводить на график без проблем. Есть один глюк правда, но он очень редкий и пока пылится в Сервисдеске. ))
Пример:
Что-то Вы совсем запутались. И это неудивительно, вопрос не простой. ))
Есть все необходимые функции для запроса, проверок, загрузки, получения данных с любого таймфрейма/символа и их отображения на текущем графике. Не надо открывать график, чтобы "железно" всё получить, достаточно правильного запроса и подгрузиться столько, сколько нужно.
Пример из справки в принципе то, что нужно. Изучив его можно понять, как и что нужно делать. Нужно учитывать максимальное количество баров в настройках терминала. Анализируйте ошибки (см. их код) и сразу станет ясно почему возвращается -1 или 0.
По двадцать символов пробовал выводить на график без проблем. Есть один глюк правда, но он очень редкий и пока пылится в Сервисдеске. ))
Пример:
Если я запутался, то обьясните мне, пожалуйста, как возможна такая ситуация - с функциями из справки я в течение часа ждал загрузки нужного символа, но не дождался, зато при открытии графика загрузка истории происходит за максимум 3 секунды?
Функции CopyX() НЕ инициируют запрос на сервер или инициирует его в необязательном порядке, в какой-то непонятной очереди запросов, увы ... по-другому я обьяснить это не могу.
Почему при открытии графика синхронизация происходит мнгновенно (это уже факт, на первом же тике между прочим)? Там у каждого запроса свой приоритет? Я серьезно, есть же разница - ждать час или 3 секунды ...
Так как мне, похоже, просто не верят я тоже попытаюсь вечером еще раз перепроверить и записать видео :)
Если я запутался, то обьясните мне, пожалуйста, как возможна такая ситуация - с функциями из справки я в течение часа ждал загрузки нужного символа, но не дождался, зато при открытии графика загрузка истории происходит за максимум 3 секунды?
Функции CopyX() НЕ инициируют запрос на сервер или инициирует его в необязательном порядке, в какой-то непонятной очереди запросов, увы ... по-другому я обьяснить это не могу.
Почему при открытии графика синхронизация происходит мнгновенно (это уже факт, на первом же тике между прочим)? Там у каждого запроса свой приоритет? Я серьезно, есть же разница - ждать час или 3 секунды ...
Так как мне, похоже, просто не верят я тоже попытаюсь вечером еще раз перепроверить и записать видео :)
Час ждать не нужно. Это значит что, что-то сделано неправильно. )) В справке всего лишь примеры, а дальше нужно с этим работать под свои задачи.
Делайте в цикле несколько запросов пока не получите то, что Вам нужно. Я не использую в чистом виде CheckLoadHistory(). Вместо этого разбил всё на отдельные функции, так намного проще решать проблемы, если они возникают. Вот так это примерно выглядит у меня:
//---
И после этого можно спокойно работать и лепить из данных всё, что захочешь. ))
Возможно из-за того, что сейчас рынок очень активный зарепродюсить ситуацию с йеной не смог, пока решил реализовать таким образом (эта функция дергается каждую секунду по таймеру + по OnCalculate) :