Syntax error in line 91(missing H). "SERIES_SYNCRONIZED" should be "SERIES_SYNCHRONIZED".
elib:
Syntax error in line 91(missing H). "SERIES_SYNCRONIZED" should be "SERIES_SYNCHRONIZED".
Ничто не вечно под луной!
//+------------------------------------------------------------------+ //| проверка истории для подгрузки | //+------------------------------------------------------------------+ int CheckLoadHistory(string symbol,ENUM_TIMEFRAMES period,datetime start_date) { //----+ datetime first_date=0; datetime times[100]; //--- check symbol & period if(symbol == NULL || symbol == "") symbol = Symbol(); if(period == PERIOD_CURRENT) period = Period(); //--- check if symbol is selected in the MarketWatch if(!SymbolInfoInteger(symbol,SYMBOL_SELECT)) { if(GetLastError()==ERR_MARKET_UNKNOWN_SYMBOL) return(-1); if(!SymbolSelect(symbol,true)) Print(__FUNCTION__,"(): Не удалось добавить символ ",symbol," в окно MarketWatch!!!"); } //--- check if data is present SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date); if(first_date>0 && first_date<=start_date) return(1); //--- don't ask for load of its own data if it is an indicator if(MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR && Period()==period && Symbol()==symbol) return(-4); //--- second attempt if(SeriesInfoInteger(symbol,PERIOD_M1,SERIES_TERMINAL_FIRSTDATE,first_date)) { //--- there is loaded data to build timeseries if(first_date>0) { //--- force timeseries build CopyTime(symbol,period,first_date+PeriodSeconds(period),1,times); //--- check date if(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date)) if(first_date>0 && first_date<=start_date) return(2); } } //--- max bars in chart from terminal options int max_bars=TerminalInfoInteger(TERMINAL_MAXBARS); //--- load symbol history info datetime first_server_date=0; while(!SeriesInfoInteger(symbol,PERIOD_M1,SERIES_SERVER_FIRSTDATE,first_server_date) && !IsStopped()) Sleep(5); //--- fix start date for loading if(first_server_date>start_date) start_date=first_server_date; if(first_date>0 && first_date<first_server_date) Print(__FUNCTION__,"(): Warning: first server date ",first_server_date," for ",symbol, " does not match to first series date ",first_date); //--- load data step by step int fail_cnt=0; while(!IsStopped()) { //--- wait for timeseries build while(!SeriesInfoInteger(symbol,period,SERIES_SYNCHRONIZED) && !IsStopped()) Sleep(5); //--- ask for built bars int bars=Bars(symbol,period); if(bars>0) { if(bars>=max_bars) return(-2); //--- ask for first date if(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date)) if(first_date>0 && first_date<=start_date) return(0); } //--- copying of next part forces data loading int copied=CopyTime(symbol,period,bars,100,times); if(copied>0) { //--- check for data if(times[0]<=start_date) return(0); if(bars+copied>=max_bars) return(-2); fail_cnt=0; } else { //--- no more than 100 failed attempts fail_cnt++; if(fail_cnt>=100) return(-5); Sleep(10); } } //----+ stopped return(-3); } //+------------------------------------------------------------------+
Не работает, на перво же символе умирает...
Вот код
//+------------------------------------------------------------------+ //| TestLoadHistory.mq5 | //| Copyright 2009, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "2009, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.02" #property script_show_inputs //--- input parameters //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { int all_symbols=SymbolsTotal(false); string sym_name=""; Print("Load symbols ",all_symbols); for(int k=0;k<all_symbols;k++) if((sym_name=SymbolName(k,false))!="") { SymbolSelect(sym_name,true); Print(k," Symbol name ",sym_name); datetime time= (TimeCurrent()-60*60*24*5); int res=CheckLoadHistory(sym_name,PERIOD_M1,time); switch(res) { case -1 : Print("Unknown symbol ",sym_name); break; case -2 : Print("Requested bars more than max bars in chart ",sym_name); break; case -3 : Print("Program was stopped ",sym_name); break; case -4 : Print("Indicator shouldn't load its own data ",sym_name); break; case -5 : Print("Load failed ",sym_name); break; case 0 : Print("Loaded OK ",sym_name); break; case 1 : Print("Loaded previously ",sym_name); break; case 2 : Print("Loaded previously and built ",sym_name); break; default : Print("Unknown result ",sym_name); } datetime first_date; SeriesInfoInteger(sym_name,PERIOD_M1,SERIES_FIRSTDATE,first_date); int bars=Bars(sym_name,PERIOD_M1); Print("First date ",first_date," - ",bars," bars"); } //--- //--- } //+------------------------------------------------------------------+ //| проверка истории для подгрузки | //+------------------------------------------------------------------+ int CheckLoadHistory(string symbol,ENUM_TIMEFRAMES period,datetime start_date) { //----+ datetime first_date=0; datetime times[100]; //--- check symbol & period if(symbol == NULL || symbol == "") symbol = Symbol(); if(period == PERIOD_CURRENT) period = Period(); //--- check if symbol is selected in the MarketWatch if(!SymbolInfoInteger(symbol,SYMBOL_SELECT)) { if(GetLastError()==ERR_MARKET_UNKNOWN_SYMBOL) return(-1); if(!SymbolSelect(symbol,true)) Print(__FUNCTION__,"(): Не удалось добавить символ ",symbol," в окно MarketWatch!!!"); } //--- check if data is present SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date); if(first_date>0 && first_date<=start_date) return(1); //--- don't ask for load of its own data if it is an indicator if(MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR && Period()==period && Symbol()==symbol) return(-4); //--- second attempt if(SeriesInfoInteger(symbol,PERIOD_M1,SERIES_TERMINAL_FIRSTDATE,first_date)) { //--- there is loaded data to build timeseries if(first_date>0) { //--- force timeseries build CopyTime(symbol,period,first_date+PeriodSeconds(period),1,times); //--- check date if(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date)) if(first_date>0 && first_date<=start_date) return(2); } } //--- max bars in chart from terminal options int max_bars=TerminalInfoInteger(TERMINAL_MAXBARS); //--- load symbol history info datetime first_server_date=0; while(!SeriesInfoInteger(symbol,PERIOD_M1,SERIES_SERVER_FIRSTDATE,first_server_date) && !IsStopped()) Sleep(5); //--- fix start date for loading if(first_server_date>start_date) start_date=first_server_date; if(first_date>0 && first_date<first_server_date) Print(__FUNCTION__,"(): Warning: first server date ",first_server_date," for ",symbol, " does not match to first series date ",first_date); //--- load data step by step int fail_cnt=0; while(!IsStopped()) { //--- wait for timeseries build while(!SeriesInfoInteger(symbol,period,SERIES_SYNCHRONIZED) && !IsStopped()) Sleep(5); //--- ask for built bars int bars=Bars(symbol,period); if(bars>0) { if(bars>=max_bars) return(-2); //--- ask for first date if(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date)) if(first_date>0 && first_date<=start_date) return(0); } //--- copying of next part forces data loading int copied=CopyTime(symbol,period,bars,100,times); if(copied>0) { //--- check for data if(times[0]<=start_date) return(0); if(bars+copied>=max_bars) return(-2); fail_cnt=0; } else { //--- no more than 100 failed attempts fail_cnt++; if(fail_cnt>=100) return(-5); Sleep(10); } } //----+ stopped return(-3); } //+------------------------------------------------------------------+
а умирает вот тут
while(!SeriesInfoInteger(symbol,period,SERIES_SYNCHRONIZED) && !IsStopped())
Nikolay Kositsin:
Ничто не вечно под луной!
Большое спасибо, у меня работает!
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
HistoryLoader:
Функциональный модуль мультивалютного эксперта для организации доступа к любым историческим данным с обработкой результата запроса.
Если в клиентском терминале, в котором работает мультивалютный эксперт, открыт только один график, на который и прикреплен этот эксперт, то фактически для эксперта будут доступными исторические данные только этого графика. Для решения данной проблемы и предназначен этот модуль.
Автор: Nikolay Kositsin