Новая версия платформы MetaTrader 5 build 2650: Фоновая загрузка графиков и улучшения в профилировщике MQL5-кода

 

В пятницу 9 октября 2020 года будет выпущена обновленная версия платформы MetaTrader 5. Обновление содержит следующие изменения:


  1. Terminal: Добавлена настройка "Заранее загружать данные графиков по открытым позициям и ордерам".

    Для экономии трафика торговая платформа загружает ценовую историю по инструментам только в момент ее фактического запроса, например, при открытии графика или при запуске тестирования. Однако для активно используемых инструментов это может быть не всегда удобно. Если включить новую опцию, то графики инструментов, по которым у вас есть открытые позиции или отложенные ордера, будут обновляться в фоновом режиме каждый раз при запуске платформы. Таким образом, при открытии графиков вам не придется ждать дозагрузки данных, они будут сразу доступны для анализа.




  2. Terminal: Исправлено формирование дневных баров после выходных дней.
  3. Terminal: Исправлено обновление графиков. В некоторых случаях после дозакачки обновленных ценовых данных графики могли не перестраиваться.
  4. Terminal: Оптимизировано обновление кэша торговой истории счета. Это позволило снизить задержки получения данных при помощи функций History*.
  5. Terminal: Исправлено отображение колонки комментариев при просмотре торговой истории в виде позиций.
  6. Terminal: Исправлено отображение кнопки продления подписки на "Сигналы".
  7. MQL5: Продолжаются работы по полному обновлению профилировщика кода. В дополнение к нововведениям версии 2615:

    Добавлены новые параметры
    Как уже сообщалось в предыдущем обновлении, для профилирования теперь используется метод "Sampling". Профилировщик делает паузы в работе MQL-программы (~1000 раз в секунду) и собирает статистику того, сколько раз пауза пришлась на тот или иной участок кода. В том числе анализируются стеки вызовов, чтобы определить "вклад" каждой функции в общее время работы кода. В конце профилирования вы получаете информацию о том, сколько раз была выполнена пауза и сколько раз каждая из функций оказывалась в стеке вызовов:

    • Общая активность ЦП [единица измерения, %] — общее количество "появления" функции в стеке вызовов.
    • Собственная активность ЦП [единица измерения, %] — количество "пауз", которые произошли непосредственно внутри указанной функции. Этот счетчик наиболее важен для определения "узких" мест, поскольку по статистике остановка чаще происходит в тех участках программы, которые требуют большего процессорного времени.


    Добавлена возможность отключения инлайнинга функций при профилировании
    При компиляции MQL-программ осуществляется инлайнинг (встраивание) — код функций помещается непосредственно в место их вызова, что позволяет добиться существенного ускорения при работе. Однако это затрудняет профилирование функций. Чтобы получить отчет по "чистым" функциям, вы можете отключить инлайнинг при профилировании в настройках MetaEditor:




    Обновлен дизайн отчета
    Мы переработали отчет профилирования, а также представление информации профилирования в окне исходного кода. Дизайн стал более современным и привычным для пользователей Visual Studio.




  8. MQL5: Исправлена ошибка в работе функции CopyTicksRange. Из-за нее в некоторых случаях функция возвращала не все данные.
  9. MQL5: Добавлен новый код ошибки TRADE_RETCODE_HEDGE_PROHIBITED — открытие позиции или выставление отложенного ордера невозможно, поскольку перекрытые позиции запрещены. Ошибка возвращается в ответ на попытку произвести торговую операцию, если для счета запрещено хеджирование и на нем уже есть позиция или ордер в противоположном направлении по тому же символу.
  10. MQL5: Убрана возможность вызова функции MessageBox при отладке индикаторов. MessageBox не вызывается из индикаторов, поскольку она приостанавливает работу потока исполнения на все время ожидания ответа пользователя.
  11. MQL5: Оптимизировано и значительно ускорено добавление торговых инструментов в "Обзор рынка" с помощью функции SymbolSelect.
  12. MQL5: Исправлено поведение функции ArrayInsert для массивов фиксированного размера. Теперь оно соответствует документации: при вставке элементов размер массива-приемника не меняется, при этом начиная с позиции вставки элементы массива-приемника сдвигаются вправо (последние count элементов "выпадают" ), а на освободившееся место происходит копирование элементов из массива-источника.
  13. Tester: Исправлена работа с пользовательскими настройками торговых условий при тестировании, переработан диалог настроек.

    • Исправлено начисление пользовательских комиссий. Теперь для работы комиссии достаточно указать только название символа, а не весь путь к нему.
    • Изменено расположение вкладок для более удобной работы.
    • Переименован диалог и опция, включающая пользовательские настройки, для облегчения понимания.
    • Оптимизирована ширина колонок в таблицах настроек.
    • При отключении опции "Использовать пользовательские настройки" все остальные настройки в диалоге теперь деактивируются. Ранее настройки оставались доступными для редактирования, и пользователи могли ошибочно посчитать, что они будут применены при тестировании.




  14. Tester: Исправлена ошибка, возникавшая в некоторых случаях при получении ордеров из торговой истории по тикету.
  15. MetaEditor: Добавлены предустановленные цветовые схемы для окна редактирования кода: светлая (по умолчанию), темная и синяя. Теперь для более комфортной работы в ночное время вам не придется перенастраивать внешний вид редактора вручную.

    Помимо этого добавилась возможность настраивать цвет рамки для окна подсказок по функциям.



     
  16. MetaEditor: Полностью обновлены иконки на панелях инструментов для поддержки HiDPI-мониторов.
  17. Обновлена документация.

Обновление будет доступно через систему Live Update.
 

MetaQuotes:

Оптимизирована ширина колонок в таблицах настроек.

Большая просьба применить эту Оптимизацию и к окну Алертов.


 
fxsaber:

Большая просьба применить эту Оптимизацию и к окну Алертов.

И я это просил несколько раз за последние 2-3 года.

Как и про высоту поля полного описания алерта.

И о том, что ширины столбцов не сохраняются после перезапуска терминала.

А про некруглые значения X и Y графиков многие говорили много лет.

 
MetaQuotes:
  • Общая активность ЦП [единица измерения, %] — общее количество "появления" функции в стеке вызовов.
  • Собственная активность ЦП [единица измерения, %] — количество "пауз", которые произошли непосредственно внутри указанной функции.
    Этот счетчик наиболее важен для определения "узких" мест, поскольку по статистике остановка чаще происходит в тех участках программы, которые требуют большего процессорного времени.

Прошу пояснить, для понимания корректной интерпретации анализа этих значений.
Если количество пауз, превышает количество появления функции в стеке вызовов,
то это означает что есть тормоза в этом месте? Я правильно понимаю?

И второй вопрос.
После завершения профилирования, и после анализа результатов, как привести редактор в исходное отображение?
То есть как убрать эти красные линии в редакторе. Сейчас приходится перезагружать ME.

За тёмную тему редактора, однозначно спасибо. Устал вручную настраивать цветовую палитру.
Может для цветовых настроек редактора, ввести загрузку сохранённого файла? По типу шаблона.
А лучше шаблон для всего редактора, чтоб включал все сохранённые настройки.
 
Нужны CTRL++ и CTRL+- для изменения Вертикального масштаба с клавиатуры.
 
Нужна возможность делать окно Инструменты отдельным, чтобы оно не перекрывало графики и на него можно переключиться через Alt+Tab.
 
Roman:

Прошу пояснить, для понимания корректной интерпретации анализа этих значений.
Если количество пауз, превышает количество появления функции в стеке вызовов,
то это означает что есть тормоза в этом месте? Я правильно понимаю?

ИМХО, такого быть не может: общее количество встречаемости функции в каком-либо месте стека всегда больше или равно количеству пауз внутри самой функции.

Тормоза конкретной функции тем больше, чем больше количество пауз в ней.

По крайней мере, я так понял. В принципе, хотелось бы более подробной документации, в частности, как и от чего считаются проценты.

 

Почему нет"комиссий" в столбцах ??? а в истории оно постфактум....

http://prntscr.com/uvp8ci

 
Stanislav Korotky:

ИМХО, такого быть не может: общее количество встречаемости функции в каком-либо месте стека всегда больше или равно количеству пауз внутри самой функции.

Тормоза конкретной функции тем больше, чем больше количество пауз в ней.

По крайней мере, я так понял. В принципе, хотелось бы более подробной документации, в частности, как и от чего считаются проценты.

Я думаю, что в одной функции могут же быть несколько пауз, в разным местах функции.
По сути как я понимаю,
Общая активность - это количество вызовов функции, т.е. счётчик.
Собственная активность - количество пауз в этой функции, то есть задержки, тормоза.
По этому и предположил, что количество пауз надо сравнивать с количеством вызовов. 
То есть за одну единицу вызова функции, должна быть одна единица задержки, это норма.
Если пауз больше чем вызовов, значит есть тормоза.
Посмотрите на скрине выше на OrderSend. Пауз больше чем вызовов, по тому что функция ждёт ответ сервера. И эту особенность нужно учитывать.
По этому для OrderSend это норма, если пауз будет больше, это говорит что медленно приходит ответ от сервера, и надо бы поближе разместится по пингу.

 
  1. Terminal: Добавлена настройка "Заранее загружать данные графиков по открытым позициям и ордерам".

    Для экономии трафика торговая платформа загружает ценовую историю по инструментам только в момент ее фактического запроса, например, при открытии графика или при запуске тестирования. Однако для активно используемых инструментов это может быть не всегда удобно. Если включить новую опцию, то графики инструментов, по которым у вас есть открытые позиции или отложенные ордера, будут обновляться в фоновом режиме каждый раз при запуске платформы. Таким образом, при открытии графиков вам не придется ждать дозагрузки данных, они будут сразу доступны для анализа.

Не лучший выход. 

Данные графиков должны загружаться если фин инструмент есть в обзоре рынка. 

Трейдеры работают не только с ордерами или позициями.
 
Roman:

Я думаю, что в одной функции могут же быть несколько пауз, в разным местах функции.
По сути как я понимаю,
Общая активность - это количество вызовов функции, т.е. счётчик.
Собственная активность - количество пауз в этой функции, то есть задержки, тормоза.
По этому и предположил, что количество пауз надо сравнивать с количеством вызовов. 
То есть за одну единицу вызова функции, должна быть одна единица задержки, это норма.
Если пауз больше чем вызовов, значит есть тормоза.
Посмотрите на скрине выше на OrderSend. Пауз больше чем вызовов, по тому что функция ждёт ответ сервера. И эту особенность нужно учитывать.
По этому для OrderSend это норма, если пауз будет больше, это говорит что медленно приходит ответ от сервера, и надо бы поближе разместится по пингу.

Нет смысла гадать. Такое понимание может быть и правильным, но оно противоречит вышеприведенной официальной формулировке (может быть она неточна).

Когда в функции происходит пауза, эта функция есть в стеке вызовов и потому это должно отражаться увеличением общего счетчика. Про "счетчик вызовов" функции ничего не было сказано, упомянуты только счетчик появления на стеке и счетчик нахождения внутри функции.

Причина обращения: