Считывание настроек советника из файла set

 

Появилась идея оптимизировать рынок не за всю ночь  а кусками. Например с 21 до 0 часов одни параметры, с 0 до 3 другие, с 3 до 6 - третьи. 
Получился вот такой код. И даже работает!!

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
input int x = 100 ;
input int yy= 90;
input double dub=0.5;
input string s="test";

string terminal_data_path=TerminalInfoString(TERMINAL_DATA_PATH)+"\\MQL4\\Files\\";
input string folder_path = "Kub\\";
input string SetName = "21_0.set";

int _x=100;
int _yy=90;
double _dub=0.5;
string _s="test";


#property strict
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   _x=iparam("x");
   _yy=iparam("yy");
   _dub=dparam("dub");

   Print(_x,"   ",_yy,"    ",_dub);


   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {

  }
//+------------------------------------------------------------------+

int  iparam(string parametr)
  {
   int rez=-EMPTY_VALUE;
   string srez= "";
   int handle = FileOpen(folder_path+SetName,FILE_CSV|FILE_READ);
   if(handle<0) 
     { 
      Print("Неудачная попытка открыть файл по абсолютному пути"); 
      Print("Код ошибки ",GetLastError()); 
     } 
   string str[100]={""};

   for(int i=0; i<100; i++)
     {
      str[i]=FileReadString(handle);
      int pos0=StringFind(str[i],"=");

      string parametr0=StringSubstr(str[i],0,pos0);

      if(parametr0==parametr)
        {
         //Print(parametr0);
         srez= StringSubstr(str[i],pos0+1,StringLen(str[i]));
         rez =(int) StringToInteger(srez);
         break;
        }
      if(FileIsEnding(handle)) break;
     }
     
   FileClose(handle);
   
   if(rez==-EMPTY_VALUE) return -EMPTY_VALUE;
   else return rez;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double dparam(string parametr)
  {
   double rez=-EMPTY_VALUE;
   string srez= "";
   int handle = FileOpen(folder_path+SetName,FILE_CSV|FILE_READ);
   if(handle<0) 
     { 
      Print("Неудачная попытка открыть файл по абсолютному пути"); 
      Print("Код ошибки ",GetLastError()); 
     } 
   
   string str[100]={""};

   for(int i=0; i<100; i++)
     {
      str[i]=FileReadString(handle);
      int pos0=StringFind(str[i],"=");

      string parametr0=StringSubstr(str[i],0,pos0);
      if(parametr0==parametr)
        {
         srez= StringSubstr(str[i],pos0+1,StringLen(str[i]));
         rez = StringToDouble(srez);
         break;
        }
      if(FileIsEnding(handle)) break;
     }

   FileClose(handle);

   if(rez==-EMPTY_VALUE) return -EMPTY_VALUE;
   else return rez;
  }
//+------------------------------------------------------------------+

Но что-то мне подсказывает что есть решение поинетересней и более краткое.

Приведите пример подобной функции. 
Или пользуйтесь на здоровье кто искал что подобное. 

 
Dmitiry Ananiev:

Появилась идея оптимизировать рынок не за всю ночь  а кусками. Например с 21 до 0 часов одни параметры, с 0 до 3 другие, с 3 до 6 - третьи. 
Получился вот такой код. И даже работает!!

Но что-то мне подсказывает что есть решение поинетересней и более краткое.

Приведите пример подобной функции. 
Или пользуйтесь на здоровье кто искал что подобное. 


Более кратко в данном случае - сделать одну функцию, в которую передавать тип запрашиваемого значения. Возможно, даже через шаблон.

Еще интересует: неужели можно открыть файл по абсолютному пути? Я понимаю, что вроде как имеем дело с песочницей. Но ведь указан абсолютный путь. Точно работает (лень проверять)?

Это так, по сути кода.

А по самой идее: пока не понял, как set-файл помогает в деле оптимизации на каждом из временных отрезков?

 

НА счет абсолютного пути -  он не применяется. 

На счет идеи. Взять какой нибудь кросс EURGBP к примеру. Днем он рисует флеты и тренды. Ночью в большинстве своем рисует флеты и не такие широкие, как днем. Да и тренды незначительные. Почему бы не настроить советника на Дневную и Ночную торговлю ? 

 
Dmitiry Ananiev:

На счет идеи. Взять какой нибудь кросс EURGBP к примеру. Днем он рисует флеты и тренды. Ночью в большинстве своем рисует флеты и не такие широкие, как днем. Да и тренды незначительные. Почему бы не настроить советника на Дневную и Ночную торговлю ? 


Этот момент я как раз понял. Не понял, при чем тут set-файл? Я бы просто применял в советнике разные настроечные параметры для каждого периода суток. Например, завел бы два списка подобных параметров для ночи и для дня. Тогда и оптимизировать можно.