Скачать MetaTrader 5

запись и востановление настроек советника (MQL5)

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Пиши статьи, помогай другим разработчикам и зарабатывай
Andrey Mikhailov
1154
Andrey Mikhailov 2016.07.04 14:01 
Подскажите пожалуйста есть ли возможность программной (mql5) записи и восстановления настроек советника ? А так же перехват времени их изменения.
Sergey Gritsay
6479
Sergey Gritsay 2016.07.04 17:39  
Andrey Mikhailov:
Подскажите пожалуйста есть ли возможность программной (mql5) записи и восстановления настроек советника ? А так же перехват времени их изменения.
Конечно существует, сохранение и восстановление input переменных реализовано на штатном уровне терминала, все остальные переменные значение которых нужно восстановить при перезапуске советника записываются в файл или или в глобальные переменные терминала например в функции OnDeinit() а восстановление в функции OnInit(). Примерно так
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(MQLInfoInteger(MQL_VISUAL_MODE))flag_save=false;
   if(MQLInfoInteger(MQL_OPTIMIZATION))flag_save=false;
   if(MQLInfoInteger(MQL_TESTER)) flag_save=false;
   if(flag_save)LoadParametres();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   if(flag_save)SaveParametres();
  }
//+------------------------------------------------------------------+
void SaveParametres()
  {
   int handle=FileOpen(Имя файла.csv",FILE_CSV|FILE_WRITE);

   if(handle>0)
     {
      FileWrite(handle,tiket);
      FileWrite(handle,flag_series);
      FileWrite(handle,TP);
      FileWrite(handle,SL);
      FileWrite(handle,series);
      FileWrite(handle,Lots);

      FileClose(handle);
     }
   else Print("Error saving data № - ",GetLastError(),"Magic = ",Magic," ",_Symbol);
  }
//+------------------------------------------------------------------+
void LoadParametres()
  {
   Print("*******************************************");
   Print("Start downloading data Magic = ",Magic," ",_Symbol);
   Print("*******************************************");
   int handle=FileOpen("Имя файла.csv",FILE_CSV|FILE_READ);

   if(handle>0)
     {

      tiket=(int)FileReadNumber(handle);
      flag_series=FileReadBool(handle);
      TP = FileReadNumber(handle);
      SL = FileReadNumber(handle);
      series=(int)FileReadNumber(handle);
      Lots=FileReadNumber(handle);

      FileClose(handle);
      Print("*******************************************");
      Print("Loading data completed Magic = ",Magic," ",_Symbol);
      Print("*******************************************");
     }
  }
//+------------------------------------------------------------------+
Andrey Mikhailov
1154
Andrey Mikhailov 2016.07.04 19:18  
А в советнике можно поймать момент когда изменены параметры советника ?
Sergey Gritsay
6479
Sergey Gritsay 2016.07.05 01:49  
Andrey Mikhailov:
А в советнике можно поймать момент когда изменены параметры советника ?

скорее всего да, только для какой цели это нужно 

Alexey Valeev
3692
Alexey Valeev 2016.07.05 21:42  
Andrey Mikhailov:
А в советнике можно поймать момент когда изменены параметры советника ?

Создайте статическую переменную, или глобальную например bool one_start=true; и проверяйте её в OnInit, при изменении параметров они не сбрасываются. По значению этой переменной вы узнаете, это просто запуск, или же изменение параметров.

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
//---
bool one_start=true;
//--- 
   if(one_start){
      Print("One start");
      one_start=false;
   }
   else Print("Parameters changed");

   return(INIT_SUCCEEDED);
}
Rashid Umarov
Админ
11836
Rashid Umarov 2016.07.06 09:59  
Andrey Mikhailov:
Подскажите пожалуйста есть ли возможность программной (mql5) записи и восстановления настроек советника ? А так же перехват времени их изменения.
Вчера вышла статья Текстовые файлы для хранения входных параметров советников, индикаторов и скриптов
Andrey Mikhailov
1154
Andrey Mikhailov 2016.07.12 12:18  
Всем спасибо !
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий