Ошибки, баги, вопросы - страница 3281

 

Прошу обратить внимание разработчиков на эту проблему:
Отсутствие возможности у программиста очищать память после использования функций Copy...(CopyClose, CopyTime, CopyRates ...)

Для демонстрации этого я написал простой советник с загрузкой всей истории M1 с визуализацией процесса загрузки(для корректной работы необходимо Макс. баров в окне = Unlimited)

после загрузки все внутренние массивы очищаются с помощью ArrayFree()

но, судя по объему использованного ОЗУ, внутри терминала остается полный массив M1 MqlRates структур. В данном случае (см аним. GIF) -  это окого 0.5 Гб памяти (8108899 баров * 60 байт(размер структуры  MqlRates) = 486 533 940 байт)

Причем эту занятую память никак не освободить и со временем она сама не очищается. 
Я понимаю зачем так сделано:
Если был запрос на закачку данных, то этот массив остается в памяти на случай, если запрос повторится, чтобы не инициировать новую загрузку с сервера. 
Но если программист уверен, что больше эти данные ему не нужны, было бы не плохо дать ему возможность очистить данный массив  MqlRates. 
Спасибо

Файлы:
 
Nikolai Semko # :

Прошу обратить внимание разработчиков на эту проблему:
Отсутствие возможности у программиста очищать память после использования функций Copy...(CopyClose, CopyTime, CopyRates ...)

Для демонстрации этого я написал простой советник с загрузкой всей истории M1 с визуализацией процесса загрузки(для корректной работы необходимо Макс. баров в окне = Unlimited )

после загрузки все внутренние массивы очищаются с помощью ArrayFree()

но, судя по объему использованного ОЗУ, внутри терминала остается полный массив M1 MqlRates структур. В данном случае (см аним. GIF) -  это окого 0.5 Гб памяти (8108899 баров * 60 байт(размер структуры  MqlRates) =  486 533 940 байт)

Причем эту занятую память никак не освободить и со временем она сама не очищается. 

Это очищается через 30 минут.

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

Полностью согласен, было бы неплохо иметь функцию.

 

А можно убрать вот эту двойку в редакторе при вызове Alt+M? Если это не оценка, конечно))

Опять двойка!

build 3550
 
Alain Verleyen #:

Это очищается через 30 минут.

Спасибо, Аlain! Не знал. Наверное не хватило терпения :))

Пробую воспроизвести данную очистку, но пока не получается. 
Причем в Task Manager видно очень постепенное уменьшение используемой памяти, но TerminalInfoInteger(TERMINAL_MEMORY_USED) все равно показывает, что размер используемой памяти не уменьшается. 
Возможно  TERMINAL_MEMORY_USED не работает корректно. Ведь даже если удалить чарт, и даже сам символ из "Обзора Рынка",  TerminalInfoInteger(TERMINAL_MEMORY_USED) все равно показывает, что данный массив  MqlRates все еще сидит в памяти.


 
Nikolai Semko #:

Спасибо, Аlain! Не знал. Наверное не хватило терпения :))

Пробую воспроизвести данную очистку, но пока не получается. 
Причем в Task Manager видно очень постепенное уменьшение используемой памяти, но TerminalInfoInteger(TERMINAL_MEMORY_USED) все равно показывает, что размер используемой памяти не уменьшается. 
Возможно  TERMINAL_MEMORY_USED не работает корректно. Ведь даже если удалить чарт, и даже сам символ из "Обзора Рынка",  TerminalInfoInteger(TERMINAL_MEMORY_USED) все равно показывает, что данный массив  MqlRates все еще сидит в памяти.


Да, похоже на то, что память, действительно, очищается через полчаса( исходя из наблюдения за   Task Manager), но функция  TerminalInfoInteger(TERMINAL_MEMORY_USED) не показывает этой очистки.

 
В документации к MT5, на странице ::/csignal.htm#mechanism, предложение "Значимость этой модели равна 80.", наверное, следует читать как "Значимость этой модели равна -80."
 

Хороший вопрос.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Как преобразовать вектор или матрицу в двойной массив?

chenyu468 , 2023.02.11 05:37

Я хочу рассчитать данные через матрицу и преобразовать один вектор в массив для отображения индикатора.

И обнаруживается, что в матрице или векторе нет функции выходного массива. элемент "row" или "col" только выходной вектор.

https://www.mql5.com/ru/docs/basis/types/matrix_vector


Нужно ли получать все элементы через цикл в массив?


 
Alain Verleyen #:

Хороший вопрос.


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

 

Здравствуйте, уважаемые разработчики!

Вопрос: когда в MQL5 появится штатная функция MarketClose()?

Можно, конечно, начать "долбить" торговый сервер постоянными запросами на установку отложенного ордера с каким-нибудь огромным отступом от текущей цены, а после его установки, проверять код возврата результата и тут же удалять. Есть ещё более экзотические варианты. Но это не камильфо!!!

И всё-таки, когда?

С уважением, Владимир.

 
MrBrooklin # :

Здравствуйте, уважаемые разработчики!

Вопрос: когда в MQL5 появится штатная функция MarketClose() ?

Можно, конечно, начать "долбить" торговый сервер запросами на установку отложенного ордера с каким-нибудь огромным отступом от текущей цены и после его установки, тут же удалять. Есть ещё более экзотические варианты. Но это не камильфо!!!

И всё-таки, когда?

С уважением, Владимир.

Используйте SymbolInfoSessionTrade().