Запись в файл FileWrite

 
Здравствуйте. В советника хочу вставить выгрузку значений Open каждой свечи в файл. В итоге в блок условия программа заходит, проходит все функции, но в итоге в файле ничего не записывается. В чем может быть проблема?

P.s. в скрипте всё работает. Хочу спросить, можно ли подобное сделать и в советнике.

  int filehandle=FileOpen("RTS",FILE_WRITE);
  string g = "Test";
  if(filehandle!=INVALID_HANDLE) 
     { 
      FileWriteString(filehandle,g);
      FileClose(filehandle);
      Print("Размер файла ",FileSize(filehandle)); 
     } 


Вот если что файл.
Файлы:
 
Ребят, кто знает, помогите пожалуйста. Очень нужно) Выгружать в файл значения Закрытия\Открытия баров за месяц\год где-то, для статистики. Как это возможно сделать из МТ5? Исторические данные есть в файлах hcc, но как их открыть, я не нашел. В итоге можно либо с каждым новым баром записывать значение в файл. Или же запустить скрипт, но т.к. он не проходит по всем барам. Думаю, можно загрузить в него список из несколько тысяч значений и все по очереди в цикле записать. Как лучше сделать?
 

Запись массива Open[] в файл csv:

//+------------------------------------------------------------------+
//|                                                  Open to csv.mq5 |
//|                              Copyright © 2017, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
#property script_show_inputs
input int count_bars=50;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   double Open[];
   double open=0;
   int copied=CopyOpen(Symbol(),Period(),1,count_bars,Open);
   if(copied==-1 || copied<count_bars)
     {
      Print("Copied ",copied," -> error");
      return;
     }
//--- correct way of working in the "file sandbox" 
   ResetLastError();
   int filehandle=FileOpen("open.csv",FILE_WRITE|FILE_CSV);
   if(filehandle!=INVALID_HANDLE)
     {
      for(int i=0;i<copied;i++)
         FileWrite(filehandle,DoubleToString(Open[i],Digits()));
      FileClose(filehandle);
      Print("FileOpen OK");
     }
   else Print("Operation FileOpen failed, error ",GetLastError());
  }
//+------------------------------------------------------------------+

Созданный файл искать в папке "каталог данных терминала"\MQL5\Files

Файлы:
 
Vladimir Karputov:

Запись массива Open[] в файл csv:

Созданный файл искать в папке "каталог данных терминала"\MQL5\Files


Спасибо, но это в скрипте. Это у меня работает. Просто в документации не написано, что должно работать только в скрипте. Думал, можно как-то еще реализовать в советнике.
 
Fresto:

Спасибо, но это в скрипте. Это у меня работает. Просто в документации не написано, что должно работать только в скрипте. Думал, можно как-то еще реализовать в советнике.

Ну перекиньте этот код в советник. Только выставьте флаг окончания записи - иначе будете на каждом тике перезаписывать файл :). Можно и в индикаторе, только тоже нужно флаг создать - чтобы не писать по новой на каждом тике.
 
Vladimir Karputov:

Ну перекиньте этот код в советник. Только выставьте флаг окончания записи - иначе будете на каждом тике перезаписывать файл :)

Просто вот я и перекинул в советник, но там не работает данная функция, поэтому и спросил на форуме. Можете пожалуйста проверить в советнике у себя. Просто код один и тот же, но в скрипте работает, а в советнике нет.
P.s. у меня есть блок кода из 1 статьи, который возвращает, если не закончился текущий бар.
 

Вот советник:

//+------------------------------------------------------------------+
//|                                                  Open to csv.mq5 |
//|                              Copyright © 2017, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//--- input parameter
input int   count_bars=50;       // Count bars
//---
bool        end_write=false;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   end_write=false;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(end_write)
      return;

   double Open[];
   double open=0;
   int copied=CopyOpen(Symbol(),Period(),1,count_bars,Open);
   if(copied==-1 || copied<count_bars)
     {
      Print("Copied ",copied," -> error");
      return;
     }
//--- correct way of working in the "file sandbox" 
   ResetLastError();
   int filehandle=FileOpen(Symbol()+" "+EnumToString(Period())+" open.csv",FILE_WRITE|FILE_CSV);
   if(filehandle!=INVALID_HANDLE)
     {
      FileWrite(filehandle,"Open");

      for(int i=0;i<copied;i++)
         FileWrite(filehandle,DoubleToString(Open[i],Digits()));
      FileClose(filehandle);
      Print("FileOpen OK");

      end_write=true;
     }
   else Print("Operation FileOpen failed, error ",GetLastError());
  }
//+------------------------------------------------------------------+

здесь уже имя файла (на символе "USDCAD" и периоде "M1" имеет вид

USDCAD PERIOD_M1 open.csv
Файлы:
 
Vladimir Karputov:

Вот советник:

здесь уже имя файла (на символе "USDCAD" и периоде "M1" имеет вид


Вот непонятно. Я открыл ваш файл, изменил только название файла, куда записывается. В итоге он не записывает ничего. Только в скрипте работает всё. В индикаторе тоже не работает.
 
Fresto:

Вот непонятно. Я открыл ваш файл, изменил только название файла, куда записывается. В итоге он не записывает ничего. Только в скрипте работает всё. В индикаторе тоже не работает.


Могу предположить: что-то не то с руками ;). Уж извините, если что не так. 

И в журнал посматривайте - там будут сообщения если:

 
Vladimir Karputov:


Могу предположить: что-то не то с руками ;). Уж извините, если что не так. 

И в журнал посматривайте - там будут сообщения если:


Надеюсь, что дело в руках) Потом что открыл ваш файл и изменил 1 строчку)
Выводит только сообщение об успешности.

2017.03.30 12:16:46.681   count_bars=50
2017.03.30 12:17:18.156 2016.01.04 10:00:00   FileOpen OK
 
Fresto:

Надеюсь, что дело в руках) Потом что открыл ваш файл и изменил 1 строчку)
Выводит только сообщение об успешности.


Не, не, не. Ищем лекарство для пук. Определённо.