Новая версия платформы MetaTrader 5 build 3620: улучшения веб-терминала, поддержка ONNX и ускоренное умножение матриц в MQL5
1. Где в WEB терминале увидеть его билд?
2. Плюс думаю, что лот стоит синхронизировать со значением панели быстрой торговли.
Если же выставлять лот в панели слева, то после закрытия и открытия данного меню лот становится на 0.01 меньше
3. Когда делаешь масштаб графика фиксированным (уменьшив по вертикали) и начинаешь график таскать по кругу, иногда видно как масштаб прыгает
4. Когда переключаешь пары. График улетает значительно левее, бывает что вообще за экран.
Возможно нужна отсечка, которая запоминается, если график утягиваем влево, но не должна меняться при смене пары или тф
5. Хотелось бы видеть выпадающий список выбора тф, как сами знаете где, плюс в десктоп версии
Неделю и месяц можно унести туда в выпадающий список. Функционала больше, места экономнее
В пятницу 3 марта 2023 года будет выпущена обновленная версия платформы MetaTrader 5 в бета-режиме.
В этом обновлении был улучшен веб-терминал. Мы добавили в него разные цветовые схемы для интерфейса, а также улучшили окно спецификации инструмента.
6. MQL5: Добавлена новая функция CopySeries для копирования синхронизированных таймсерий из MqlRates в отдельные массивы.
Будут-ли добавлены варианты функции CopySeries аналогично функции CopyRates
int CopyRates( string symbol_name, // имя символа ENUM_TIMEFRAMES timeframe, // период datetime start_time, // с какой даты int count, // сколько копируем MqlRates rates_array[] // массив, куда будут скопированы данные );
int CopyRates( string symbol_name, // имя символа ENUM_TIMEFRAMES timeframe, // период datetime start_time, // с какой даты datetime stop_time, // по какую дату MqlRates rates_array[] // массив, куда будут скопированы данные );
Более актуально было бы появление Copy-функций с синхронизацией сразу по нескольким инструментам.
Полностью согласен. Причём с синхронизацией не по OHLC а по тикам.
MetaQuotes:
2. MQL5: Добавлена новая функция CopySeries для копирования синхронизированных таймсерий из MqlRates в отдельные массивы.
То есть CopyRates может возвращать несинхронизированные таймсерии MqlRates одного инструмента ?
Где об этом сказано в документации???
Я вообще в шоке от таких новостей.
И давно возмущён, почему вы позволяете терминалу возвращать не подготовленные данные.
Любой Си программист, знает жёсткое правило, запрещено возвращать область памяти, если в ней ещё содержаться некорректные данные, по сути мусор.
У вас почему-то это правило игнорируется совсем, и не дожидаясь корректных данных, возращаете то что есть.
И история синтетического инструмента, построенная с помощью формулы синтетического инструмента из стандартного окна "Символы",
тоже не соответствует той которая была записана после построения в реал тайм,
и через время после нажатия кнопки обновить из меню, она перерисовывается.
MetaQuotes:
MQL5: Добавлена новая функция CopySeries для копирования синхронизированных таймсерий из MqlRates в отдельные массивы.
Все также нельзя копировать более TERMINAL_MAXBARS баров?
Сделайте, пожалуйста, заявки с признаком только пассивные.
Это именно то, что от вас ждут ВСЕ, торгующие через МТ5 на Мосбирже.
- 2022.11.03
- www.mql5.com
Полностью согласен. Причём с синхронизацией не по OHLC а по тикам.
То есть CopyRates может возвращать несинхронизированные таймсерии MqlRates одного инструмента ?
Где об этом сказано в документации???
Я вообще в шоке от таких новостей.
И давно возмущён, почему вы позволяете терминалу возвращать не подготовленные данные.
Любой Си программист, знает жёсткое правило, запрещено возвращать область памяти, если в ней ещё содержаться некорректные данные, по сути мусор.
У вас почему-то это правило игнорируется совсем, и не дожидаясь корректных данных, возращаете то что есть.
И история синтетического инструмента, построенная с помощью формулы синтетического инструмента из стандартного окна "Символы",
тоже не соответствует той которая была записана после построения в реал тайм,
и через время после нажатия кнопки обновить из меню, она перерисовывается.
Из документации: https://www.mql5.com/ru/docs/series/copyseries
Примечание
Если интервал запрашиваемых таймсерий полностью находится вне доступных данных на сервере, то функция возвращает -1. В случае если запрашиваются данные находятся за пределами TERMINAL_MAXBARS (максимальное количество баров на графике), функция также вернет -1.
При запросе данных из индикатора, если запрашиваемые таймсерии еще не построены или их необходимо загрузить с сервера, то функция сразу же вернет -1, но при этом сам процесс загрузки/построения будет инициирован.
При запросе данных из эксперта или скрипта, будет инициирована загрузка с сервера, если локально этих данных у терминала нет, либо начнется построение нужной таймсерии, если данные можно построить из локальной истории, но они еще не готовы. Функция вернет то количество данных, которые будут готовы к моменту истечения таймаута, но загрузка истории будет продолжаться, и при следующем аналогичном запросе функция вернет уже больше данных.
Не наводите панику. Никаких "областей памяти с некорректными данными" нет.
Данные для всех программ кроме индикаторов выдаются синхронно с ожиданием загрузки в течение достаточно большого таймаута на докачку.
Если вы подумаете глубже, то поймете, почему работает именно так. Это реальность сетевого взаимодействия через полмира с выкачкой больших объемов данных. Чтобы вы не потеряли контроль над вашей же программой на 5 минут от банального запроса истории, мы выдаем то, что успели докачать за таймаут, чтобы вы могли быстрее принять решение.
Достаточно одного раза, чтобы вы словили "вечное синхронное ожидание данных", чтобы навсегда забыть о таком желании. Фактически это бы убивало всех роботов у всех трейдеров.
- www.mql5.com
Из документации: https://www.mql5.com/ru/docs/series/copyseries
Примечание
Если интервал запрашиваемых таймсерий полностью находится вне доступных данных на сервере, то функция возвращает -1. В случае если запрашиваются данные находятся за пределами TERMINAL_MAXBARS (максимальное количество баров на графике), функция также вернет -1.
При запросе данных из индикатора, если запрашиваемые таймсерии еще не построены или их необходимо загрузить с сервера, то функция сразу же вернет -1, но при этом сам процесс загрузки/построения будет инициирован.
При запросе данных из эксперта или скрипта, будет инициирована загрузка с сервера, если локально этих данных у терминала нет, либо начнется построение нужной таймсерии, если данные можно построить из локальной истории, но они еще не готовы. Функция вернет то количество данных, которые будут готовы к моменту истечения таймаута, но загрузка истории будет продолжаться, и при следующем аналогичном запросе функция вернет уже больше данных.
Не наводите панику. Никаких "областей памяти с некорректными данными" нет.
Данные для всех программ кроме индикаторов выдаются синхронно с ожиданием загрузки в течение достаточно большого таймаута на докачку.
Если вы подумаете глубже, то поймете, почему работает именно так. Это реальность сетевого взаимодействия через полмира с выкачкой больших объемов данных. Чтобы вы не потеряли контроль над вашей же программой на 5 минут от банального запроса истории, мы выдаем то, что успели докачать за таймаут, чтобы вы могли быстрее принять решение.
Достаточно одного раза, чтобы вы словили "вечное синхронное ожидание данных", чтобы навсегда забыть о таком желании. Фактически это бы убивало всех роботов у всех трейдеров.
Да, с сетевым взаимодействием соглашусь.
Но фактически закачка данных происходит на момент старта программы, или открытие нового графика, или реконнекта и т.д.
То есть в момент когда никаких решений ещё не принимается, а ожидается получение этих данных чтоб принять потом решение ))
Какой смысл отдавать неполные данные в терминал после таймаута! Если для принятия решения их ещё недостаточно, так как данные не полные и не конечные.
Вот в чём вопрос был. Их же можно накапливать, причём не обязательно в память если вопрос упирается в ограниченные ресурсы пользователя.
И дождавшись полной загрузки с теми же сетевыми таймаутами, затем полностью отдать готовые данные в окружение терминала.
Таким образом исключается получение пользователем, не тех данных которые он ожидал, при обращении к функции.
"Функция вернет то количество данных, которые будут готовы к моменту истечения таймаута"
Но по большому счёту удивление было в другом, то что ввели CopySeries для копирования синхронизированных таймсерий из MqlRates
Несложно сделать вывод, что CopyRates как я понял может возвращать таймсерии, со сдвигом между массивами структуры MqlRates.
Вот по этому поводу и было негодование. Или я не так понял? И не к тому отношу слово синхронизация?
А введённая CopySeries как раз решает проблему отдачи данных между таймаутами?
И данные всегда будут те которые ожидал, на момент обращения функцией?
А по кастомному символу на видео, какая-то фигня происходит.
Или реал тайм данные не корректно считаются в формуле, или ещё что-то...
Формула самая простая
-1*EURUSD + GBPUSD + EURGBP
История строит одно, а реал тайм строит другое.
И после нажатия обновить, происходит перестроение.
И ещё. Было бы не плохо в настройках кастомного символа, увидеть параметр задающий частоту обновления.
Так как согласно документации, кастомный символ построенный через формулу, обновляется десять раз в секунду.
т.е. 100 ms, что достаточно многовато, и хотелось бы самому задавать частоту обновления.
По Тестеру в списке изменений ничего нет, поэтому пишу о проблеме в b3580, с которой за сутки столкнулся второй раз.
В Тестере нажатие на кнопку Старт ничего не вызывает. Все Агенты ready, в логах пусто, даже кратковременного переключения Старт->Стоп не происходит.
Просьба посмотреть по коду, какая гипотетическая ситуация может вызывать подобное. И сделать, чтобы всегда при нажатии хоть что-то выводилось в лог для возможности анализа.
В обоих случаях помогала перезагрузка Терминала.
По Тестеру в списке изменений ничего нет, поэтому пишу о проблеме в b3580, с которой за сутки столкнулся второй раз.
В Тестере нажатие на кнопку Старт ничего не вызывает. Все Агенты ready, в логах пусто, даже кратковременного переключения Старт->Стоп не происходит.
Просьба посмотреть по коду, какая гипотетическая ситуация может вызывать подобное. И сделать, чтобы всегда при нажатии хоть что-то выводилось в лог для возможности анализа.
В обоих случаях помогала перезагрузка Терминала.
Возможно, если была визуализация, сначала надо закрыть то окно.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
В пятницу 10 марта 2023 года будет выпущена обновленная версия платформы MetaTrader 5.
В этом обновлении был улучшен веб-терминал. Мы добавили в него разные цветовые схемы для интерфейса, а также улучшили окно спецификации инструмента.
Помимо этого, в MQL5 появилась поддержка нового алгоритма умножения матриц General Matrix Multiplication (GeMM). Он позволяет значительно ускорить вычисления на большинстве процессоров. На данный момент новый алгоритм поддерживается в методе matrix::GeMM.
Также в MQL5 появилась поддержка работы с моделями ONNX. Это позволит значительно облегчить использование нейронных сетей в торговых советниках.
Обновление содержит следующие изменения:
MetaTrader 5 Client Terminal build 3620
ONNX — открытая библиотека для построения нейронных сетей глубокого обучения. Этот формат поддерживается множеством платформ, включая Chainer, Caffee2 и PyTorch. Создав ONNX модель при помощи специализированных инструментов, вы можете интегрировать ее в свою MQL5-программу и использовать для принятия торговых решений.
Описание всех поддерживаемых функций доступно в документации. Пример работы с тестовой моделью доступен в публичных проектах в MetaEditor. Найдите проект ONNX.Price.Prediction в разделе "Инструменты \ Публичные проекты", а затем нажмите "Присоединиться" в контекстном меню. Проект загрузится на компьютер и появится в Навигаторе:
Скомпилируйте проект и запустите его на EURUSD H1, чтобы посмотреть результат.
Помимо готовой модели и MQL5-кода для ее запуска, в проекте также доступен Python скрипт PricePredictionTraining.py. Он показывает, как самостоятельно создать модель ONNX. Для работы скрипта установите на свой компьютер Python, а также необходимые модули из командной строки:
python -m pip install --upgrade tensorflow
python -m pip install --upgrade pandas
python -m pip install --upgrade scikit-learn
python -m pip install --upgrade matplotlib
python -m pip install --upgrade tqdm
python -m pip install --upgrade metatrader5
python -m pip install --upgrade onnx==1.12
python -m pip install --upgrade tf2onnx
Новый алгоритм на данный момент поддерживается в методе matrix::GeMM. Если ваш процессор поддерживает инструкции AVX и FMA (большинство процессоров, выпущенных после 2013 года), алгоритм будет задействован автоматически.
Матрицы и векторы передаются в DLL в виде указателя на буфер. Например, для передачи матрицы типа float, соответствующий параметр экспортируемой из DLL-функции должен принимать указатель на буфер с типом float. Пример:
MQL5
C++
Для правильной обработки матриц и векторов, кроме их буферов, следует передавать их размеры.
MQL5: Добавлена новая функция CopySeries для копирования синхронизированных таймсерий из MqlRates в отдельные массивы.
Функция CopySeries позволяет за один раз получать только нужные таймсерии в разные указанные массивы, при этом они все синхронизированы между собой. Это означает, что все значения в полученных массивах по конкретному индексу N будут принадлежать одному и тому же бару на указанной паре символ/таймфрейм. В этом случае не требуется заботиться о том, чтобы все полученные таймсерии были синхронизированы по времени открытия бара.
В отличие от CopyRates, которая возвращает полный набор таймсерий в виде массива MQLRates, функция CopySeries позволяет программисту получать только нужные таймсерии на основе комбинации флагов, указывающих тип запрашиваемых таймсерий. При этом порядок массивов, передаваемых в функцию, должен соответствовать порядку полей в структуре MqlRates:
Таким образом, если необходимо получить значения таймсерий time, close и real_volume для последних 100 баров текущего символа/таймфрейма, вызов должен быть следующим:
При этом важен порядок массивов "time, close, volume" — он должен соответствовать порядку полей в структуре MqlRates. А вот порядок значений в маске rates_mask значения не имеет, маска могла быть такой :
Пример
MetaTrader 5 Web Terminal build 3620
Обновление будет доступно через систему Live Update.