Сброс параметров при компиляции

 
Эта тема уже поднималась не один раз. При перекомпиляции эксперта, параметры экспертов работающих в терминале сбрасываются в значения по умолчанию. Я, например, использую экспертов на реале, сегодня решил добавить строчку в код, и когда после перекомпиляции вернулся в терминал, у меня чуть волосы не встали от того, что увидел что все параметры сброшены в значения по умолчанию.
Уважаемые разработчики, может вы все-таки обратите внимание на эту проблему.
 
Используйте в советнике "MQL4: Глобальные переменные" , и тогда ничего страшно не будет.
 
Но ведь в тестере же после перекомпиляции параметры не сбрасываются, чтоб сбросились нужно нажать кнопку Сброс, а в реале почему-то наоборот. Любую проблему можно решить множеством способов, и глобальные переменные конечно же решают эту проблему, но все-таки хотелось бы способ попроще, не привлекающий дополнительных инструментов.
 
Наверное разработчики сделали сброс настроек эксперта по умолчанию после компиляции из-за того что пользователь может после правки кода эксперта произвести модификацию этих настроек (добавить новые параметры/убрать старые, а также поменять значения имеющихся).
Хотя эта проблема меня тоже иногда напрягает. Но в большинстве же случаев я наоборот пользуюсь преимуществами этой фичи. У меня висит 19 советников и в случае когда я хочу что-то поменять во внешних параметрах советника сразу на всех 19, то просто открываю MetaEditor, меняю внешнюю переменную и компилирую советник. И таким образом сразу же на 19 советниках происходит изменение внешнего параметра. Таким образом экономится масса времени!

Но тем не менее если разработчики внесли бы какую-нибудь опцию в свойства терминала типа "Не изменять входные параметры эксперта на чартах после компиляции", то многие пользователи были бы очень рады такой опции, которая по умолчанию (после установки программы) разумеется должна находиться в отключенном состоянии.
 
Просто сохраняйте свои параметры : Свойства Эксперта - Сохранить.
А когда что-нибудь изменили в эксперте - Свойства Эксперта - Загрузить.
 
Просто сохраняйте свои параметры : Свойства Эксперта - Сохранить.
А когда что-нибудь изменили в эксперте - Свойства Эксперта - Загрузить.

В данной ситуации подразумевается то что экперт может стоять активным на реале и Сохранить/Загрузить не будет эффективным так как эксперт может произвести какие-то торговые действия в промежуток времени между компиляцией и Загрузкой предварительно сохранённых параметров. В этом то как раз и заключается всё неудобство.
 
Поднимаю тему заново, может на нее кто-нибудь случайно обратит внимание. При перекомпиляции эксперта, параметры экспертов работающих в терминале сбрасываются в значения по умолчанию. При работе на реале, это фатально.
 
Скомпилируйте этот советник, запустите на любом графике. Затем измените в MetaEditor значения входных параметров и заново скомпилируйте. Посмотрите логи. Думаю, это даст ответ как сохранять параметры между компиляциями, например, писать значения в файл в deinit() и считывать из файла в init().


//+------------------------------------------------------------------+
//|                                                  CheckInputs.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.ru/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.ru/"

//---- input parameters
extern int       ExtParam1=4;
extern int       ExtParam2=7;
extern double    ExtParam3=25.0;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   Print("Инициализация: ExtParam1=",ExtParam1,"   ExtParam2=",ExtParam2,"   ExtParam3=",ExtParam3);   
   Print("Код причины деинициализации:",UninitializeReason());
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   Print("deinit: ExtParam1=",ExtParam1,"   ExtParam2=",ExtParam2,"   ExtParam3=",ExtParam3);   
   Print("Код причины деинициализации:",UninitializeReason());
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
Уже неоднократно говорилось: "использование значений по умолчанию может дать неожиданный эффект". Чтобы не было ничего фатального, используйте явное назначение переменных. Для этого существует функция init.

Вообще, принцип умолчания - очень вреден. Лично моё мнение.
 
Если воспользоваться идеей Rosh’а, т.е. сохранять параметры в файл, когда происходит компиляция, а потом их загружать, то возникает другая проблема, попробую описать ее. Когда эксперт прикрепляется к графику, у него в ручную задаются параметры, если провести теперь компиляцию, то эксперт продолжит правильно работать (за счет сохранения/загрузки параметров через файл), а вот в интерфейсе будут отображаться значения по умолчанию. Уже на следующий день, человек забудет, что проводил перекомпиляцию и, посмотрев параметры эксперта, будет в шоке.
 
Так ведь это защита от случайного сброса входных параметров! Вы всегда можете сознательно снять советника с графика и заново запустить с нужными параметрами. Зачем усложнять, так мы можем вернуться к байке о японской бензопиле.
Причина обращения: