Ошибка в билде 1490

 

Если эксперт загружен на чарте, то при попытке изменения 

"Входных параметров" эксперта, изменения не вступают в силу,

после нажатия кнопки "ОК" 

 
prostotrader:

Если эксперт загружен на чарте, то при попытке изменения 

"Входных параметров" эксперта, изменения не вступают в силу,

после нажатия кнопки "ОК" 

это скорее эксперт криво написан чем ошибка в терминале - при переинициализации не происходит сброса некоторых переменных объявленных до "инита" - тут нужно явно прописывать их обновление
 
prostotrader:

Если эксперт загружен на чарте, то при попытке изменения 

"Входных параметров" эксперта, изменения не вступают в силу,

после нажатия кнопки "ОК" 

Микалас, код в студию!
 
Dennis Kirichenko:
  код в студию! 
input int i = 5;
void OnInit() { Print( "i=", i ); }
void OnDeinit( const int reason ) { Print( "ii=", i ); }

Парадокс, но так всегда было

Последовательность действий:

  1. Присоединить эксперта к графику  + "OK"                 -> результат: i=5
  2. На графике открыть свойства, изменить i на 10 + "OK" -> результат: i=5
  3. Перекомпилировать в редакторе                             -> результат: i=10
 
A100:
input int i = 5;
void OnInit() { Print( "i=", i ); }
void OnDeinit( const int reason ) { Print( "i=", i ); }

Парадокс, но так всегда было

Что именно было? Нормально ведь работает при изменении значения с 5 на 10:

2016.12.05 11:31:04.415 Test (USDJPY,M15) i=5

2016.12.05 11:31:14.433 Test (USDJPY,M15) i=5

2016.12.05 11:31:14.449 Test (USDJPY,M15) i=10

2016.12.05 11:31:20.906 Test (USDJPY,M15) i=10

 
Ihor Herasko:

Что именно было? Нормально ведь работает при изменении значения с 5 на 10:

А последовательность действий какая?
 
A100:
А последовательность действий какая?

  1. Запустить эксперт на любом чарте со значениями настроечных параметров, установленных по умолчанию. Получаем i = 5.
  2. Изменить значение параметра i в диалоге свойств советника на 10. Получаем от deinit i = 5 и от init i = 10.

Да, так работал всегда и это правильно. Непонятно в чем же заключается проблема?

 
Ihor Herasko:

Да, так работал всегда и это правильно. Непонятно в чем же заключается проблема?

Обновитесь до build 1490

2016.12.05 14:04:57.119 i=5
2016.12.05 14:05:10.992 ii=5
2016.12.05 14:05:11.108 i=5
2016.12.05 14:05:24.087 ii=5
 

 
Aleksey Semenov:
это скорее эксперт криво написан чем ошибка в терминале - при переинициализации не происходит сброса некоторых переменных объявленных до "инита" - тут нужно явно прописывать их обновление

Конечно криво, вот только 3 года на всех предыдущих билдах всё работало а в 1490 нет.

Добавлено

ОБНОВЛЯЕМСЯ до 1490

 Запускаем советника

//+------------------------------------------------------------------+
//|                                                   TestInputs.mq5 |
//|                                      Copyright 2016 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016 prostotrader"
#property link      "https://www.mql5.com"
#property version   "1.00"
//
input long TestValue = 5;// Test value
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if( !ObjectCreate(ChartID(), "label_1", OBJ_LABEL, 0, 0, 0 ) )
  {
    MessageBox( "Label not created!", "Error", MB_OK | MB_ICONHAND );
    return(INIT_FAILED);
  }
  else
  {
    ObjectSetInteger(ChartID(), "label_1", OBJPROP_CORNER, CORNER_LEFT_UPPER );
    ObjectSetInteger(ChartID(), "label_1", OBJPROP_ANCHOR, ANCHOR_LEFT_UPPER );
    ObjectSetInteger(ChartID(), "label_1", OBJPROP_XDISTANCE, 5 );            
    ObjectSetInteger(ChartID(), "label_1", OBJPROP_YDISTANCE, 15 );
    ObjectSetInteger(ChartID(), "label_1", OBJPROP_COLOR, clrWhite );
    ObjectSetInteger(ChartID(), "label_1",OBJPROP_BACK, false );
    ObjectSetString(ChartID(), "label_1", OBJPROP_TEXT, "Test value = "+string(TestValue) );
    ChartRedraw(ChartID());
  }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   ObjectDelete(ChartID(), "label_1" );
  }

//+------------------------------------------------------------------+
void OnTick()
  {
   ObjectSetString(ChartID(), "label_1", OBJPROP_TEXT, "Test value = "+string(TestValue) );
   ChartRedraw(ChartID());
  }


 

 Смотрим значение

 

Нажимаем "ОК"

Смотрим

 

Нажимаем "Свойства TestInputs" 

Изменяем значение 5 на 10

 

Нажимаем "ОК"

ВИДИМ

 

 
A100:
Обновитесь до build 1490

Ага. У меня с утра был еще не обновленный МТ. Обновился. Действительно, изменения значений настроечных параметров, произведенные в окне свойств эксперта, не принимаются. При следующем открытии этого же окна получаем старые параметры.

Непонятно, почему при компиляции все ОК. 

 
Ihor Herasko:

Ага. У меня с утра был еще не обновленный МТ. Обновился. Действительно, изменения значений настроечных параметров, произведенные в окне свойств эксперта, не принимаются. При следующем открытии этого же окна получаем старые параметры.

Мое знакомство с input пришлось на тот build где была точно такая же ошибка (и было это не очень давно). Я полагал что так задумано (нельзя поменять первоначальное значение) и потому далее не использовал. А тут выясняется что в дальнейшем это поправили. В связи с чем обращаю внимание разработчиков что это не единичный случай и просил бы добавить в обязательные - ручные тесты по input.