Однократный расчет массива при оптимизации - страница 3

 
forexman77:

Затраты больше однозначно. Есть два варианта с неизменными настройками индикатора и с теми же значениями, но уже записанными в файл, что сбрасываются в массив.

Вариант с файлом в разы дольше считается, чем просто с расчетом индикатора в советнике.

Просто подумал, что может есть способ сохранить массив один раз и использовать его для всех проходов в оптимизации и этим разгрузить алгоритм. 

А можно вариант записи и чтения массива который дольше расчёта индикатора?

 
forexman77:
Если сделать так, то массив будет сохраняться при переходе на новый проход?
да, обязан..
 
Dmitry Fedoseev:
Да. Это не сложно и не затратно. Использовать бинарный режим. Можно и не читать весь файл, а с нужной позиции. 
int init()
  {
   int k;
   string Skip;
   datetime Str_DtTm;
   double L;
   Handle=FileOpen(File_Name,FILE_CSV|FILE_READ|FILE_BIN,",");
   ResetLastError();
   if(Handle<0) // Failure when opening a file
     {
      if(GetLastError()==4103)
         Alert("There is no file named ",File_Name);
      else
         Alert("Error when opening a file ",File_Name);
      PlaySound("Bzrrr.wav");
      return(0);
     }
   ArrayInitialize(T,0);
   ArrayInitialize(dn,0);
   ArrayResize(T,stroki);
   ArrayResize(dn,stroki);
   for(k=stroki-1;k>=0;k--)
     {
      //--------------------------------------------------------- 5 --
      Str_DtTm=FileReadDatetime(Handle);// строка даты
      L=FileReadDouble(Handle);
      Skip=FileReadString(Handle);//пропускаем
      //--------------------------------------------------------- 6 -- 
      T[k]=Str_DtTm;   
      dn[k]=L;   
      //--------------------------------------------------------- 7 --
      if(FileIsEnding(Handle)==true){ Print("Конец отсчета=",TimeToString(T[k]));break;}//завершили отсчет

     }
   FileClose(Handle);

   return(0);
  }

Бинарный режим это когда нет преобразований строки в число?

Еще добавлю, что оптимизация на 1 минутном графике на большой истории. 

 
include действует при компиляции. Кто будет компилировать? Может этот массив зависит от параметров оптимизации? Значит перед каждой оптимизацией генерить массив, компилировать. Убогое решение.
 
Dmitry Fedoseev:
include действует при компиляции. Кто будет компилировать? Может этот массив зависит от параметров оптимизации? Значит перед каждой оптимизацией генерить массив, компилировать. Убогое решение.
не выдумывай - ТС ясно сказал что массив неизмененен.
 
forexman77:
Бинарный режим это когда нет преобразований строки в число?

https://www.mql5.com/ru/docs/files/filereadarray

https://www.mql5.com/ru/docs/files/filewritearray

По ссылкам и примеры есть. 

 
Maxim Kuznetsov:
не выдумывай - ТС ясно сказал что массив неизмененен.
Неизменен в течении одной оптимизации. Про другую неизменность ничего не было.
 
Конечно, если массив всегда и абсолютно неизменен, то лучше его включить код советника. Можно прямо в файл советника без include.
 
Maxim Kuznetsov:
да, обязан..
Dmitry Fedoseev:
Конечно, если массив всегда и абсолютно неизменен, то лучше его включить код советника. Можно прямо в файл советника без include.
include еще не сталкивался. Направьте меня на истинный путь, как примерно это сделать.
 
forexman77:
include еще не сталкивался. Направьте меня на истинный путь, как примерно это сделать.
Без инклуда можно, сгенерировать скриптом код массива, записать в файл (можно и в Alert() вывести), потом мышкой перенести в код советника.
Причина обращения: