Новая версия платформы MetaTrader 5 build 2690: Улучшения в MetaEditor - страница 12

 
fxsaber:

Окно выполненной Оптимизации не закрывается.


На скрине слева - незакрывающееся окно после Оптимизации. Справа - opt-файл этой же Оптимизации.

Странная белая область слева. Возможно, она является причиной.

Подтверждаю. Несколько последних билдов. Обновление графика останаливается с приближением к правому краю, после чего окно нельзя закрыть. Такое бывает часто. Особенно, возможно, после того, как переключишь вид графика (Результаты/1D/2D/3D).

Иногда бывает, при повторной оптимизации предыдущие результаты отрисуются, а текущая вообще не отображается в окне.

 

Последняя релизная версия 2690.

Следующий скрипт выводит 3.

struct MY_STRUCT
{
  string Array[];
};

void OnStart()
{
  MY_STRUCT a1,a2;
  ArrayResize(a1.Array,3);
  ArrayResize(a2.Array,1);
  a1=a2;
  Print((string)ArraySize(a1.Array));
}

Это баг или фича?

 
traveller00:

Последняя релизная версия 2690.

Следующий скрипт выводит 3.

Это баг или фича?

Оператор присвоения работает только для простых структур.

 
fxsaber:

Оператор присвоения работает только для простых структур.

Если оно реально так, неплохо бы ругаться тогда. Если не ошибкой, хотя бы варнингом. А то собралось абсолютно нормально, а работает неожиданно.

Тогда вопрос, а как тогда поменять местами 2 элемента массива, где элементом может быть непростая структура?
 
traveller00:

Если оно реально так, неплохо бы ругаться тогда. Если не ошибкой, хотя бы варнингом. А то собралось абсолютно нормально, а работает неожиданно.

Тогда вопрос, а как тогда поменять местами 2 элемента массива, где элементом может быть непростая структура?

Оператор прописывать.

 
traveller00:

Последняя релизная версия 2690.

Следующий скрипт выводит 3.

Это баг или фича?

вот разбирался с копированием структур https://www.mql5.com/ru/forum/85652/page46#comment_15990662

т.е. оператор копирования придется писать самому, примерно так можно:

struct MY_STRUCT
{
   string Array[];
   void operator=(const MY_STRUCT &value) { ArrayResize(this.Array,ArraySize(value.Array)); ArrayCopy(this.Array,value.Array);}
};
//+------------------------------------------------------------------+
void OnStart()
{
   MY_STRUCT a1, a2;
   ArrayResize(a1.Array, 3);
   ArrayResize(a2.Array, 1);
   a1 = a2;
   Print((string)ArraySize(a1.Array));
}
 

Появилась проблема при оптимизации - не хватает памяти для генерации тиков.

Диспетчер задач Windows в процессе оптимизации показывает, что после каждой оптимизационной итерации доступной памяти становится всё меньше.

Затем процесс оптимизации "разваливается" с выдачей в журнал следующих сообщений.

Память

Грешил на советник - с другими советниками та же проблема (ранее с ними проблем не было).

Переустановка терминала не помогает.

На терминале другого брокера та же проблема.

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

Пожалуйста, обратите внимание на эту проблему.

 
traveller00:

Последняя релизная версия 2690.

Следующий скрипт выводит 3.

Это баг или фича?

Особенность работы функции ArrayCopy, которая вызывается в неявном операторе копирования - функция не уменьшает размер массива назначения.
Фактически функция работает как перезапись части элементов внутри массива назначения.

Мы подумаем над тем, чтобы изменить её поведение для оператора копирования.

Документация по MQL5: Операции с массивами / ArrayCopy
Документация по MQL5: Операции с массивами / ArrayCopy
  • www.mql5.com
//| Закрашивание свечей не экстремумов                               | //| Custom indicator initialization function                         | //| Custom indicator iteration function                              | //| Является ли текущий элемент массива локальным максимумом         |...
 
Спасибо за ответы, прописал для своих структур оператор. Но если структура в каком-то общем другом файле, типа используешь чужой код, то будет неудобка.
 
Edgar Akhmadeev:

Подтверждаю. Несколько последних билдов. Обновление графика останаливается с приближением к правому краю, после чего окно нельзя закрыть.

Даже если не найдут причину, было бы хорошо, чтобы при запуске новой Оптимизации со всех других окон снималась блокировка.