Не могу записать данные бара в файл используя MQL4

 

Приветствую, уважаемые участники форума.

Я столкнулся с проблемой при работе с МТ4 на MQL4. Я пишу советника, который должен получать данные последнего бара (цена открытия, максимум, минимум, цена закрытия, объем) и записывать эти данные в текстовый файл каждую секунду. Я использую EventSetMillisecondTimer для таймера.

Код советника:

int OnInit()
{
   EventSetMillisecondTimer(1000);  // Timer event every 1 second
   Print("Initialized successfully");
   return(INIT_SUCCEEDED);
}

void OnTimer()
{
   //--- get the data
   double open = iOpen(Symbol(),0,0);
   double high = iHigh(Symbol(),0,0);
   double low = iLow(Symbol(),0,0);
   double close = iClose(Symbol(),0,0);
   long volume = iVolume(Symbol(),0,0);
   //--- convert data to string
   string data=DoubleToString(open)+" "+DoubleToString(high)+" "+DoubleToString(low)+" "+DoubleToString(close)+" "+DoubleToString(volume);

   Print("Data to write: ", data);
   
   //--- write data to file
   string pathToFile = "\\Files\\data.txt";  // Path to the file
   int file_handle=FileOpen(pathToFile,FILE_WRITE|FILE_CSV);
   if(file_handle!=INVALID_HANDLE)
   {
      FileWrite(file_handle,data);
      FileClose(file_handle);
      Print("Data successfully written to file");
   }
   else
   {
      Print("Failed to write data to file. Error code: ", GetLastError());
   }
}

void OnDeinit(const int reason)
{
   EventKillTimer();
   Print("Deinitialized");
}

Проблема в том, что данные не записываются в файл, хотя в журнале терминала я вижу сообщения о том, что советник был успешно инициализирован. Ошибок при открытии файла и записи в него не выводится.

Я пробовал записать данные в разные папки, включая папку MQL4\Files, но результат всегда один и тот же - файл не создается.

Есть ли у кого-нибудь идеи, что я делаю не так? Буду благодарен за любую помощь.

 
string pathToFile = "PAPKA\\data.txt";  // Path to the file

вот так работает

 
Попробовал, результат тот же.
Может быть проблема в том что нет доступа к папке? Но по сути он есть. Не пойму как это решить.
 
denitto24 #:
Попробовал, результат тот же.
Может быть проблема в том что нет доступа к папке? Но по сути он есть. Не пойму как это решить.

Научитесь работать с отладкой.

 
denitto24 #:
Попробовал, результат тот же.
Может быть проблема в том что нет доступа к папке? Но по сути он есть. Не пойму как это решить.

В представленном коде проблема только со слешем перед именем папки Files. Если его убрать, то все работает: советник каждую секунду записывает данные в файл MQL4\Files\Files\data.txt. 

P. S. Зачем использовать миллисекундный таймер при периоде 1 секунда? Для этого ведь есть секундный таймер.

P. P. S. Также обратите внимание на то, что файл каждый раз создается заново, а не дозаписывается.

 
Ihor Herasko #:
Также обратите внимание на то, что файл каждый раз создается заново, а не дозаписывается.

И ещё - файл открыт без FILE_SHARE_READ - его нельзя открыть на просмотр пока он открыт для записи. А если открыт для просмотра - не будет писаться.

 

Всем привет!

Огромное спасибо @Denis Vasyutin, @Alexey Viktorov@Ihor Herasko и @JRandomTrader за помощь и ценные советы. Благодаря вашим подсказкам проблема решена. Очень ценю вашу поддержку!

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