Error de sintaxis en la línea 91(falta H)."SERIES_SYNCRONIZED" debería ser "SERIES_SYNCHRONIZED".
elib:
Error de sintaxis en la línea 91(falta H). "SERIES_SYNCRONIZED" debería ser "SERIES_SYNCHRONIZED".
¡Nada dura para siempre bajo la luna!
//+------------------------------------------------------------------+ //| comprobación del historial de carga| //+------------------------------------------------------------------+ int CheckLoadHistory(string symbol,ENUM_TIMEFRAMES period,datetime start_date) { //----+ datetime first_date=0; datetime times[100]; //--- comprobar símbolo y punto if(symbol == NULL || symbol == "") symbol = Symbol(); if(period == PERIOD_CURRENT) period = Period(); //--- comprobar si el símbolo está seleccionado en el MarketWatch if(!SymbolInfoInteger(symbol,SYMBOL_SELECT)) { if(GetLastError()==ERR_MARKET_UNKNOWN_SYMBOL) return(-1); if(!SymbolSelect(symbol,true)) Print(__FUNCTION__,"(): Error al añadir el carácter ",symbol," en la ventana de MarketWatch!!!"); } //--- comprobar si hay datos SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date); if(first_date>0 && first_date<=start_date) return(1); //--- no pida la carga de sus propios datos si es un indicador if(MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR && Period()==period && Symbol()==symbol) return(-4); //--- segundo intento if(SeriesInfoInteger(symbol,PERIOD_M1,SERIES_TERMINAL_FIRSTDATE,first_date)) { //--- hay datos cargados para construir series temporales if(first_date>0) { //--- force timeseries build CopyTime(symbol,period,first_date+PeriodSeconds(period),1,times); //--- comprobar fecha if(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date)) if(first_date>0 && first_date<=start_date) return(2); } } //-- barras máximas en el gráfico desde las opciones del terminal int max_bars=TerminalInfoInteger(TERMINAL_MAXBARS); //--- cargar historial de símbolos datetime first_server_date=0; while(!SeriesInfoInteger(symbol,PERIOD_M1,SERIES_SERVER_FIRSTDATE,first_server_date) && !IsStopped()) Sleep(5); //--- fijar la fecha de inicio de la carga 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); //--- carga los datos paso a paso int fail_cnt=0; while(!IsStopped()) { //--- esperar a que se construya la serie temporal while(!SeriesInfoInteger(symbol,period,SERIES_SYNCHRONIZED) && !IsStopped()) Sleep(5); //--- pide barras construidas int bars=Bars(symbol,period); if(bars>0) { if(bars>=max_bars) return(-2); //--- pide la primera cita if(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date)) if(first_date>0 && first_date<=start_date) return(0); } //--- la copia de la siguiente parte fuerza la carga de datos int copied=CopyTime(symbol,period,bars,100,times); if(copied>0) { //--- comprobar datos if(times[0]<=start_date) return(0); if(bars+copied>=max_bars) return(-2); fail_cnt=0; } else { //--- no más de 100 intentos fallidos fail_cnt++; if(fail_cnt>=100) return(-5); Sleep(10); } } //----+stopped return(-3); } //+------------------------------------------------------------------+
No funciona, se muere en el primer carácter....
Aquí está el código
//+------------------------------------------------------------------+ //|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 //--- parámetros de entrada //+------------------------------------------------------------------+ //| Función de inicio del programa de script| //+------------------------------------------------------------------+ 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"); } //--- //--- } //+------------------------------------------------------------------+ //| comprobación del historial de carga| //+------------------------------------------------------------------+ int CheckLoadHistory(string symbol,ENUM_TIMEFRAMES period,datetime start_date) { //----+ datetime first_date=0; datetime times[100]; //--- comprobar símbolo y punto if(symbol == NULL || symbol == "") symbol = Symbol(); if(period == PERIOD_CURRENT) period = Period(); //--- comprobar si el símbolo está seleccionado en el MarketWatch if(!SymbolInfoInteger(symbol,SYMBOL_SELECT)) { if(GetLastError()==ERR_MARKET_UNKNOWN_SYMBOL) return(-1); if(!SymbolSelect(symbol,true)) Print(__FUNCTION__,"(): Error al añadir el carácter ",symbol," en la ventana de MarketWatch!!!"); } //--- comprobar si hay datos SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date); if(first_date>0 && first_date<=start_date) return(1); //--- no pida la carga de sus propios datos si es un indicador if(MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR && Period()==period && Symbol()==symbol) return(-4); //--- segundo intento if(SeriesInfoInteger(symbol,PERIOD_M1,SERIES_TERMINAL_FIRSTDATE,first_date)) { //--- hay datos cargados para construir series temporales if(first_date>0) { //--- force timeseries build CopyTime(symbol,period,first_date+PeriodSeconds(period),1,times); //--- comprobar fecha if(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date)) if(first_date>0 && first_date<=start_date) return(2); } } //-- barras máximas en el gráfico desde las opciones del terminal int max_bars=TerminalInfoInteger(TERMINAL_MAXBARS); //--- cargar historial de símbolos datetime first_server_date=0; while(!SeriesInfoInteger(symbol,PERIOD_M1,SERIES_SERVER_FIRSTDATE,first_server_date) && !IsStopped()) Sleep(5); //--- fijar la fecha de inicio de la carga 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); //--- carga los datos paso a paso int fail_cnt=0; while(!IsStopped()) { //--- esperar a que se construya la serie temporal while(!SeriesInfoInteger(symbol,period,SERIES_SYNCHRONIZED) && !IsStopped()) Sleep(5); //--- pide barras construidas int bars=Bars(symbol,period); if(bars>0) { if(bars>=max_bars) return(-2); //--- pide la primera cita if(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date)) if(first_date>0 && first_date<=start_date) return(0); } //--- la copia de la siguiente parte fuerza la carga de datos int copied=CopyTime(symbol,period,bars,100,times); if(copied>0) { //--- comprobar datos if(times[0]<=start_date) return(0); if(bars+copied>=max_bars) return(-2); fail_cnt=0; } else { //--- no más de 100 intentos fallidos fail_cnt++; if(fail_cnt>=100) return(-5); Sleep(10); } } //----+stopped return(-3); } //+------------------------------------------------------------------+
y muere aquí
while(!SeriesInfoInteger(symbol,period,SERIES_SYNCHRONIZED) && !IsStopped())
Nikolay Kositsin:
Nada es eterno bajo la luna.
Muchas gracias, ¡a mí me funciona!
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
HistoryLoader:
Este módulo funcional permite cargar los datos históricos de acuerdo con una solicitud de un Asesor Experto multi-divisa.
Si sólo hay una gráfica abierta en un terminal del cliente con un Asesor Experto multi-divisa funcionando, los datos de esta gráfica sólo estarán disponibles para este Asesor Experto. El módulo está diseñado para resolver este problema.
Autor: Nikolay Kositsin