В тестере не пишет данные в файл

 

Всем доброго времени.

Подскажите, почему во время тестерного прогона (без оптимизации)  стандартные функции не пишут данные в файл (без тестера все работает)?

 

//+------------------------------------------------------------------+
void PrintToFile(string text)
  {
//-- Добавляем дату время к тексту лога
   text=TimeToString(TimeCurrent()/*TimeLocal()*/,TIME_DATE|TIME_MINUTES|TIME_SECONDS)+" "+text;
   Print(text);
//--END Добавляем дату время к тексту лога

//--
//static string mq5Path=StringSubstr(__PATH__,0,StringLen(__PATH__)-StringLen(__FILE__));
//static string dataPath=mq5Path;
//*************************************************************
//--
   static int  fileHandle=-1;
   MqlDateTime dt;
   string      fdt;
   string      fName;
//--
   if(fileHandle==INVALID_HANDLE)
     {
      //--
      TimeLocal(dt);
      fdt=(string)(dt.year)+"_";
      if(dt.mon<10)  {fdt+="0";} fdt+=(string)(dt.mon) +"_";
      if(dt.day<10)  {fdt+="0";} fdt+=(string)(dt.day) +" ";
      if(dt.hour<10) {fdt+="0";} fdt+=(string)(dt.hour)+"_";
      if(dt.min<10)  {fdt+="0";} fdt+=(string)(dt.min) +"_";
      if(dt.sec<10)  {fdt+="0";} fdt+=(string)(dt.sec);
      fName=__FILE__+" ["+fdt+"] log.txt";
      //--
      ResetLastError();
      fileHandle=FileOpen(fName,FILE_READ|FILE_WRITE|FILE_ANSI|FILE_TXT|FILE_SHARE_WRITE);
      if(fileHandle==INVALID_HANDLE){Print("LastError()="+(string)(_LastError)+"  "+fName);}
      else                          {FileSeek(fileHandle,0,SEEK_END);}
     }
//--
   if(fileHandle!=INVALID_HANDLE)
     {
      ResetLastError();
      FileWrite(fileHandle,text);
      ulong fs=FileSize(fileHandle);
      //Print("FileSize="+(string)fs);
      if(fs>1000000){FileClose(fileHandle);fileHandle=INVALID_HANDLE;}//нарезка файлов с ограничением длины
     }
   else {Print("FileError "+(string)fileHandle+" "+fName);}
  }
//+------------------------------------------------------------------+ 

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура даты
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура даты
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура даты - Документация по MQL5
 
tmp1204:

Всем доброго времени.

Подскажите, почему во время тестерного прогона (без оптимизации)  стандартные функции не пишут данные в файл (без тестера все работает)?

Почему Вы решили, что данные в файл не пишутся?

Лучше правильно вставлять код, это делает его более читаемым.

 

Не создается файл. Он должен создаваться и заполняться при первом тике. "Не в тестере" все работает.

void PrintToFile(string text)
  {
//-- Добавляем дату время к тексту лога
   text=TimeToString(TimeCurrent()/*TimeLocal()*/,TIME_DATE|TIME_MINUTES|TIME_SECONDS)+" "+text;
   Print(text);
//--END Добавляем дату время к тексту лога

//--
//static string mq5Path=StringSubstr(__PATH__,0,StringLen(__PATH__)-StringLen(__FILE__));
//static string dataPath=mq5Path;
//*************************************************************
//--
   static int  fileHandle=-1;
   MqlDateTime dt;
   string      fdt;
   string      fName;
//--
   if(fileHandle==INVALID_HANDLE)
     {
      //--
      TimeLocal(dt);
      fdt=(string)(dt.year)+"_";
      if(dt.mon<10)  {fdt+="0";} fdt+=(string)(dt.mon) +"_";
      if(dt.day<10)  {fdt+="0";} fdt+=(string)(dt.day) +" ";
      if(dt.hour<10) {fdt+="0";} fdt+=(string)(dt.hour)+"_";
      if(dt.min<10)  {fdt+="0";} fdt+=(string)(dt.min) +"_";
      if(dt.sec<10)  {fdt+="0";} fdt+=(string)(dt.sec);
      fName=__FILE__+" ["+fdt+"] log.txt";
      //--
      ResetLastError();
      fileHandle=FileOpen(fName,FILE_READ|FILE_WRITE|FILE_ANSI|FILE_TXT|FILE_SHARE_WRITE);
      if(fileHandle==INVALID_HANDLE){Print("LastError()="+(string)(_LastError)+"  "+fName);}
      else                          {FileSeek(fileHandle,0,SEEK_END);}
     }
//--
   if(fileHandle!=INVALID_HANDLE)
     {
      ResetLastError();
      FileWrite(fileHandle,text);
      ulong fs=FileSize(fileHandle);
      //Print("FileSize="+(string)fs);
      if(fs>1000000){FileClose(fileHandle);fileHandle=INVALID_HANDLE;}//нарезка файлов с ограничением длины
     }
   else {Print("FileError "+(string)fileHandle+" "+fName);}
  }

 

 

Разобрался. Пишет в каталог тестера  "mt5\tester\Agent\MQL5\Files". Все ok.

Причина обращения: