Новая версия платформы MetaTrader 5 build 4755: общие улучшения - страница 19
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
В мобильном МТ5 продолжают исчезать символы из списка при открытии приложения. Уже где-то год это происходит.
Воспроизвести проблему я не могу, происходит рандомно. Две недели назад осталось 2 символа из 30 в списке, сегодня осталось 6 символов из примерно 20 штук.
Хочу напомнить разработчикам MetaTrader, что проблема масштабирования индикаторов в отдельном окне до сих пор не решена и мешает использованию некоторых распространенных индикаторов, таких как OBV, A/D и некоторых других.
Это также затрагивает некоторые пользовательские индикаторы.
Похоже, что проблема возникает при работе с диапазоном с отрицательным значением.
Раньше вызов MQLInfoInteger(MQL_MEMORY_USED) выдавал адекватную оценку, то есть взяв разность между двумя показателями до и после выделения памяти, например, массива в 10 Мб, я видел, что MQL_MEMORY_USED увеличился на 10. Сейчас складывается впечатление, что оптимизатор компилятора переносит операторы выделения каким-то выгодным для себя образом, так что замеры более не позволяют оценивать расход памяти точно по месту в коде. Например:
Если брать по отдельности, каждый массив по 1 Мб (простого типа), но здесь производится несколько последовательных выделений, и как будто выделение происходит заранее.
Это упрощенный пример. На практике структуры данных посложнее и анализировать их эффективность через данное свойство не получается.
Тестер бывает заливает панель с кнопками цветом, сбоит отрисовка. Похоже на то что было раньше, но уже не так сильно.
1) https://www.mql5.com/ru/forum/478178#comment_55386343
2) https://www.mql5.com/ru/forum/478178#comment_55385467
Вариант номер 2:
Вариант номер 3:
Раньше вызов MQLInfoInteger(MQL_MEMORY_USED) выдавал адекватную оценку, то есть взяв разность между двумя показателями до и после выделения памяти, например, массива в 10 Мб, я видел, что MQL_MEMORY_USED увеличился на 10. Сейчас складывается впечатление, что оптимизатор компилятора переносит операторы выделения каким-то выгодным для себя образом, так что замеры более не позволяют оценивать расход памяти точно по месту в коде. Например:
Если брать по отдельности, каждый массив по 1 Мб (простого типа), но здесь производится несколько последовательных выделений, и как будто выделение происходит заранее.
Это упрощенный пример. На практике структуры данных посложнее и анализировать их эффективность через данное свойство не получается.
Опубликуйте код для воспроизведения.
Я проверил своим старым кодом, у меня работает нормально.
Да, там нет ArrayResize(). Но раз вы не удосужились написать код для воспроизведения с ArrayResize, то я тем более не хочу тратить на это время.
Опубликуйте код для воспроизведения.
Я проверил своим старым кодом, у меня работает нормально.
Да, там нет ArrayResize(). Но раз вы не удосужились написать код для воспроизведения с ArrayResize, то я тем более не хочу тратить на это время.
Если б было время на выпиливание из общей программы некоего куска, в котором это воспроизводится и при каких условиях, я б так сделал. Поэтому для начала смежный (вероятно связанный) вопрос по памяти - подскажите, почему не совпадает оценочный размер памяти и то, что яко-бы выделяется согласно MQL_MEMORY_USED.
Поэтому для начала смежный (вероятно связанный) вопрос по памяти - подскажите, почему не совпадает оценочный размер памяти и то, что яко-бы выделяется согласно MQL_MEMORY_USED.
Я не большой специалист по памяти и могу ошибаться. На сколько я понимаю, тест ниже показал, что выделено памяти под 2.6 миллиона символов. Если предположить, что один символ занимает 2 байта, то под символы нужно 5.2 мегабайта
Я не большой специалист по памяти и могу ошибаться. На сколько я понимаю, тест ниже показал, что выделено памяти под 2.6 миллиона символов. Если предположить, что один символ занимает 2 байта, то под символы нужно 5.2 мегабайта
Значит здесь MQL5 по тихому распределяет под каждую строку 260 символов, хотя его об этом не просят (просят 10+1 для терминального нуля).
Когда-то замечал, что MQL5 выделяет под минимальную строку те же 260 символов.
Также, замечал, что явное назначение размера буфера StringReserve() для строковой переменной действует только до присвоения этой переменной значения (или превышения строкой этого размера).
Т.е., писать так
смысла нет, размер буфера будет сброшен в дефолт.
Размер буфера не сбрасывается при добавлении к строке, так что, вероятно, с целью минимизации перераспределений памяти при многократном использовании строковой переменной стоит писать так:
У меня для EURUSD время последней котировки SYMBOL_TIME 2083 год и так далее, сервер ICMarketsSC-Demo.
А время открытия последнего бара правильное 2025.02.24 11:00. Как такое может быть?