FileReadString在MQL5中返回空值

FileReadString在MQL5中返回空值,file,mql,mql5,metatrader5,File,Mql,Mql5,Metatrader5,我正在尝试读取MQL5中的文件(ativos.txt),并打印其中的资产。但是,它似乎读取它们,但不打印(空)。有人能帮忙吗 //+------------------------------------------------------------------+ //| Expert functions | //+------------------------------------------

我正在尝试读取MQL5中的文件(ativos.txt),并打印其中的资产。但是,它似乎读取它们,但不打印(空)。有人能帮忙吗

//+------------------------------------------------------------------+
//| Expert functions                                                 |
//+------------------------------------------------------------------+

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 Market Watch
   if(!SymbolInfoInteger(symbol,SYMBOL_SELECT))
     {
      if(GetLastError()==ERR_MARKET_UNKNOWN_SYMBOL) return(-1);
      SymbolSelect(symbol,true);
     }
//--- 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("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);
  }
//+------------------------------------------------------------------+
//| Returns string value of the period                               |
//+------------------------------------------------------------------+
string GetPeriodName(ENUM_TIMEFRAMES period)
  {
   if(period==PERIOD_CURRENT) period=Period();
//---
   switch(period)
     {
      case PERIOD_M1:  return("M1");
      case PERIOD_M2:  return("M2");
      case PERIOD_M3:  return("M3");
      case PERIOD_M4:  return("M4");
      case PERIOD_M5:  return("M5");
      case PERIOD_M6:  return("M6");
      case PERIOD_M10: return("M10");
      case PERIOD_M12: return("M12");
      case PERIOD_M15: return("M15");
      case PERIOD_M20: return("M20");
      case PERIOD_M30: return("M30");
      case PERIOD_H1:  return("H1");
      case PERIOD_H2:  return("H2");
      case PERIOD_H3:  return("H3");
      case PERIOD_H4:  return("H4");
      case PERIOD_H6:  return("H6");
      case PERIOD_H8:  return("H8");
      case PERIOD_H12: return("H12");
      case PERIOD_D1:  return("Daily");
      case PERIOD_W1:  return("Weekly");
      case PERIOD_MN1: return("Monthly");
     }
//---
   return("unknown period");
  }
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
void OnStart()
   {
      ENUM_TIMEFRAMES InpLoadedPeriod=PERIOD_CURRENT;  // Period to be loaded
      datetime        InpStartDate=D'2017.01.01';
      bool f_exists=false;
      int n_ativos=0;
      string ativos[];
      ResetLastError();
      f_exists=FileIsExist("ativos.txt", FILE_COMMON);
      Print(f_exists);
      if (f_exists == true)
      {
         int fhandle;
         fhandle=FileOpen("ativos.txt",FILE_TXT|FILE_READ|FILE_COMMON|FILE_SHARE_READ);

         if(fhandle!=INVALID_HANDLE) 
          { 
            n_ativos=0;
            while(!FileIsEnding(fhandle))
            { 
                FileReadString(fhandle);
                n_ativos++;
            }
            ArrayResize(ativos, n_ativos);
            for (int i=0;i<n_ativos;i++)
            {
               ativos[i]=FileReadString(fhandle);
               Print(FileReadString(fhandle));
               Print("Start load",ativos[i]+","+GetPeriodName(InpLoadedPeriod),"from",InpStartDate);
            //---
               int res=CheckLoadHistory(ativos[i],InpLoadedPeriod,InpStartDate);
               switch(res)
                 {
                  case -1 : Print("Unknown symbol ",ativos[i]);             break;
                  case -2 : Print("Requested bars more than max bars in chart ", ativos[i]); break;
                  case -3 : Print("Program was stopped ", ativos[i]);                        break;
                  case -4 : Print("Indicator shouldn't load its own data ", ativos[i]);      break;
                  case -5 : Print("Load failed ", ativos[i]);                                break;
                  case  0 : Print("Loaded OK ", ativos[i]);                                  break;
                  case  1 : Print("Loaded previously ", ativos[i]);                          break;
                  case  2 : Print("Loaded previously and built ", ativos[i]);                break;
                  default : Print("Unknown result ", ativos[i]);
                 }
            //---
               datetime first_date;
               SeriesInfoInteger(ativos[i],InpLoadedPeriod,SERIES_FIRSTDATE,first_date);
               int bars=Bars(ativos[i],InpLoadedPeriod);
               Print("First date ",first_date," - ",bars," bars");

            }
            FileClose(fhandle); 
          } 
        else 
           PrintFormat("Erro, código = %d",GetLastError());
      }

    }


有什么问题?如我所见,mt5从文件中读取数据。“2017.01.01 00:00:00…”-这是您需要的吗?另外,如果您提供了一个简单的代码,它有相同的问题,但与此任务没有任何关系,那么您将更容易理解问题,并且SOF社区也会帮助您。问题是:它必须打印资产名称,但它打印空值。
2019.12.24 12:35:01.927 OnStart (IBOV,D1)   Start load,Dailyfrom2017.01.01 00:00:00
2019.12.24 12:35:01.927 OnStart (IBOV,D1)   Loaded previously 
2019.12.24 12:35:01.927 OnStart (IBOV,D1)   First date 2016.07.11 00:00:00 - 856 bars
2019.12.24 12:35:01.927 OnStart (IBOV,D1)   
2019.12.24 12:35:01.927 OnStart (IBOV,D1)   Start load,Dailyfrom2017.01.01 00:00:00
2019.12.24 12:35:01.927 OnStart (IBOV,D1)   Loaded previously 
2019.12.24 12:35:01.927 OnStart (IBOV,D1)   First date 2016.07.11 00:00:00 - 856 bars
2019.12.24 12:35:01.927 OnStart (IBOV,D1)   
2019.12.24 12:35:01.927 OnStart (IBOV,D1)   Start load,Dailyfrom2017.01.01 00:00:00
2019.12.24 12:35:01.927 OnStart (IBOV,D1)   Loaded previously 
2019.12.24 12:35:01.927 OnStart (IBOV,D1)   First date 2016.07.11 00:00:00 - 856 bars