Ошибки, баги, вопросы - страница 1492

 
Maxim Khrolenko:
А глобальные (не внешние) нет и это нехорошо.

Почему нехорошо? Явно сказано инициализация глобальных переменных производится однократно при загрузке программы.

Хотите другого поведения, инициализируйте как хотите в OnInit

 
Yuri Evseenkov:
Хорошо бы это отразить в документации.   
Да. Отразим
 
zaskok3:
В MQL4++ без extern не могу обойтись, когда нужно поменять входные параметры программно. Например, при конвертации обычного индикатора в интерактивный приходится input заменять на extern. Компилятор считает input-переменные, как const, и ругается при попытке их изменения. С extern таких проблем не возникает.

Используйте "дублёров" входных параметров

У нас на эту тему пример  в пятёрке есть MQL5\Indicators\Examples\ADX.mq5

//--- input parameters
input int InpPeriodADX=14; // Period
//---- buffers
double    ExtADXBuffer[];
double    ExtPDIBuffer[];
double    ExtNDIBuffer[];
double    ExtPDBuffer[];
double    ExtNDBuffer[];
double    ExtTmpBuffer[];
//--- global variables
int       ExtADXPeriod;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- check for input parameters
   if(InpPeriodADX>=100 || InpPeriodADX<=0)
     {
      ExtADXPeriod=14;
      printf("Incorrect value for input variable Period_ADX=%d. Indicator will use value=%d for calculations.",InpPeriodADX,ExtADXPeriod);
     }
   else ExtADXPeriod=InpPeriodADX;
 
Товарищи, у кого-нибудь появляется регулярно "Internal compiler error" при компиляции? Без видимых причин, в случае повторной компиляции - зависание, в случае закрытия редактора, открытии заново (с теми же вкладками, с тем же кодом) - компиляция чаще всего проходит нормально. При этом в коде ничего не меняется! Но иногда эта ошибка возникает несколько раз подряд и первая перезагрузка редактора не помогает. Пока в итоге перезагрузок все удавалось скомпилировать. Но я боюсь что рано или поздно это перестанет получаться. Хотелось бы найти ещё кого-то, кто сталкивался с похожими ошибками, чтобы сообща предоставить сервисдеску данные об условиях их возникновения.
 
Slawa:

Используйте "дублёров" входных параметров

У нас на эту тему пример  в пятёрке есть MQL5\Indicators\Examples\ADX.mq5

Сейча для конвертации индикатора в интерактивынй вариант требуется добавить только одну строчку в исходник. Если делать дублеров, то помимо доп. строчки создания дублера, потребутеся еще по всему тексту делать замену. Зачем этот геморрой, когда можно элементарно поменять одну строчку.

Что мешает убрать const-восприятие input переменных на этапе компиляции?

 
zaskok3:

Сейча для конвертации индикатора в интерактивынй вариант требуется добавить только одну строчку в исходник. Если делать дублеров, то помимо доп. строчки создания дублера, потребутеся еще по всему тексту делать замену. Зачем этот геморрой, когда можно элементарно поменять одну строчку.

Что мешает убрать const-восприятие input переменных на этапе компиляции?

Редактирование текста. "Ctrl" + "H" - поиск и замена. Ничего сложного. Просто не ленитесь.
 
zaskok3:

Что мешает убрать const-восприятие input переменных на этапе компиляции?

Глобальное хранилище индикаторов в исторической базе MT5. Для них входные параметры являются ключевыми. При изменении входных параметров индикатор со старыми параметрами уничтожается, и этот же индикатор с изменёнными параметрами заново создаётся.

То есть, ограничение чисто архитектурное

В четвёрке мы могли бы убрать константность с инпутов, но тогда возникает несовместимость нового MQL4 и MQL5. Поэтому мы этого делать не будем. Продолжайте использовать extern

 

Slawa:

То есть, ограничение чисто архитектурное

Жаль, что архитектура столь закостенела, что нет возможностей даже простой гибкости. Получается, интерактивность на MQL5 надо будет делать через костыль. Спрашивается, где преимущество тогда, если язык ограничивает возможности...
 
pako:
Окно отвязать от терминала
как?
 
Joo Zepper:
как?
Где то на форуме было, DLLка
Причина обращения: