Приветствую.
Такая задача - загрузить данные для CopyXxxx() другого таймфрейма (и другого символа).
Использую скрипт из статьи "Организация доступа к данным". Но, все равно, несмотря на успешное завершение скрипта - Copy-функции возвращают мало данных. При этом, если открыть чарт с требуемым таймфреймом и символом - возникает на секунду пустое окно с названием (то есть, таймсерия реально отсутствует, и начинается её построение), а после того, как появляются данные - чарт можно закрыть, и после этого Copy-функция нормально копирует все данные.
Никто с подобным не сталкивался? Что я делаю не так? Где лыжи смазать?
Не берусь утверждать, что скрипт не рабочий, но помниться, я тоже обжигался на этом скрипте, пока все сам не организовал через таймер.
У Вас же тоже проблемы с этим скриптом. Поэтому забудьте о нем. Возможно на многопотоке в советнике он будет работать нормально, но я бы рекомендовал все же через таймер.
Не берусь утверждать, что скрипт не рабочий, но помниться, я тоже обжигался на этом скрипте, пока все сам не организовал через таймер.
У Вас же тоже проблемы с этим скриптом. Поэтому забудьте о нем. Возможно на многопотоке в советнике он будет работать нормально, но я бы рекомендовал все же через таймер.
Да, так и сделать придётся. Мне просто удивительно, что скрипт из хелпа - и так "прокололся".
Если индикатор, то Sleep не работает. Загрузку нужно инициировать, контролировать и завершать через таймер
Приветствую.
Такая задача - загрузить данные для CopyXxxx() другого таймфрейма (и другого символа).
Использую скрипт из статьи "Организация доступа к данным". Но, все равно, несмотря на успешное завершение скрипта - Copy-функции возвращают мало данных. При этом, если открыть чарт с требуемым таймфреймом и символом - возникает на секунду пустое окно с названием (то есть, таймсерия реально отсутствует, и начинается её построение), а после того, как появляются данные - чарт можно закрыть, и после этого Copy-функция нормально копирует все данные.
Никто с подобным не сталкивался? Что я делаю не так? Где лыжи смазать?
у меня на каждом запуске работает скрипт, выставил там еще комменты, идет загрузка или все данные были загружены ранее
проверить на своем сервере по размеру файлов можно
шапку добавил к скрипту для загрузки сразу всех рабочих символов
void LoadingHistory() { if(LoadHistory) { if(MQLInfoInteger(MQL_TESTER)) return; //--- Загрузка истории for(int s=0; s<TRADE_SYMBOLS; s++) { //--- Если торговля по этому символу разрешена if(Symbols[s]!="") //--- History(Symbols[s],PERIOD_H1,D'2020.01.01'); } } //иначе выходим }
для тестера лучше выключать
пока разработчики не добавили это в Функционал Терминала, запускать нужно всем
до этого я жаловался что хэндл ошибка и индикаторы некоторые с пустой историей по мере загрузки как червяк извиваются, а если крутануть еще дальше историю то и дальше продолжаются
год назад писал, что это нужно добавить в терминал. а не пройти 3 испытания ада. и добавить в код себе.
Да, написал свою функцию, вроде всё заработало...
CTerminalInfo - мой самописный класс (не из Стандартной Библиотеки, у меня свои, близкие по функциям), обслуживающий фукнции терминала.
ETerminalLoadDataRes - перечисление-результат загрузки таймсерии в терминал. ECurrencySymbol - перечисление символов, с которыми знакома моя библиотека.
Кроме того, используется несколько самописных функций и внутренних перечислений, но, я думаю, из контекста понятно, что они делают.
ETerminalLoadDataRes CTerminalInfo::LoadTimeseriesIntoTerminal(ECurrencySymbol csSymbol2Load,ENUM_TIMEFRAMES etTimeFrame2Load,datetime dtMaxDate2Load,uint uiMaxWaitSec) { // Зафиксируем время старта uint uiStartTick = GetTickCount(); // Проверим тип программы switch(_GetProgrammType()) { case PROGRAM_SCRIPT: break; case PROGRAM_EXPERT: case PROGRAM_SERVICE: _NOT_TESTED_; // В этих типах программ не испытывалось. TODO: Проверить. Возможно, никаких проблем не возникнет. case PROGRAM_INDICATOR: // В индикаторе ожидание использовать нельзя. default: return(TLR_BAD_PROGRAMM_TYPE); }; // Проверим таймфрейм switch(CTimeframeConverter::CheckTimeframe(etTimeFrame2Load)) { case TFT_MT4: case TFT_MT5ONLY: break; default: return(TLR_UNKNOWN_TIMEFRAME); }; if(etTimeFrame2Load==PERIOD_CURRENT) etTimeFrame2Load=_GetMainTimeframe(); // Проверим символ if(_IsKnownSymbolEnum(csSymbol2Load)!=true) return(TLR_UNKNOWN_SYMBOL); if(SymbolInfoInteger(_Enum2StrSymbol(csSymbol2Load),SYMBOL_SELECT)!=true) return(TLR_NO_SYMBOL_IN_MARKETWATCH); datetime dtTimes[BUFFER_SIZE_4_SERIES_CHECK]; // Попробуем загрузить данные таймсерии сходу if(CopyTime(_Enum2StrSymbol(csSymbol2Load),etTimeFrame2Load,dtMaxDate2Load,BUFFER_SIZE_4_SERIES_CHECK,dtTimes)==BUFFER_SIZE_4_SERIES_CHECK) if(dtTimes[1] > MIN_DATETIME && dtTimes[1] < dtMaxDate2Load) return(TLR_OK); // Сходу не вышло. Предупредим. Print("Wait timeseries building..."); // Пробуем загрузить в цикле ожидания uint uiPrintInfoTick = uiStartTick; uint uiPrintSec = 0; while(GetTickCount() - uiStartTick < uiMaxWaitSec*1000) { if(CopyTime(_Enum2StrSymbol(csSymbol2Load),etTimeFrame2Load,dtMaxDate2Load,BUFFER_SIZE_4_SERIES_CHECK,dtTimes)==BUFFER_SIZE_4_SERIES_CHECK) if(dtTimes[1] > MIN_DATETIME && dtTimes[1] < dtMaxDate2Load) { Print("Timeseries has loaded"); return(TLR_OK); }; if(GetTickCount() - uiPrintInfoTick > 3000) { uiPrintInfoTick = GetTickCount(); Print("Building " + IntegerToString(GetTickCount()-uiStartTick) + " sec..."); }; Sleep(SLEEP_WHILE_TIMESERIES_BUILD_SLICE); }; Print("Too long time waiting..."); return(TLD_TOO_LONG_WAIT); };Странно, что скрипт из хелпа работает неправильно...
Да, написал свою функцию, вроде всё заработало...
CTerminalInfo - мой самописный класс (не из Стандартной Библиотеки, у меня свои, близкие по функциям), обслуживающий фукнции терминала.
ETerminalLoadDataRes - перечисление-результат загрузки таймсерии в терминал. ECurrencySymbol - перечисление символов, с которыми знакома моя библиотека.
Кроме того, используется несколько самописных функций и внутренних перечислений, но, я думаю, из контекста понятно, что они делают.
Странно, что скрипт из хелпа работает неправильно...В чем там ошибка? Давно использую, претензий вообще нет. Если на новом сервере запустить то подгружает с указанной даты по всем нужным символам, если история уже была подгружена то и не загружает, все работает как положено
В чем там ошибка? Давно использую, претензий вообще нет. Если на новом сервере запустить то подгружает с указанной даты по всем нужным символам, если история уже была подгружена то и не загружает, все работает как положено
Не знаю, не знаю. У меня - скрипт возвращал успех загрузки, а потом при запросе - копировалось либо меньше, либо вобще ничего.
Сейчас - всё в порядке, всегда если функция возвратила успех - загрузка данных проходит также успешно.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Приветствую.
Такая задача - загрузить данные для CopyXxxx() другого таймфрейма (и другого символа).
Использую скрипт из статьи "Организация доступа к данным". Но, все равно, несмотря на успешное завершение скрипта - Copy-функции возвращают мало данных. При этом, если открыть чарт с требуемым таймфреймом и символом - возникает на секунду пустое окно с названием (то есть, таймсерия реально отсутствует, и начинается её построение), а после того, как появляются данные - чарт можно закрыть, и после этого Copy-функция нормально копирует все данные.
Никто с подобным не сталкивался? Что я делаю не так? Где лыжи смазать?