Новая версия платформы MetaTrader 5 build 2007: Экономический календарь, MQL5-программы в виде сервисов - страница 23

 
Просьба починить таймер в Тестере, сломали недавно. Воспроизведение проблемы
// ~596.5 часов - < 25 суток.
input int timer = 2147483; // > 2147483 - таймер срабатывать перестанет.

void OnInit() { Print(EventSetTimer(timer)); } // Установили таймер - всегда true.

void OnTimer() { Print(__FUNCTION__); } // Не срабатывает при timer > 2147483.

Воспроизводится в любом режиме Тестера на интервале больше величины заданного таймера.


Такой большой таймер нужен, например, для автооптимизации параметров ТС каждый месяц - ставлю таймер на месяц и в OnTimer произвожу переоптимизацию ТС.

Еще месяц назад таймер работал корректно.

 

Возможно ли ParameterGetRange сделать доступным в OnInit? Т.е. не только во Frame-режиме.


Идея использовать параметры диапазонов входных параметров Тестера в одиночном прогоне. Нужно для автооптимизации.

 
Причина ошибки понятна
template <typename T>
void f( T, T = 0 ) {}

void OnStart()
{
  double d = 0;
  
  f(d, 0); // template parameter ambiguous, could be 'double' or 'int'
  f(d, 0.0); // OK
}

Обязательно ее выводить, когда такая ситуация?
 
Версия: 5.00 build 2007 25 февраля 2019 используется.
Ниже предполагается явление из сборки 2005 года.

Во время события OnDeinit выполните обработку цикла и выполните метод ObjectDelete.
Когда цикл превышает 2,5 секунды, событие OnDeint заканчивается в середине,
Терминальные задачи останутся позади.
Поэтому, даже если вы попытаетесь запустить следующий терминал, он не сможет запуститься.
Кроме того, в той же ситуации, что и выше, даже если вы откроете другой график с шаблоном, задание терминала останется
Я создал индикатор для подтверждения.
Поскольку мы прилагаем исходный код, спасибо за ваше внимание.

Это признание того, что это фатальная ошибка.

Файлы:
 
Yutaka Okamoto:
Версия: 5.00 build 2007 25 февраля 2019 используется.
Ниже предполагается явление из сборки 2005 года.

Во время события OnDeinit выполните обработку цикла и выполните метод ObjectDelete.
Когда цикл превышает 2,5 секунды, событие OnDeint заканчивается в середине,
Терминальные задачи останутся позади.
Поэтому, даже если вы попытаетесь запустить следующий терминал, он не сможет запуститься.
Кроме того, в той же ситуации, что и выше, даже если вы откроете другой график с шаблоном, задание терминала останется
Я создал индикатор для подтверждения.
Поскольку мы прилагаем исходный код, спасибо за ваше внимание.

Это признание того, что это фатальная ошибка.

Ошибка уже исправлена. Ждите обновления.

 
Получаю такое предупреждение компилятора
the size of local variables is too large (more than 512kb)

что плохого при использовании локального статик-массива?

 
Andrey Khatimlianskii:

Ошибка уже исправлена. Ждите обновления.

А сколько ждать разработчики не уточняли?

 

Люди кто подскажет почему не загружается МТ-4 Вроде-бы все загрузилось но не активируется кнопка "готово"

 
Не работает
#undef __MQL5__
 
fxsaber:
Получаю такое предупреждение компилятора

что плохого при использовании локального статик-массива?

Все локальные переменные распределяются на стеке.

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

Размер стека MQL-программы заранее ограничен, но не может превышать 64 мегабайта. Если для локальных переменных функции необходимо более 4 килобайт, то перед вызовом этой функции вызывается специальная системная функция _chkstk, которая обеспечивает подгрузку необходимого количества страниц физической памяти в адресное пространство процесса. Вы как любитель замерять время попробуйте измерить время вызова функции, имеющей менее 4к локальных переменных и более 4к (более 8к, более 16к и тд). Узнаете много нового.

Причина обращения: