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

 
Vladislav Boyko #:
и с чем именно будут разбираться MQ?

Эту фразу мою читали:

Andrei Iakovlev #:
в массиве появляются значения тогда, когда их не должно быть, сразу после его объявления

?

Код запускали и меняли таймфреймы? Может уже пора попробовать?

Vladislav Boyko #:
при увеличении размера массива

Причём здесь вообще увеличение размера массива?

Vladislav Boyko #:
почему вы думаете, что при следующем вызове функции вы получите под массив ровно тот-же кусок памяти?

А я и не думаю так. Мне всё равно какой кусок памяти будет отдан массиву.
Но мне не всё равно когда после объявления массива и после ArrayResize в массиве присутствуют какие-то значения.

 
Andrei Iakovlev #:

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

Элементы массива всегда содержат какие-то значения, включая и нулевые варианты.

Это не старый (without #property strict) MQL4, когда исходно элементы были сразу проинициализированы нулем.

 
fxsaber #:
Элементы массива всегда содержат какие-то значения, включая и нулевые варианты.

По-мойму нулевые значения элементы массива содержат только после первого объявления массива после запуска терминала. Я так увидел. После первого объявления даже после ArrayFree могут быть ненулевые.

Каждый раз после объявления массива и ArrayResize теперь использовать ArrayInitialize что ли?

 
Andrei Iakovlev #:

Каждый раз после объявления массива и ArrayResize теперь использовать ArrayInitialize что ли?

В MQL5 так было всегда. Инициализация массивов и переменных полностью на пользователе.

 
Sergei Samokhin #:
Последняя цена явно оторвалась от графика. Свечу последнюю не показывает.

У меня (b5125) аналогичная ситуация.


Ситуация исправилась после подключения к другому торговому серверу и обратно.


На скрине видно, что не только не строятся бары, но и Bid/Ask-линии на чарте не соответствуют (маркапа нет) Обзору рынка.

 
Evgeny Vlasov #:
Добрый день. После обновления до 5120 перестала работать оптимизация, раньше история записывалась на диск (8 Тб), распределяясь по агентам и после записи запускалось многопоточная оптимизация, а сейчас происходит 100%-ое заполнение оперативки и файла подкачки и выходит запись - не хватает памяти. При этом оперативки 128 Гб, а файл подкачки еще на 250 Гб. Агент тестирования при настройке сдачи в аренду мощностей перестал видеть ядра (потоки) их всего 72, а показывает то 4 то 32... Я даже систему переустановил, но не помогло. Работает все кроме оптимизации.

Предложение к разработчикам насчет этой проблемы (у меня этого нет, оптимизацией сейчас не занимаюсь, пока кодирую новую идею, но скоро понадобится и тоже комп с 72 агентами и 192Гб опертивки, т.е. скоро проблема может появиться и у меня.)
Итак, предполагаю, что ради ускорения тестирования тиковая и баровая история загружается в оперативку каждому агенту, своя копия. Вот в примере выше для 72 агентов не хватило памяти. И с англ форума https://www.mql5.com/ru/forum/488793/page5#comment_57047860 пишут, что не хватило памяти при тесте по 28 инструментам.

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

Последний год пользуюсь RAM диском, работа с ним быстрее чем с SSD и диск не "пилит".

Предложение: оставить загрузку истории как раньше на диск, но либо предлагать устанавливать всем пользователям RAM-диск, либо сделать его установку автоматической с установкой терминала. После этого историю для оптимизации можно хранить на этом диске. У файловых операций есть ShareRead- т.е. можно держать 1 копию истории на RAM диске и всеми агентами читать её из одного файла (или использовать по 1 копии истории например для  8 агентов). Если 72 агента будут читать из одного файла в RAM диске, замедление тоже будет, но за счет того что это RAM, то замедление будет не такое, как в случае с SSD.
Возможно это будет оптимально и по скорости и по потреблению памяти/диска.

Либо оставить как сейчас без RAM диска, но как-то дать доступ к одной копии истории в оперативке, всем агентам (или по 1 копии для 8 агентов или по 1й копии на 1 канал в оперативке - тогда замедление тоже будет минимальным). Наподобие Sare read для файлав.
MetaTrader 5 Platform update build 5120: Improvements and fixes - Update for the Eurozone Strategy Tester
MetaTrader 5 Platform update build 5120: Improvements and fixes - Update for the Eurozone Strategy Tester
  • 2025.06.17
  • Andriy Moraru
  • www.mql5.com
Please bring back the timeframes tabs in tester. The strategy tester in this new build is running at just a third of the speed of the previous version. Bottom line something on the strategy tester has changed massively increased cpu-ram bandwidth usage, which is massively slowing down testing to the point of being near unusable for a currency strength based ea looking at 28 currency pairs
 
Andrei Iakovlev #:

ArrayFree правильно работает? Билд 5125, код в эксперте:

При запуске терминала всё верно:

При смене ТФ значение на максимальном индексе до for сохранилось:

Даже после последующей перекомпиляции эксперта значение на максимальном индексе до for сохраняется:

При смене ТФ может быть 0 и после сразу 200 снова:

Может появиться непонятно какое значение (график GBPUSD, похоже на котировку):

Первые 2 вывода смена ТФ, а после перекомпиляция эксперта:

Что нет так? Почему не 0 значение всегда до запуска цикла for?

Тут нет никакой ошибки:

  1. Вы используете динамический массив
  2. Он один и пример больше не занимается другими выделениями
  3. Пул блоков памяти конкретного типа данных фактическ иимеет один выделенный блок
  4. Вы его заполнили, а потом освободили. Он освободился и его блок остался первым в пуле переиспользования данных
  5. Следующий запуск/перезапуск/переинициализация в рамках теста, где выделяется только один блок, использует первый свободный блок, который был заполнен в прошлый раз
  6. Последующий запуск просто получил ту же самую память, которую использовал предыдущий запуск
  7. Память в пуле принудительно не очищается и не портится
  8. Поэтому вы получили для того же самого одиночного объекта тот же самый ранее использованный блок памяти со старыми данными

ArrayResize не зануляет память, так что вы получили неважно какие данные в буфере. Ее инициализация полностью на вас.

Поэтому ошибки нет.

 
Анатолий Иванников #:
При оптимизации объемный график стал очень не удобный для анализа. В журнале появилось сообщение Debug    cannot create direct 3d device with error 0x8876086C.

Какая у вас операционка, графическая карта и какая дата драйверов под карту?

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

 
Vladislav Boyko #:

Локальные данные (объявлены внутри функции), размещены в куче, память под которые необходимо освобождать с помощью ArrayFree при выходе из функции... MQ, можно, пожалуйста, пример, демонстрирующий такую необходимость?

[edit] То есть, речь идет об объявленном локально динамическом массиве. Разве нет противоречия с цитатой ниже?

У динамических массивов в MQL5 автоматически срабатывает деструктор.

Так что такого случая не нужно явно вызывать ArrayFree:

void ArrayTest()
  {
   double values[];
   ArrayResize(values,100);
//   ArrayFree(values);
  }
 
fxsaber #:

У меня (b5125) аналогичная ситуация.


Ситуация исправилась после подключения к другому торговому серверу и обратно.


На скрине видно, что не только не строятся бары, но и Bid/Ask-линии на чарте не соответствуют (маркапа нет) Обзору рынка.

На каком торговом сервере это произошло?