Новая версия платформы MetaTrader 5 build 5120: улучшения и исправления - страница 8
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
и с чем именно будут разбираться MQ?
Эту фразу мою читали:
в массиве появляются значения тогда, когда их не должно быть, сразу после его объявления
?
Код запускали и меняли таймфреймы? Может уже пора попробовать?
при увеличении размера массива
Причём здесь вообще увеличение размера массива?
почему вы думаете, что при следующем вызове функции вы получите под массив ровно тот-же кусок памяти?
А я и не думаю так. Мне всё равно какой кусок памяти будет отдан массиву.
Но мне не всё равно когда после объявления массива и после ArrayResize в массиве присутствуют какие-то значения.
в массиве появляются значения тогда, когда их не должно быть, сразу после его объявления
Элементы массива всегда содержат какие-то значения, включая и нулевые варианты.
Это не старый (without #property strict) MQL4, когда исходно элементы были сразу проинициализированы нулем.
Элементы массива всегда содержат какие-то значения, включая и нулевые варианты.
По-мойму нулевые значения элементы массива содержат только после первого объявления массива после запуска терминала. Я так увидел. После первого объявления даже после ArrayFree могут быть ненулевые.
Каждый раз после объявления массива и ArrayResize теперь использовать ArrayInitialize что ли?
Каждый раз после объявления массива и ArrayResize теперь использовать ArrayInitialize что ли?
В MQL5 так было всегда. Инициализация массивов и переменных полностью на пользователе.
У меня (b5125) аналогичная ситуация.
Ситуация исправилась после подключения к другому торговому серверу и обратно.
На скрине видно, что не только не строятся бары, но и Bid/Ask-линии на чарте не соответствуют (маркапа нет) Обзору рынка.
Добрый день. После обновления до 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 диска, но как-то дать доступ к одной копии истории в оперативке, всем агентам (или по 1 копии для 8 агентов или по 1й копии на 1 канал в оперативке - тогда замедление тоже будет минимальным). Наподобие Sare read для файлав.Предложение: оставить загрузку истории как раньше на диск, но либо предлагать устанавливать всем пользователям RAM-диск, либо сделать его установку автоматической с установкой терминала. После этого историю для оптимизации можно хранить на этом диске. У файловых операций есть ShareRead- т.е. можно держать 1 копию истории на RAM диске и всеми агентами читать её из одного файла (или использовать по 1 копии истории например для 8 агентов). Если 72 агента будут читать из одного файла в RAM диске, замедление тоже будет, но за счет того что это RAM, то замедление будет не такое, как в случае с SSD.
Возможно это будет оптимально и по скорости и по потреблению памяти/диска.
ArrayFree правильно работает? Билд 5125, код в эксперте:
При запуске терминала всё верно:
При смене ТФ значение на максимальном индексе до for сохранилось:
При смене ТФ может быть 0 и после сразу 200 снова:
Может появиться непонятно какое значение (график GBPUSD, похоже на котировку):
Первые 2 вывода смена ТФ, а после перекомпиляция эксперта:
Что нет так? Почему не 0 значение всегда до запуска цикла for?
Тут нет никакой ошибки:
ArrayResize не зануляет память, так что вы получили неважно какие данные в буфере. Ее инициализация полностью на вас.
Поэтому ошибки нет.
При оптимизации объемный график стал очень не удобный для анализа. В журнале появилось сообщение Debug cannot create direct 3d device with error 0x8876086C.
Какая у вас операционка, графическая карта и какая дата драйверов под карту?
Рекомендую поставить все апдейты на операционку и обязательно обновить драйверы карты.
Локальные данные (объявлены внутри функции), размещены в куче, память под которые необходимо освобождать с помощью ArrayFree при выходе из функции... MQ, можно, пожалуйста, пример, демонстрирующий такую необходимость?
[edit] То есть, речь идет об объявленном локально динамическом массиве. Разве нет противоречия с цитатой ниже?
У динамических массивов в MQL5 автоматически срабатывает деструктор.
Так что такого случая не нужно явно вызывать ArrayFree:
У меня (b5125) аналогичная ситуация.
Ситуация исправилась после подключения к другому торговому серверу и обратно.
На скрине видно, что не только не строятся бары, но и Bid/Ask-линии на чарте не соответствуют (маркапа нет) Обзору рынка.
На каком торговом сервере это произошло?