Ошибки, баги, вопросы - страница 3281
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Прошу обратить внимание разработчиков на эту проблему:
Отсутствие возможности у программиста очищать память после использования функций Copy...(CopyClose, CopyTime, CopyRates ...)
Для демонстрации этого я написал простой советник с загрузкой всей истории M1 с визуализацией процесса загрузки(для корректной работы необходимо Макс. баров в окне = Unlimited)
после загрузки все внутренние массивы очищаются с помощью ArrayFree()
но, судя по объему использованного ОЗУ, внутри терминала остается полный массив M1 MqlRates структур. В данном случае (см аним. GIF) - это окого 0.5 Гб памяти (8108899 баров * 60 байт(размер структуры MqlRates) = 486 533 940 байт)

Причем эту занятую память никак не освободить и со временем она сама не очищается.
Я понимаю зачем так сделано:
Если был запрос на закачку данных, то этот массив остается в памяти на случай, если запрос повторится, чтобы не инициировать новую загрузку с сервера.
Но если программист уверен, что больше эти данные ему не нужны, было бы не плохо дать ему возможность очистить данный массив MqlRates.
Спасибо
Прошу обратить внимание разработчиков на эту проблему:
Отсутствие возможности у программиста очищать память после использования функций Copy...(CopyClose, CopyTime, CopyRates ...)
Для демонстрации этого я написал простой советник с загрузкой всей истории M1 с визуализацией процесса загрузки(для корректной работы необходимо Макс. баров в окне = Unlimited )
после загрузки все внутренние массивы очищаются с помощью ArrayFree()
но, судя по объему использованного ОЗУ, внутри терминала остается полный массив M1 MqlRates структур. В данном случае (см аним. GIF) - это окого 0.5 Гб памяти (8108899 баров * 60 байт(размер структуры MqlRates) = 486 533 940 байт)
Причем эту занятую память никак не освободить и со временем она сама не очищается.
Это очищается через 30 минут.
Я понимаю зачем так сделано:
Если был запрос на закачку данных, то этот массив остается в памяти на случай, если запрос повторится, чтобы не инициировать новую загрузку с сервера.
Но если программист уверен, что больше эти данные ему не нужны, было бы не плохо дать ему возможность очистить данный массив MqlRates.
Спасибо
Полностью согласен, было бы неплохо иметь функцию.
А можно убрать вот эту двойку в редакторе при вызове Alt+M? Если это не оценка, конечно))

build 3550Это очищается через 30 минут.
Спасибо, Аlain! Не знал. Наверное не хватило терпения :))
Пробую воспроизвести данную очистку, но пока не получается.
Причем в Task Manager видно очень постепенное уменьшение используемой памяти, но TerminalInfoInteger(TERMINAL_MEMORY_USED) все равно показывает, что размер используемой памяти не уменьшается.
Возможно TERMINAL_MEMORY_USED не работает корректно. Ведь даже если удалить чарт, и даже сам символ из "Обзора Рынка", TerminalInfoInteger(TERMINAL_MEMORY_USED) все равно показывает, что данный массив MqlRates все еще сидит в памяти.
Спасибо, Аlain! Не знал. Наверное не хватило терпения :))
Пробую воспроизвести данную очистку, но пока не получается.
Причем в Task Manager видно очень постепенное уменьшение используемой памяти, но TerminalInfoInteger(TERMINAL_MEMORY_USED) все равно показывает, что размер используемой памяти не уменьшается.
Возможно TERMINAL_MEMORY_USED не работает корректно. Ведь даже если удалить чарт, и даже сам символ из "Обзора Рынка", TerminalInfoInteger(TERMINAL_MEMORY_USED) все равно показывает, что данный массив MqlRates все еще сидит в памяти.
Да, похоже на то, что память, действительно, очищается через полчаса( исходя из наблюдения за Task Manager), но функция TerminalInfoInteger(TERMINAL_MEMORY_USED) не показывает этой очистки.
Хороший вопрос.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Как преобразовать вектор или матрицу в двойной массив?
chenyu468 , 2023.02.11 05:37
Я хочу рассчитать данные через матрицу и преобразовать один вектор в массив для отображения индикатора.
И обнаруживается, что в матрице или векторе нет функции выходного массива. элемент "row" или "col" только выходной вектор.
https://www.mql5.com/ru/docs/basis/types/matrix_vector
Нужно ли получать все элементы через цикл в массив?
Хороший вопрос.
Да, тоже заметил, что нет штатного способа скопировать из вектора в массив,
как только через цикл.
Здравствуйте, уважаемые разработчики!
Вопрос: когда в MQL5 появится штатная функция MarketClose()?
Можно, конечно, начать "долбить" торговый сервер постоянными запросами на установку отложенного ордера с каким-нибудь огромным отступом от текущей цены, а после его установки, проверять код возврата результата и тут же удалять. Есть ещё более экзотические варианты. Но это не камильфо!!!
И всё-таки, когда?
С уважением, Владимир.
Здравствуйте, уважаемые разработчики!
Вопрос: когда в MQL5 появится штатная функция MarketClose() ?
Можно, конечно, начать "долбить" торговый сервер запросами на установку отложенного ордера с каким-нибудь огромным отступом от текущей цены и после его установки, тут же удалять. Есть ещё более экзотические варианты. Но это не камильфо!!!
И всё-таки, когда?
С уважением, Владимир.