Что нового в MetaTrader 5?

История обновлений десктопной, мобильной и веб-платформ

18 января 2024
MetaTrader 5 build 4150: экспорт торгового отчета и новые методы машинного обучения в MQL5

Terminal

  1. Добавлен экспорт торгового отчета в файл HTML и PDF. Теперь вы можете легко поделиться своими торговыми достижениями с коллегами или инвесторами. Для экспорта воспользуйтесь меню в самом отчете или меню «Файл».


    Экспорт торгового отчета в файл HTML и PDF


  2. Добавлена возможность сохранить текущее состояние окна «Обзор рынка» в файл CSV. Для этого нажмите «Экспорт» в контекстном меню. В файле сохранятся значения выбранных показателей на момент экспорта. Чтобы выгрузить больше данных, включите дополнительные колонки через контекстное меню.


    Экспорт состояния «Обзора рынка»


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


    Улучшено отображение маржевых требований в спецификации контракта


    Маржа рассчитывается с учетом цены инструмента на момент открытия окна спецификации и не изменяется в реальном времени. Соответственно, значения следует воспринимать как ориентировочные. Для пересчета значений по текущим ценам переоткройте спецификацию инструмента.

  4. Отключена поддержка сервиса "Сигналы" для демо-счетов. Для получения расширенной статистики по вашим тренировочным счетам используйте новый торговый отчет. Он предоставляет массу показателей по прибыльности и рискованности вашей стратегии, содержит графики прироста, баланс и эквити, диаграммы распределения сделок по направлению и инструментам и многое другое.
  5. Исправлен показ потенциальной прибыли/убытка при редактировании Тейк Профита и Стоп Лосса для ордеров Stop Limit.
  6. Внесены многочисленные исправления и доработки в платежную систему.
  7. Исправлена проверка дубликатов при загрузке набора инструментов в «Обзор рынка» из файла *.set.
  8. Исправлена работа веб-инсталлятора для Parallels. Теперь при использовании этой системы виртуализации на macOS с процессорами M1/M2/M3 платформа будет устанавливаться корректно.
  9. Обновлены переводы пользовательского интерфейса.
  10. Исправления по крешлогам.

MQL5

  1. Добавлены новые методы для работы с матрицами и векторами. Они используются в машинном обучении.

    • ConfusionMatrix — вычисляет матрицу ошибок. Метод применяется к вектору предсказанных значений.
    • ConfusionMatrixMultilabel — вычисляет матрицу ошибок для каждой метки. Метод применяется к вектору предсказанных значений.
    • ClassificationMetric — вычисляет классификационную метрику для оценки качества предсказанных данных по отношению к истинным данным. Метод применяется к вектору предсказанных значений.
    • ClassificationScore — вычисляет классификационную метрику для оценки качества предсказанных данных по отношению к истинным данным.
     
  2. Исправлено сохранение данных в текстовый файл формата UTF-8 при помощи функции FileWrite.
  3. Отключены и объявлены устаревшими функции Signal*. Теперь они будут возвращать пустые наборы сигналов.

MetaEditor

  1. Увеличена частота сэмплирования при профилировании. Теперь состояние приложения снимается 10000 раз в секунду, что позволяет замерять скорость исполнения функций гораздо точнее.
  2. Обновлены доступные модели в инструменте автоматического дополнения кода Copilot. Добавлена модель ChatGPT-4 Turbo, убраны устаревшие реализации.
  3. Исправлены ошибки при замене слов в выделенном фрагменте текста.

Tester

  1. Исправлено зависание форвардного тестирования. Проблема могла возникать в режиме генетической оптимизации.
  2. Оптимизирована и значительно ускорена работа с торговой историей из MQL5-программ.
  3. Исправлен расчет прибыли по операциям закрытия встречной. Ошибка могла возникать для торговых инструментов, которые не являются основным инструментом тестирования.

Web Terminal

  1. Исправлено обновление свойств торгового инструмента при их изменении на стороне брокера.
  2. Исправлено отображение тела свечи на графике. Тело могло быть не видно, если оно имело малый размер.
  3. Исправлена работа поля «Страна» в форме открытия счета.
20 октября 2023
MetaTrader 5 build 4040: Улучшения и исправления

Terminal

  1. Улучшен новый торговый отчет. Исправлено отображение первого значения на графике прироста, а также расчет просадки.

    Улучшен новый торговый отчет


  2. При открытии счета каждый трейдер получает несколько сообщений через встроенную почту. Помимо данных для подключения в них можно найти множество полезной информации о возможностях платформы и встроенных сервисах. Мы актуализировали и дополнили эти письма, перевели их на 50 языков, а также полностью обновили дизайн.
  3. Оптимизированы страницы пополнения и снятия средств со счета.
  4. Исправлена ошибка изменения объема при выставлении нового ордера. При некоторых сочетаниях настроек торгового инструмента поле было недоступно для редактирования.
  5. Исправлено отображение ссылок на соглашения с брокером в диалоге открытия демо-счета.
  6. Обновлены переводы пользовательского интерфейса.

MQL5

  1. Исправлена ошибка, в некоторых случаях приводившая к падению MQL5-программы при запуске платформы.

MetaTrader 5 Web Terminal

  1. Исправлено отображение Стоп Лоссов и Тейк Профитов в торговой истории.
  2. Расширен вывод в журнал. Теперь в него будут выводиться сообщения об успешных и неудавшихся подключениях.
  3. Исправлена работа контекстного меню в "Обзоре рынка".
  4. Исправлено отображение уведомления о результатах операций при торговле из стакана цен.
  5. Исправлена ошибка, из-за которой подокно индикатора могло удаляться с графика при вызове торгового диалога.
  6. Исправлено перетаскивание торговых уровней на графике в случае, когда они отображаются поверх аналитических объектов.
29 сентября 2023
MetaTrader 5 build 4000: Улучшения в торговом отчете и веб-терминале

Terminal

  1. Добавлено отображение помесячного прироста в деньгах в новом торговом отчете. Чтобы посмотреть показатели, перейдите в отчет "Summary" и выберите режим "Balance".


    Помесячный прирост в деньгах в новом торговом отчете


  2. Исправлено и улучшено отображение нового торгового отчета.
  3. ONNX Runtime обновлено до версии 1.16. Подробности релиза доступны в GitHub.
  4. Обновлены переводы пользовательского интерфейса.

MetaTrader 5 Web Terminal

  1. Исправлено отображение диалогов смены пароля и открытия счета.
  2. Исправлена ошибка отображения Стоп Лосс и Тейк Профита в истории, возникавшая после их модификации.
  3. Добавлена возможность прокрутки в диалоге предупреждения о рисках.
  4. Обновлены переводы пользовательского интерфейса.
  5. Внесены различные улучшения и исправления.
21 сентября 2023
MetaTrader 5 build 3980: Улучшения и исправления

Terminal

  1. Улучшен новый торговый отчет. Исправлено отображение итогового значения свопов, а также графика прибыли по символам.
  2. Оптимизированы страницы пополнения и снятия средств со счета. Подробнее о новой интеграции платформы с платежными системами читайте в предыдущей новости о билде 3950.
  3. Оптимизирован пересчет финансовых операций во всей платформе, включая тестер стратегий. Теперь показатели прибыли, маржи и многие другие параметры рассчитываются быстрее.
  4. Обновлены переводы пользовательского интерфейса.

MQL5

  1. Добавлены методы Conjugate для типов complex, vector<complex> и matrix<complex>. Они выполняют сопряжение для комплексных чисел.
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       complex a=1+1i;
       complex b=a.Conjugate();
       Print(a, "  ", b);
       /*
       (1,1)  (1,-1)
       */
    
       vectorc va= {0.1+0.1i, 0.2+0.2i, 0.3+0.3i};
       vectorc vb=va.Conjugate();
       Print(va, "  ", vb);
       /*
       [(0.1,0.1),(0.2,0.2),(0.3,0.3)]  [(0.1,-0.1),(0.2,-0.2),(0.3,-0.3)]
       */
    
       matrixc ma(2, 3);
       ma.Row(va, 0);
       ma.Row(vb, 1);
       matrixc mb=ma.Conjugate();
       Print(ma);
       Print(mb);
       /*
       [[(0.1,0.1),(0.2,0.2),(0.3,0.3)]
        [(0.1,-0.1),(0.2,-0.2),(0.3,-0.3)]]
    
       [[(0.1,-0.1),(0.2,-0.2),(0.3,-0.3)]
        [(0.1,0.1),(0.2,0.2),(0.3,0.3)]]
       */
       
       ma=mb.Transpose().Conjugate();
       Print(ma);
       /*
       [[(0.1,0.1),(0.1,-0.1)]
        [(0.2,0.2),(0.2,-0.2)]
        [(0.3,0.3),(0.3,-0.3)]]
       */
      }
  2. Добавлена обработка выхода ONNX-модели типа Sequence of maps.

    Для моделей ONNX, которые в выходном слое отдают последовательности Map (ONNX_TYPE_SEQUENCE of ONNX_TYPE_MAP), в качестве выходного параметра следует передавать динамический или фиксированный массив структур. Первые два поля этой структуры должны соответствовать типам ключей и значений ONNX_TYPE_MAP и являться фиксированными или динамическими массивами.

    Рассмотрим модель iris.onnx, созданную следующим скриптом на Python:
    from sys import argv
    data_path=argv[0]
    last_index=data_path.rfind("\\")+1
    data_path=data_path[0:last_index]
    
    from sklearn.datasets import load_iris
    iris_dataset = load_iris()
    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(iris_dataset['data'], iris_dataset['target'], random_state=0)
    from sklearn.neighbors import KNeighborsClassifier
    knn = KNeighborsClassifier(n_neighbors=1)
    knn.fit(X_train, y_train)
    
    #  Convert into ONNX format
    from skl2onnx import convert_sklearn
    from skl2onnx.common.data_types import FloatTensorType
    initial_type = [('float_input', FloatTensorType([None, 4]))]
    onx = convert_sklearn(knn, initial_types=initial_type)
    path = data_path+"iris.onnx"
    with open(path, "wb") as f:
        f.write(onx.SerializeToString())
    Откройте созданный onnx-файл в MetaEditor:

    Просмотр ONNX-модели в MetaEditor


    В качестве выхода "output_probability" отдается последовательность из Map, ключ которой имеет тип INT64 (что соответствует типу long языка MQL5) и значение типа float. Для получения данных с этого выхода объявим следующую структуру:
    struct MyMap
      {
       long              key[];
       float             value[];
      };
    Здесь мы использовали динамические массивы с соответствующими типами. В данном случае можно использовать фиксированные массивы, поскольку для данной модели Map всегда содержит 3 пары ключ+значение.

    Поскольку возвращается последовательность из Map, в качестве параметра для приема данных с выхода output_probability следует передать массив таких структур — динамический или фиксированный, исходя из свойств конкретной модели. Например:
    //--- объявим массив для приема данных с выходного слоя output_probability
    MyMap output_probability[];
    
    ...
    
    //--- выполнение модели
    OnnxRun(model,ONNX_DEBUG_LOGS,float_input,output_label,output_probability);

MetaEditor

  1. Исправлено отображение типа выходных параметров в просмотрщике моделей ONNX.

Web Terminal

  1. Добавлен раздел связи с брокером в основное меню.
  2. Добавлена обработка ошибки авторизации при помощи SSL-сертификата. Этот вид авторизации не поддерживается в веб-терминале, вместо него может быть включена авторизация при помощи одноразовых паролей.
  3. Исправлена ссылка на скачивание десктопной версии платформы в основном меню.
  4. Изменен диалог управления счетами. Если у брокера недоступно открытие демонстрационных или реальных счетов, соответствующий пункт меню скрывается.
14 сентября 2023
MetaTrader 5 build 3950: Снятие/пополнение в терминале и обновленный торговый отчет
  1. Добавлена поддержка балансовых операций снятия и пополнения торгового счета непосредственно в клиентском терминале.

    Мы добавили интеграцию наиболее популярных платежных систем прямо в платформу MetaTrader 5, что позволяет брокерам предоставить трейдерам новый уровень сервиса. При вводе или пополнении просто выберите наиболее подходящий для вас способ и проведите транзакцию. Для удобства трейдеров можно сохранять выбранные карты, чтобы не вводить каждый раз данные карты. При этом брокер не хранит у себя платежные реквизиты и номера карт. Все введенные при оплате пользователем данные отправляются через защищенные каналы на проверку той платежной системе, которую вы выбрали для проведения оплаты.

    Новый функционал предоставляет трейдерам возможность управлять денежными средствами в один клик, не покидая клиентский терминал.

    Пополнение и снятие средств со счета прямо в платформе

  2. Переработан и полностью обновлен отчет по торговой истории — теперь он более нагляден. Мы пересмотрели подход к подаче информации и перевели сухие статистические отчеты в интерактивные графики и диаграммы. Работа еще продолжается, но уже сейчас вы можете оценить изменения.

    Чтобы посмотреть статистику по торговле, нажмите "Отчеты" в меню "Вид".






    Отчет поделен на четыре вкладки, каждая из которых содержит агрегированную информацию в своем разрезе:

    • Summary — сводная информация о торговле за все время: данные счета, общие показатели прибыли и убытков, сумма депозитов и выводов, графики баланса, роста и дивидендов и другие результаты торговли.
    • Profit/Loss — информация о прибыльных и убыточных сделках. Делится по типам торговли (ручная, алготрейдинг и копирование сделок), результаты можно анализировать в разрезе сделок или денег по месяцам и годам.
    • Long/Short — покажет вам соотношение между покупками и продажами в динамике и в заданные промежутки времени, а также позволит оценить прибыльность по направлениям Buy и Sell.
    • Symbols — анализ сделок по финансовым инструментам. Здесь вы увидите, на каких символах вы зарабатываете или теряете, как часто по ним торгуете, графики сделок и денежных объемов по ним.


    Новые отчеты позволяют визуально оценивать торговые результаты во множестве разрезов, просто переходя по вкладкам. Гистограммы, графики и диаграммы интерактивны и дают дополнительную информацию при наведении курсора мышки. Наши дизайнеры провели большую работу, чтобы информация с отчетов считывалась максимально просто и понятно. Попробуйте сами и оцените!

  3. Добавлено использование AVX2-инструкций в тех случаях, когда они поддерживаются процессором. Это позволит более эффективно использовать возможности процессора, на котором запускается терминал. Теперь при установке или обновлении терминал сам будет определять архитектуру процессора и устанавливать версию, оптимальную под данный процессор. При запуске терминал пишет в лог сообщение (AVX/AVX2), в котором показывает, под какой набор инструкций собран терминал.
    Terminal	MetaTrader 5 x64 build 3914 started for MetaQuotes Software Corp.
    Terminal	Windows 10 build 19045, 20 x Intel Xeon  E5-2630 v4 @ 2.20GHz, AVX, 41 / 63 Gb memory, 58 / 280 Gb disk, UAC, GMT+2
    

    Advanced Vector Extensions (AVX) — расширение системы команд x86 для микропроцессоров Intel и AMD, предложено еще в 2008. Дальнейшее развитие привело к появлению AVX2 и AVX-512 (2013).

  4. В дополнение к двум версиям терминалов MetaTrader 5 на X64 и AVX, мы выпустили третью версию десктопного терминала, скомпилированную с прямой поддержкой AVX2-команд. При этом ONNX-модели теперь также могут работать с поддержкой AVX2-команд.
  5. Добавлено отображение ссылок на необходимые нормативные документы брокера. Получить всю необходимую правовую информацию со стороны брокера теперь можно прямо в клиентском терминале в меню Help / Terms & Conditions.

    Ссылки на нормативные документы брокера

  6. Исправлена работа 2FA-авторизации при ее совместном использовании с расширенной авторизацией при помощи сертификатов.
  7. Исправлено отображение писем внутренней почты при работе в MacOS.
  8. Исправлено отображение окна Сигналов при работе в Wine.
  9. Выпущены новые инсталляторы МТ4/MT5-терминалов для Linux.
  10. В меню Help добавлены команды для перехода на страницы скачивания Linux и Mac-версий терминала. Для удобства трейдеров мы создали специальный раздел сайта, где представлены варианты торгового терминала под все платформы и для торговли в браузере.

    Ссылки для скачивания Linux и Mac-версий платформы

  11. Исправлена вставка картинок в письма внутренней почты.
  12. Выпущены новые инсталляторы терминала MetaTrader 5 для Mac с поддержкой процессоров M1/M2. В связи с переходом на Wine 8.0.1 мы настоятельно рекомендуем удалить старые версии и инсталлировать новые. При использовании старых версий Wine < 8.0.0 в логе терминала выводится сообщение о необходимости обновления.
  13. Добавлен показ "VPS Hosting Speed Up" в меню сканирования сети с указанием пинга до вашего торгового сервера. Это позволит наглядно увидеть, как уменьшатся ваши сетевые задержки при аренде встроенного VPS.


    Добавлен показ "VPS Hosting Speed Up" в меню сканирования сети с указанием пинга до вашего торгового сервера

  14. Усилены требования на минимальную сложность паролей, а именно:

    • длина пароля — не меньше 8 символов
    • пароль должен содержать не менее 1 символа в верхнем и нижнем регистре, не менее 1 цифры и не менее 1 спецсимвола.

  15. Кликабельные ссылки в логах терминала. Теперь при двойном клике на строках с https ссылками происходит переход в браузер с открытием ссылок.
  16. Исправлен поиск торговых инструментов в Обзоре рынка. Теперь символ в первую очередь ищется по имени, а затем — по остальным полям: описание, ISIN и т.д.
  17. Исправлен учет прибыли по сделкам при расчете баланса в отчетах по торговой истории счета. В некоторых случая при расчете не учитывался тип инструмента.
  18. VPS Hosting

    1. Можно отсылать и запускать EX5-программы, скомпилированные под набор команд x64/AVX/AVX2. Программы под AVX512 на встроенном VPS не поддерживаются.
    2. Количество локаций для аренды встроенного VPS увеличено до 27. Теперь выбор наиболее близкого сервера стал еще шире.

    MQL5

    1. Добавлено управление настройками компиляции, в том числе выбор расширенных наборов инструкций процессора — AVX, AVX2, AVX512, FMA3.

      Современные процессоры имеют набор расширенных инструкций, значительно ускоряющих математические расчеты, но подавляющее большинство программ не использует этих возможностей. Мы добавили поддержку данных инструкций в компилятор языка MQL5, что позволяет генерировать более эффективный и быстрый код.

      Мы также добавили возможность выбирать, с каким типом инструкций необходимо скомилировать программу MQL5. При этом можно указывать как общие настройки для одиночных программ в Настройках MetaEditor, так и применять персональные настройки для проектов:


      Настройки компиляции в MetaEditor

    2. В методы матриц и векторов добавлены перечисления ENUM_AVERAGE_MODE и ENUM_CLASSIFICATION_METRIC.
    3. Добавлен метод Set для векторов.
    4. Переделана инициализация OpenCL - теперь он инициализируется по первому фактическому использованию, а не по загрузке MQL5-программы, содержащей функции OpenCL.
    5. Исправлена ошибка при вызове функции SocketIsConnected.
    6. Исправлена задержка вызова метода OnDeinit при выгрузке кастомных индикаторов.
    7. Исправлена ошибка компилятора, из-за которой неверно вычислялась длина строки в свойстве indicator_label, что приводило к неправильному показу тултипов для графических объектов.
    8. Исправлено использование многострочного комментария в теле макроса. Пример макроса, на котором возникала ошибка:
      #define MACRO1 /*
      #define MACRO2 */
      void OnStart()
      {
      #ifdef MACRO2
          Print( 2 );
      #else
          Print( 1 );
      #endif
      }
    9. Исправлен порядок параметров функции MathAtan2. Теперь порядок соответствует аналогичной функции в C++.
    10. В перечисление ENUM_TERMINAL_INFO_STRING добавлено новое значение TERMINAL_CPU_ARCHITECTURE. Также добавлен макрос  __CPU_ARCHITECTURE__ — получение архитектуры CPU компьютера, на котором работает терминал. Пример использования:
      void OnStart()
        {
         Print("CPU name:         ",TerminalInfoString(TERMINAL_CPU_NAME));
         Print("CPU cores:        ",TerminalInfoInteger(TERMINAL_CPU_CORES));
         Print("CPU architecture: ",TerminalInfoString(TERMINAL_CPU_ARCHITECTURE));  
         Print("");
         Print("EX5 architecture: ",__CPU_ARCHITECTURE__);                            
        }
      
      CPU name:         12th Gen Intel Core i9-12900K
      CPU cores:        24
      CPU architecture: AVX2 + FMA3
      
      EX5 architecture: AVX

    11. Изменено поведение модификатора extern. Теперь объявление переменной с модификатором extern является предъобъявлением переменной.

      Новые ограничения:
      1. Предъобъявление переменной не должно содержать инициализации. Например, при компиляции следующего кода получим ошибку "X - extern variable initialization is not allowed":
        extern int X=0;
        
        void OnStart()
          {
          }

      2. Переменная extern должна быть объявлена в программе без ключевого слова extern. Например, при компиляции следующего кода получим ошибку "unresolved extern variable X":
        extern int X;
        
        void OnStart()
          {
          }

      3. При использовании extern важно следить за порядком инициализации, т.к. доступ к переменной можно получить до её инициалиазции. Например, следущий код выведет в журнал "Y=0 X=5", т.к. инициализация переменной Y происходит до инициализации переменной X:
        extern int X;
        int        Y=X;
        
        void OnStart(void)
          {
           Print("Y=",Y," X=",X);
          }
          
        int X=_Digits;

    MetaEditor

    1. Добавлено использование AVX2-инструкций в тех случаях, когда они поддерживаются процессором.
    2. Исправлена ошибка, в некоторых случаях приводившая к зависанию при компиляции.
    3. Улучшено отображение локальных переменных при отладке.

    Tester

    1. Добавлено использование AVX2-инструкций в тех случаях, когда они поддерживаются процессором.

    Обновлены переводы пользовательского интерфейса.

    Исправления по крешлогам.


    MetaTrader 5 Web Terminal build 3950

    1. В настройки графика добавлен показ цены Ask.

      В настройки графика добавлен показ цены Ask

    2. Ускорена первоначальная загрузка терминала.
    3. Добавлена возможность менять пароль.
    4. Добавлена возможность удаления и сохранения пароля.
    5. Добавлен кастомный период для показа торговой истории.
    6. Исправлена ошибка при принудительной смене пароля.
    7. Исправлен расчёт вычисления diff — дистанции между ценой открытия и уровнями TP/SL.

      Исправлен расчёт вычисления diff — дистанции между ценов открытия и уровнями TP/SL

    8. Исправлена ошибка остановки тиков при закрытии всех ордеров/сделок.
    9. Исправлен показ событий Экономического календаря — в некоторых случаях они не отображались на графике, несмотря на включенную опцию.
    10. Исправлена ошибка, когда сбрасывались индикаторы при смене символа на графике.
    11. Исправлена ошибка в форме открытия реального аккаунта при подтверждении телефона/email.
    12. Добавлены и исправлены переводы.
8 июня 2023
MetaTrader 5 build 3800: ордера Book or Cancel, помощь AI при написании кода и расширенная поддержка ONNX

Terminal

  1. Добавлена поддержка новой политики исполнения ордеров — Пассивная / Book or Cancel (BOC).


    Новая политика исполнения ордеров — Пассивная / Book or Cancel


    Политика BOC означает, что ордер может быть только выставлен в стакан цен. Если ордер может быть исполнен немедленно при выставлении, он снимается. Фактически с такой политикой гарантируется, что цена выставленного ордера будет хуже текущего рынка. BOC используется для реализации пассивной торговли, чтобы ордер гарантированно не был исполнен сразу при выставлении и не повлиял на текущую ликвидность. Поддерживается только для лимитных и стоп-лимитных ордеров и только в режиме биржевого исполнения.

    Доступность новой политики исполнения для инструментов зависит от вашего брокера.

  2. Платформа переходит на использование компонента Microsoft Edge WebView2 для отображения HTML-страниц.

    По сравнению с устаревшим MSHTML новый компонент существенно расширяет возможности для отображения веб-контента, предоставляя доступ к современным технологиям. Переход на WebView2 позволит улучшить внешний вид некоторых разделов платформы, увеличить их производительность, создать более отзывчивые интерфейсы. В частности, это коснется разделов "Маркет", "Сигналы" и "VPS".
    Полноценная поддержка WebView2 появилась только в Windows 10. Мы рекомендуем всем пользователям по возможности переходить на последние версии операционной системы. При работе под Windows 7 и Wine платформа продолжит использовать устаревший компонент MSHTML, и новые функции в них не будут доступны. Также мы настоятельно рекомендуем устанавливать все доступные обновления операционной системы. Сейчас минимальной рекомендуемой версией является Windows 10 21H2 (build 19044 от ноября 2021).

  3. Улучшена система безопасности в Маркете. Теперь для запуска продукта пользователь должен быть авторизован в платформе своим MQL5-аккаунтом, через который продукт был приобретен. Аккаунт должен быть указан в разделе "Сервис \ Настройки \ Сообщество":


    Укажите аккаунт MQL5 в настройках платформы


    Если аккаунт не указан или указан неверный аккаунт, продукт не запустится, а в журнале платформы появится сообщение вида:
    'ProductName' requires active MQL5 account in Tools->Options->Community
  4. Добавлена команда "Обзор" в контекстное меню раздела истории. Она позволяет открыть торговый отчет по счету:


    Команда для перехода к торговому отчету


  5. Исправлены ошибки отображения диалога двухфакторной авторизации. При наличии в терминале нескольких счетов с одинаковым номером у разных брокеров в форме подключения к счету могло не отображаться поле для ввода одноразового пароля.
  6. Ускорена отрисовка индикаторов со стилем отображения DRAW_COLOR_CANDLES.
  7. Исправлены ошибки построения торгового отчета. В некоторых случаях значения прибыли и эквити на графиках могли отображаться некорректно.
  8. Добавлено отображение показателя "Издержки" в торговом отчете. Он показывает сумму издержек по сделке относительно текущей средней цены инструмента (mid-point spread cost). Фактически это сумма, которую трейдер теряет на спреде при торговле. Доступность этого показателя зависит от брокера.
  9. Обновлены переводы пользовательского интерфейса.
  10. Улучшена стабильность при работе под Wine, в особенности — в системах macOS. Рекомендуем полностью удалить старые терминалы и установить их заново:


  11. Ускорена установка и скачивание обновлений, а также улучшен учет доступности AVX на компьютере пользователя при выборе дистрибутива.
  12. Включена поддержка TLS 1.3 в веб-протоколах. TLS 1.0 отключен как устаревший и небезопасный.
  13. Исправлен учет агентской комиссии в отчетах по торговой истории. Соответствующие операции могли не учитываться при подсчете итоговой прибыли.
  14. Исправлена ошибка, приводившая к невозможности изменить сервер в диалоге подключения к счету. Проблема возникала при наличии в терминале нескольких счетов с одинаковым номером у разных брокеров.
Инсталляторы переводятся на работу только с 64-битными версиями платформы. Поддержка 32-битных версий завершается. Ранее установленные 32-битные версии платформы будут работать до 1 января 2024 года.

MQL5

  1. Добавлено новое значение STAT_COMPLEX_CRITERION в перечисление ENUM_STATISTICS. Оно позволяет получить значение комплексного критерия, рассчитанного в результате оптимизации.
  2. Доработан метод RegressionMetric, используемый для расчета регрессионной метрики по переданной матрице или вектору. Добавлены параметры vector_true и matrix_true для передачи истинных значений, по которым оценивается качество предсказанных данных.
    double vector::RegressionMetric(
       const vector& vector_true,            // истинные значения
       const ENUM_REGRESSION_METRIC  metric  // метрика
       );
     
    double matrix::RegressionMetric(
       const matrix& matrix_true,            // истинные значения
       const ENUM_REGRESSION_METRIC metric   // метрика
       );
     
    vector matrix::RegressionMetric(
       const matrix& matrix_true,            // истинные значения
       const ENUM_REGRESSION_METRIC metric,  // метрика
       const int                      axis   // ось
       );
  3. Добавлен метод LinearRegression. Он возвращает вектор/матрицу с рассчитанными значениями линейной регрессии для переданного вектора/матрицы.
    vector vector::LinearRegression();
     
    matrix matrix::LinearRegression(
       ENUM_MATRIX_AXIS axis=AXIS_NONE       // ось, вдоль которой считается регрессия 
       );
    Пример:
    vector vector_a;
    //--- заполним вектор ценами
    vector_a.CopyRates(_Symbol,_Period,COPY_RATES_CLOSE,1,100);
    //--- получим линейную регрессию
    vector vector_r=vector_a.LinearRegression();
    Визуализация результата в виде графика:


    Визуализация результата, возвращенного методом LinearRegression


  4. Добавлен метод HasNan — возвращает количество NaN значений в матрице/векторе.
    ulong vector::HasNan();
    ulong matrix::HasNan();
    Методы Compare и CompareByDigits при сравнении соответствующей пары элементов, имеющих значения NaN, считают эти элементы равными, тогда как при обычном сравнении чисел с плавающей точкой NaN != NaN.

  5. Изменена структура OnnxTypeInfo, используемая для работы с моделями ONNX (Open Neural Network Exchange):

    struct OnnxTypeInfo
      {
       ENUM_ONNX_TYPE       type;            // тип параметра
       OnnxTensorTypeInfo   tensor;          // описание тензора
       OnnxMapTypeInfo      map;             // описание карты
       OnnxSequenceTypeInfo sequence;        // описание последовательности
      };

    Теперь тип данных в ней указывается при помощи новых подструктур:

    • OnnxTensorTypeInfo — тензор
    • OnnxMapTypeInfo — карта
    • OnnxSequenceTypeInfo — последовательность

    struct OnnxTensorTypeInfo
      {
       ENUM_ONNX_DATATYPE   data_type;       // тип данных в тензоре
       long                 dimensions[];    // количество элементов
      };
    
    struct OnnxMapTypeInfo
      {
       ENUM_ONNX_DATA_TYPE  key_type;        // тип ключа
       OnnxTypeInfo         type_info;       // тип значения
      };
    
    struct OnnxSequenceTypeInfo
      {
       OnnxTypeInfo         type_info;       // тип данных в последовательности
      };
    В зависимости от OnnxTypeInfo::type (ONNX_TYPE_TENSOR, ONNX_TYPE_MAP или ONNX_TYPE_SEQUENCE) заполняется соответствующая подструктура.

  6. Доработана поддержка моделей ONNX.
  7. Добавлены методы CopyIndicatorBuffer, позволяющие получить данные буфера индикатора в вектор.
    bool vector<T>::CopyIndicatorBuffer(long indicator_handle,ulong buffer_index,ulong start_pos,ulong count);
    bool vector<T>::CopyIndicatorBuffer(long indicator_handle,ulong buffer_index,datetime start_time,ulong count);
    bool vector<T>::CopyIndicatorBuffer(long indicator_handle,ulong buffer_index,datetime start_time,datetime stop_time);
  8. Исправлена работа с массивами с двумя и более измерениями в методах FrameAdd и FrameNext.
  9. Исправлена работа метода CRedBlackTree::Remove в стандартной библиотеке.
  10. Внесены исправления в библиотеку нечеткой логики Fuzzy.

MetaEditor

  1. Добавлена интеграция с Copilot — продвинутым инструментом для автоматического дополнения кода. Его работа основывается на моделях OpenAI. Вы вводите комментарий или часть функции, отправляете запрос (промпт), нейросеть анализирует его и предлагает вам варианты кода для реализации вашей идеи.


    Визуализация результата, возвращенного методом LinearRegression


    В зависимости от типа файла, в котором вы работаете, в начало каждого промпта автоматически добавляется строка "MQL5 language", "Python language" или "C++ language". Так нейросеть будет выдавать результат на нужном языке.

    В данный момент Copilot работает бесплатно, его не нужно отдельно включать. В разделе Сервис \ Настройки \ Copilot доступно несколько настроек:


    Настройки Copilot


    Настройки оплаты:

    • Использовать MQL5-аккаунт — в данный момент этот режим работает бесплатно. В последующем вы сможете оплачивать подписку напрямую с баланса вашего аккаунта MQL5.
    • Использовать ключ OpenAI — если вы уже оплатили подписку и у вас есть ключ, можете использовать его.

    Настройки запросов:

    • Модель — нейросеть, которая будет обрабатывать ваши запросы. На данный момент доступны text-davinci-003 и gpt-3.5-turbo. В последующем будет добавлена поддержка gpt-4.
    • Максимум токенов — количество единиц текста, которое модель может возвращать в ответ на промпт.
    • Вариативность — влияет на то, насколько строго нейросеть будет придерживаться промпта. Чем больше значение, тем более случайным может быть результат. В моделях OpenAI соответствует параметру temperature.

  2. Добавлена возможность просматривать свойства моделей ONNX.

    Теперь прямо в редакторе можно в удобном виде посмотреть содержимое файла *.onnx. Чтобы посмотреть, как это выглядит, найдите проект ONNX.Price.Prediction в разделе "Инструменты \ Публичные проекты", а затем нажмите "Присоединиться" в контекстном меню. Проект загрузится на компьютер и появится в Навигаторе.


    Открывайте модели ONNX прямо в MetaEditor


  3. Добавлена возможность визуализации моделей машинного обучения и нейронных сетей через Netron. Этот просмотрщик поддерживает множество популярных моделей: ONNX, TensorFlow Lite, Caffe, Keras, ncnn и т.д.

    Для просмотра модели выберите ее файл в Навигаторе и нажмите "Открыть в Netron". Если эта утилита еще не установлена, будет открыта ее страница на GitHub, откуда вы можете скачать установочный файл для своей операционной системы. Например, Netron-Setup-X.X.X.exe — для Windows. После установки программы модель сразу же будет открываться на просмотр из Навигатора.


    Визуализируйте модели машинного обучения через Netron


    Поддерживаемые форматы:

    • armnn, caffemodel, circle, ckpt, cmf, dlc, dnn, h5, har, hd5, hdf5, hn, keras, kmodel,
    • lite, mar, meta, mge, mlmodel, mlnet, mlpackage, mnn, model, nb, ngf, nn, nnp,
    • om, onnx, ort, paddle, param, pb, pbtxt, pdiparams, pdmodel, pdopt, pdparams, prototxt, pt, pth, ptl,
    • rknn, t7, tfl, tflite, tmfile, tm, tnnproto, torchscript, uff, xmodel

  4. Обновлены переводы пользовательского интерфейса.

Tester

  1. Исправлен расчет показателя "Средняя убыточная сделка" в отчете тестирования. Ранее в расчете могли ошибочно учитываться сделки входа, если за них взималась комиссия.
  2. Доработана настройка пользовательских комиссий в тестере стратегий. Чтобы задать символ, теперь достаточно указать только его название, а не путь целиком.
  3. Обновлены иконки в тестере стратегий. Новые метафоры и современный вид облегчат восприятие информации.

Исправления по крешлогам.

Web Terminal

  1. Доработан раздел торговой истории:

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


    Обновленный раздел торговой истории

  2. Дополнена спецификация контракта по инструментам. Теперь в ней также показываются лимит по объемам, размер и стоимость тика, начальная и хеджированная маржа.
  3. Улучшены цветовые схемы:

    • На графике отложенные ордера теперь отображаются серым цветом, а позиции окрашиваются по направлению: красным на продажу, синим на покупку. При большом количестве операций график не будет выглядеть перегруженным.
    • При просмотре/редактировании позиции подсвечивается только она и ее уровни, все остальные позиции и ордера становятся серыми, а их уровни скрываются с ценовой шкалы. Работать с операциями на графике станет удобнее.
    • Стоп Лоссы теперь показываются не красным, а оранжевым цветом, чтобы не путать их с позициями на продажу.
    • Доработаны иконки, которыми показываются моменты закрытия позиций на графике. Если позиция закрыта по Тейк Профиту, иконка будет зеленой, если по Стоп Лоссу — красной.

  4. Добавлен перевод интерфейса на арабский, болгарский, вьетнамский, греческий, индонезийский, малайский, нидерландский, персидский, польский, тайский, украинский и хинди. Теперь веб-терминал доступен уже на 24 языках.
  5. Исправлен перевод на турецкий язык.
  6. Исправлена модификация и удаление отложенных ордеров в мобильной версии веб-терминала.
  7. Исправлена подсказка о закрытом рынке, отображаемая на графике.
  8. Исправлено отображение прибыли на кнопке закрытия позиции в торговом диалоге. Ошибка возникала при частичном закрытии.
  9. Исправлено отображение торговых уведомлений на графике.
  10. Исправлено изменение объема при помощи стрелок в стакане цен.
  11. Исправлена ошибка, в некоторых случаях приводившая к сбросу настроек индикаторов на графике.
  12. Исправлена проверка имени пользователя при открытии новых счетов. Ранее наличие апострофа в имени считалось ошибкой.
  13. Исправлена обработка реквотов. В некоторых случаях диалог с предложением новых цен мог не отображаться.
  14. Исправлено отображение индикатора Ichimoku Kinko Hyo. Теперь линии Chikou-span, Up kumo и Down kumo отображаются с корректным смещением.
  15. Исправлена проверка начальной маржи при открытии нового ордера. Ошибка возникала при использовании хеджинговой системы учета позиций.
  16. Исправлена прокрутка в окне спецификации контракта.

MQL5.community

  1. Полностью обновлен сайт сети распределенных вычислений MQL5 Cloud Network — https://cloud.mql5.com.

    Узнайте, как использовать мощности тысяч компьютеров по всему миру для оптимизации своих торговых стратегий. Благодаря MQL5 Cloud Network даже самые долгие и тяжелые расчеты можно выполнить в считанные минуты. Здесь же вы узнаете, как стать участником сети и зарабатывать на предоставлении своих вычислительных ресурсов.


    Посетите обновленный сайт MQL5 Cloud Network


  2. Улучшен раздел скриншотов для продуктов в Маркете. Теперь авторы могут загружать иллюстрации размером до 1920*1800 пикселей, что позволит лучше демонстрировать работу приложений. Помимо этого, обновлена галерея скриншотов. В удобной карусели показываются миниатюры изображений, а по клику на них можно открыть полноразмерные картинки.


    Улучшенный раздел скриншотов в Маркете


  3. Улучшен раздел Фриланс. Теперь при размещении первых заказов пользователи будут получать больше подсказок:

    • Примеры технического задания и напоминание о необходимости его прикрепить
    • Инструкции по прохождению шагов
    • Советы по использованию шаблонов

    Все это поможет не запутаться в процессе и получить желаемый результат.


    Фриланс стал более дружелюбным


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

24 марта 2023
MetaTrader 5 build 3660: Улучшения и исправления

Terminal

  1. Исправлены ошибки, в некоторых случаях приводившие к некорректному формированию журнала платформы.
  2. Обновлены переводы пользовательского интерфейса

MQL5

  • Исправлена проверка глобальных переменных. При объявлении одинаковых переменных в разных пространствах имен компилятор выдавал ошибочное предупреждение о том, что переменная уже объявлена.

Web Terminal

  1. Добавлен перевод пользовательского интерфейса на португальский. Теперь веб-терминал доступен на 12 языках.
  2. Исправлен диалог добавления индикатора Standard Deviation.
  3. Мелкие исправления и улучшения.
17 марта 2023
MetaTrader 5 build 3640: веб-терминал на 11 языках

Web Terminal

  1. Добавлены переводы интерфейса на 10 широко используемых языков: русский, французский, немецкий, итальянский, японский, корейский, испанский, турецкий, китайский упрощенный и традиционный. В ближайших версиях этот список будет расширяться и дальше. Для переключения интерфейса на свой язык воспользуйтесь меню:


    Интерфейс веб-терминала доступен на 11 языках


  2. Оптимизирован механизм подключения к торговому серверу.

MQL5

  1. MQL5: Добавлены флаги COPY_TICKS_VERTICAL и COPY_RATES_VERTICAL для методов CopyTicks, CopyTicksRange и CopyRates соответственно.

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

    const long   ExtOutputShape[] = {1,1};    // форма выходных данных модели
    const long   ExtInputShape [] = {1,10,4}; // форма входных данных модели
    #resource "Python/model.onnx" as uchar ExtModel[]// модель в виде ресурса
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    int OnStart(void)
      {
       matrix rates;
    //--- получаем 10 баров
       if(!rates.CopyRates("EURUSD",PERIOD_H1,COPY_RATES_OHLC,2,10))
          return(-1);
    //--- подаем на вход набор векторов OHLC
       matrix x_norm=rates.Transpose();
       vector m=x_norm.Mean(0);               
       vector s=x_norm.Std(0);
       matrix mm(10,4);
       matrix ms(10,4);

    Теперь достаточно при вызове метода указать дополнительный флаг COPY_RATES_VERTICAL (COPY_TICKS_VERTICAL для тиков), чтобы избавиться от лишней операции трансформации данных:

    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    int OnStart(void)
      {
       matrix rates;
    //--- получаем 10 баров
       if(!rates.CopyRates("EURUSD",PERIOD_H1,COPY_RATES_OHLC|COPY_RATES_VERTICAL,2,10))
          return(-1);
    //--- подаем на вход набор векторов OHLC
  2. Добавлено значение CHART_SHOW_TRADE_HISTORY в перечисление ENUM_CHART_PROPERTY_INTEGER. Свойство управляет отображением сделок из торговой истории на графике. Для получения и установки свойства используйте функции ChartGetInteger и ChartSetInteger. Подробнее об отображении сделок на графике читайте в документации платформы.

MetaEditor

  • Исправлено зависание интерфейса, происходившее в редких случаях при компиляции файлов.

Terminal

  • Исправления по крешлогам.
10 марта 2023
MetaTrader 5 build 3620: улучшения веб-терминала, поддержка ONNX и ускоренное умножение матриц в MQL5

Terminal

  1. Исправлена ошибка при подсчете итоговой прибыли в торговом отчете.
  2. Обновлены фундаментальные данные по торговым инструментам, доступные через Обзор рынка.
  3. Исправлен запуск торговой платформы под Wine 7.0.1 при работе в Linux-системах.
  4. Исправлено добавление символов в Обзор рынка через строку поиска. Символ, найденный по описанию, было невозможно добавить в список кликом мыши на его строке.

MQL5

  1. Добавлена поддержка работы с моделями ONNX (Open Neural Network Exchange).

    ONNX — открытая библиотека для построения нейронных сетей глубокого обучения. Этот формат поддерживается множеством платформ, включая Chainer, Caffee2 и PyTorch. Создав ONNX модель при помощи специализированных инструментов, вы можете интегрировать ее в свою MQL5-программу и использовать для принятия торговых решений.

    Описание всех поддерживаемых функций доступно в документации. Пример работы с тестовой моделью доступен в публичных проектах в MetaEditor. Найдите проект ONNX.Price.Prediction в разделе "Инструменты \ Публичные проекты", а затем нажмите "Присоединиться" в контекстном меню. Проект загрузится на компьютер и появится в Навигаторе:


    Пример работы с ONNX моделю в публичных проектах


    Скомпилируйте проект и запустите его на EURUSD H1, чтобы посмотреть результат.

    Помимо готовой модели и MQL5-кода для ее запуска, в проекте также доступен Python скрипт PricePredictionTraining.py. Он показывает, как самостоятельно создать модель ONNX. Для работы скрипта установите на свой компьютер Python, а также необходимые модули из командной строки:

    python.exe -m pip install --upgrade pip
    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
    Подробные инструкции по работе с ONNX доступны в документации.

  2. Добавлена поддержка нового алгоритма умножения матриц General Matrix Multiplication (GeMM). Он позволяет значительно ускорить вычисления на большинстве процессоров за счет распараллеливания задач и более правильного использования кэшей L1/L2/L3. Скорость вычисления при этом сравнима с такими известными пакетами, как Math Kernel Library (MKL) и OpenBLAS. В ближайшее время мы опубликуем подробные сравнительные тесты.

    Новый алгоритм на данный момент поддерживается в методе matrix::GeMM. Если ваш процессор поддерживает инструкции AVX и FMA (большинство процессоров, выпущенных после 2013 года), алгоритм будет задействован автоматически.

  3.  Добавлена поддержка передачи матриц и векторов в DLL. Теперь вы можете импортировать функции, использующие этот тип данных, из внешних библиотек.

    Матрицы и векторы передаются в DLL в виде указателя на буфер. Например, для передачи матрицы типа float, соответствующий параметр экспортируемой из DLL-функции должен принимать указатель на буфер с типом float. Пример:

    MQL5
    #import "mmlib.dll"
    bool sgemm(uint flags,matrix<float> &C,const matrix<float> &A,const matrix<float> &B,ulong M,ulong N,ulong K,float alpha,float beta);
    #import
    C++
    extern "C" __declspec(dllexport) bool sgemm(UINT flags,float *C,const float *A,const float *B,UINT64 M,UINT64 N,UINT64 K,float alpha,float beta)
    Для правильной обработки матриц и векторов, кроме их буферов, следует передавать их размеры.

  4. Добавлена новая функция CopySeries для копирования синхронизированных таймсерий из MqlRates в отдельные массивы.

    Функция CopySeries позволяет за один раз получать только нужные таймсерии в разные указанные массивы, при этом они все синхронизированы между собой. Это означает, что все значения в полученных массивах по конкретному индексу N будут принадлежать одному и тому же бару на указанной паре символ/таймфрейм. В этом случае не требуется заботиться о том, чтобы все полученные таймсерии были синхронизированы по времени открытия бара.

    В отличие от CopyRates, которая возвращает полный набор таймсерий в виде массива MQLRates, функция CopySeries позволяет программисту получать только нужные таймсерии на основе комбинации флагов, указывающих тип запрашиваемых таймсерий. При этом порядок массивов, передаваемых в функцию, должен соответствовать порядку полей в структуре MqlRates:

    struct MqlRates
      {
       datetime time;         // время начала периода
       double   open;         // цена открытия
       double   high;         // наивысшая цена за период
       double   low;          // наименьшая цена за период
       double   close;        // цена закрытия
       long     tick_volume;  // тиковый объем
       int      spread;       // спред
       long     real_volume;  // биржевой объем
      }

    Таким образом, если необходимо получить значения таймсерий time, close и real_volume для последних 100 баров текущего символа/таймфрейма, вызов должен быть следующим:

    datetime  time[];
    double    close[];
    long      volume[];
    CopySeries(NULL,0,0,100,COPY_RATES_TIME|COPY_RATES_CLOSE|COPY_RATES_VOLUME_REAL,time,close,volume);
    

    При этом важен порядок массивов "time, close, volume" — он должен соответствовать порядку полей в структуре MqlRates. А вот порядок значений в маске rates_mask значения не имеет, маска могла быть такой :

    COPY_RATES_VOLUME_REAL|COPY_RATES_TIME|COPY_RATES_CLOSE

    Пример

    //--- input parameters
    input datetime InpDateFrom=D'2022.01.01 00:00:00';
    input datetime InpDateTo  =D'2023.01.01 00:00:00';
    input uint     InpCount   =20;
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart(void)
      {
    //--- массивы для получения таймсерий из ценовой структуры Rates
       double   open[];
       double   close[];
       float    closef[];
       datetime time1[], time2[];
    //---запросим цены закрытия в массив типа double
       ResetLastError();
       int res1=CopySeries(NULL, PERIOD_CURRENT, 0, InpCount,
                           COPY_RATES_TIME|COPY_RATES_CLOSE, time1, close);
       PrintFormat("1. CopySeries  returns %d values. Error code=%d", res1, GetLastError());
       ArrayPrint(close);
       
    
    //--- теперь запросим еще цены открытия, а цены закрытия в массив типа float
       ResetLastError();
       int res2=CopySeries(NULL, PERIOD_CURRENT, 0, InpCount,
                           COPY_RATES_TIME|COPY_RATES_CLOSE|COPY_RATES_OPEN, time2, open, closef);
       PrintFormat("2. CopySeries  returns %d values. Error code=%d", res2, GetLastError());
       ArrayPrint(closef);
    //--- сравним полученные данные
       if((res1==res2) && (time1[0]==time2[0]))
         {
          Print("  | Time             |    Open      | Close double | Close float |");
          for(int i=0; i<10; i++)
            {
             PrintFormat("%d | %s |   %.5f    |   %.5f    |   %.5f   |",
                         i, TimeToString(time1[i]), open[i], close[i], closef[i]);
            }
         }
    /*  Результат
            1. CopySeries  returns 0 values. Error code=0
            [ 0] 1.06722 1.06733 1.06653 1.06520 1.06573 1.06649 1.06694 1.06675 1.06684 1.06604
            [10] 1.06514 1.06557 1.06456 1.06481 1.06414 1.06394 1.06364 1.06386 1.06239 1.06247
            2. CopySeries  returns 0 values. Error code=0
            [ 0] 1.06722 1.06733 1.06653 1.06520 1.06573 1.06649 1.06694 1.06675 1.06684 1.06604
            [10] 1.06514 1.06557 1.06456 1.06481 1.06414 1.06394 1.06364 1.06386 1.06239 1.06247
              | Time             |    Open      | Close double | Close float |
            0 | 2023.03.01 17:00 |   1.06660    |   1.06722    |   1.06722   |
            1 | 2023.03.01 18:00 |   1.06722    |   1.06733    |   1.06733   |
            2 | 2023.03.01 19:00 |   1.06734    |   1.06653    |   1.06653   |
            3 | 2023.03.01 20:00 |   1.06654    |   1.06520    |   1.06520   |
            4 | 2023.03.01 21:00 |   1.06520    |   1.06573    |   1.06573   |
            5 | 2023.03.01 22:00 |   1.06572    |   1.06649    |   1.06649   |
            6 | 2023.03.01 23:00 |   1.06649    |   1.06694    |   1.06694   |
            7 | 2023.03.02 00:00 |   1.06683    |   1.06675    |   1.06675   |
            8 | 2023.03.02 01:00 |   1.06675    |   1.06684    |   1.06684   |
            9 | 2023.03.02 02:00 |   1.06687    |   1.06604    |   1.06604   |
    */
      }
  5. Исправлена ошибка, в редких случаях приводившая к получению некорректного тикета ордера после отправки запроса функцией OrderSend. Ошибка могла возникать при параллельной торговле на одном счете через разные платформы.
  6. Исправлена ошибка импорта EX5-библиотек. Она возникала, если имя импортируемой библиотеки совпадало с именем файла, в который она импортируется.

MetaEditor

  1.  Добавлена рассылка Push-уведомлений участникам групповых проектов. Теперь каждый участник всегда будет в курсе любых изменений в файлах или настройках проекта. Для получения уведомлений укажите свой MetaQuotes ID в разделе "Настройки \ Безопасность" вашего профиля MQL5.community.


    Push-уведомления об изменениях в проекте


  2. Обновлены иконки файлов в Навигаторе. Новые более простые метафоры облегчат восприятие информации.

Tester

  1. Исправлена ошибка, приводившая к обрезанию входного строкового параметра, если в нем присутствовал символ "|".

MetaTrader 5 Web Terminal build 3620

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


    Новые цветовые схемы для веб-терминала


  2. Переработано окно спецификации торгового инструмента. Все данные перекомпонованы в компактные логические блоки для более удобного просмотра.


    Обновленное окно спецификации торгового инструмента


  3. Исправлено открытие реальных счетов через веб-терминал. В некоторых случаях после заполнения регистрационной формы сервер мог возвращать ошибку.
  4. Исправлена ошибка в торговом диалоге. Если пользователь открывал диалог модификации позиции, а затем закрывал позицию кнопкой "X" в окне инструментов, содержимое диалога не сбрасывалось. Теперь в этом случае диалог будет автоматически возвращаться в режим выставления нового ордера.
  5. Исправлено отображение поля Server в диалоге управления счетами.
  6. Исправлено отображение текущего таймфрейма на панели инструментов.
  7. Исправлено отображение объема в количестве единиц базового актива в торговом диалоге.
  8. Исправлена модификация уровней "Стоп Лосс" и "Тейк Профит". В некоторых случаях модификация одного значения могла приводить к сбросу второго.
  9. Исправлено отображение предупреждения о рисках инвестора.
6 марта 2023
MetaTrader 5 для iPhone/iPad: улучшение торговых и аналитических функций графиков
  1. Добавлена возможность выставлять стоп и стоп-лимитные ордера с графика.

    Теперь вы не ограничены только лимитными ордерами. Выбирайте нужный тип отложенного ордера, последовательно нажимая соответствующую кнопку на нижней панели графика.


    Выставляйте стоп и стоп-лимитные ордера с графика


  2. Добавлена возможность переходить к закрытию позиций и удалению отложенных ордеров с графика. Выберите иконку позиции или уровень ордера на графике, и на нижней торговой панели появится соответствующая команда:


    Управляйте позициями и ордерами с графика


  3. Улучшена функция сдвига правой границы ценового графика. Теперь для изменения сдвига достаточно прокрутить график к последней цене до появления вертикального разделителя. Далее потяните за треугольник у нижней шкалы графика:


    Изменяйте отступ графика, потянув за треугольник у нижней шкалы


  4. Добавлена возможность копировать аналитические объекты на графике. Это поможет быстрее наносить разметку. Вызовите меню объекта долгим нажатием на нем и выберите "Копировать":

    Создавайте копии аналитических объектов


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


    Управляйте отображением индикаторов на разных таймфреймах


  6. Добавлено отображение комиссий по инструменту в окне спецификации.


    Узнайте размер комиссии в спецификации инструмента


  7. Добавлена ссылка на восстановление пароля к счету. Доступ можно восстановить только через брокера, у которого был открыт счет. Ссылка покажет контактные данные, по которым можно обратиться за помощью.


    Помощь при восстановлении пароля


  8. Добавлена возможность поделиться ссылкой на канал в сообществе MQL5.community.


    Делитесь ссылкой на свой канал через приложение


  9. Улучшен пользовательский опыт при подключении к счету с ограниченной торговлей.

    Торговля на счете может быть ограничена по разным причинам: подключение к счету в инвесторском режиме, не принято соглашение, не пройдена верификация у брокера и т.д. Пользователю было сложно понять, почему торговые функции в приложении отсутствуют.

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


    Помощь пользователю при ограниченной торговле


  10. Улучшена работа с SSL-сертификатами, используемыми при расширенной аутентификации.

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


    Улучшена работа с SSL-сертификатами


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

    Помимо этого, появилась возможность экспортировать сертификаты в файлы, чтобы использовать их на других устройствах. Для этого перейдите в раздел "Настройки \ Сертификаты" и нажмите "Экспорт" в меню сертификата.

  11. Построение ценовых графиков переведено на Metal — последнее поколение графического API, используемого в устройствах от Apple. Это существенно увеличит производительность при отображении графиков, индикаторов и объектов.
  12. Исправлена подстановка уровней Стоп Лосс и Тейк Профит в стакане цен. Теперь для счетов, работающих в режиме FIFO, значения стоп-уровней будут автоматически устанавливаться в соответствии со стоп-уровнями уже открытых позиций по тому же инструменту. Это необходимо для соблюдения правила FIFO.
  13. Исправлено реквотирование. При получении реквота пользователю дается короткое время на решение, принимать новые цены или нет. При отсутствии решения запрос автоматически отклоняется, а окно реквота закрывается.
  14. Исправлено отображение времени в разделе "График" при использовании темной темы интерфейса.
16 декабря 2022
MetaTrader 5 build 3550: улучшения и исправления

Terminal

  1. Terminal: Обновлены переводы пользовательского интерфейса.
  2. Исправления по крешлогам.

Web Terminal

9 декабря 2022
MetaTrader 5 build 3540: 2FA/TOTP аутентификация и улучшенный Обзор рынка в веб-терминале

Web Terminal

  1. Добавлена поддержка 2FA/TOTP-аутентификации с помощью Google Authenticator и других подобных приложений.

    Использование двухфакторной аутентификации позволяет дополнительно защитить ваш торговый аккаунт от неавторизованного доступа даже в случае утечки логина и постоянного пароля к нему. Существует множество мобильных приложений, которые позволяют проводить двухэтапную аутентификацию с помощью алгоритма Time-based One-time Password Algorithm (TOTP). Среди наиболее известных Google Authenticator, Microsoft Authenticator, LastPass Authenticator и Authy. Теперь в клиентском терминале MetaTrader 5 можно авторизоваться с помощью одноразовых паролей, получаемых из таких Authenticator-приложений.

    Чтобы включить двухэтапную аутентификацию, сначала авторизуйтесь в веб-терминале MetaTrader 5 обычным способом. Затем нажмите на свой счет в меню и выберите "Enable 2FA/TOTP " в открывшемся диалоге. Запустите Authenticator на мобильном телефоне, нажмите в нем кнопку "+" для добавления вашего торгового счета и отсканируйте QR-код из терминала. Введите полученный код в поле "One-time password" и нажмите кнопку "Enable 2FA" — секрет для вашего счета будет добавлен на торговом сервере брокера.


    Добавлена поддержка 2FA/TOTP-аутентификации с помощью Google Authenticator и других подобных приложений


    Теперь сохраненный секрет будет использоваться в приложении Authenticator для генерации OTP-пароля при каждом последующем подключении. Срок действия каждого пароля составляет 30 секунд, затем генерируется новый.


    Для подключения к торговому счету теперь необходимо ввести дополнительный OTP пароль из приложения Authenticator


    В диалоге с QR-кодом для привязки к генератору также отображается резервный код — сохраните его в безопасном месте. Если вы потеряете доступ к привязанному устройству, он позволит заново добавить счет в приложение Authenticator.

    Если вы решите удалить сохраненный секрет из приложения Authenticator, предварительно отключите использование 2FA/TOTP-аутентификации, используя соответствующую команду в меню счета. Если 2FA/TOTP-аутентификация недоступна на вашем счете, попросите брокера включить эту опцию.

  2. Расширено количество информации, отображаемой в Market Watch. Теперь помимо текущих цен Bid/Ask и процента изменения цены вы можете посмотреть:

    • Максимальную и минимальную цену Bid/Ask за текущую торговую сессию
    • Цены открытия текущей и закрытия предыдущей торговой сессии

    Для настройки отображаемой информации используйте контекстное меню:


    Дополнительная информация в Обзоре рынка


  3. Добавлен показ уведомления о рисках при включении соответствующей настройки на стороне брокера. Некоторые регуляторы требуют, чтобы трейдер прочел и принял уведомление перед тем, как приступить к торговле.
  4. Исправлено отображение верхней панели инструментов на моделях iPhone с "челкой" в верхней части экрана. В некоторых случаях она могла закрывать кнопки на панели.
  5. Исправлено отображение итоговых финансовых показателей счета (прибыль, эквити и т.д.) в браузере Google Chrome. В некоторых случаях значения могли не обновляться.

Terminal

  1. Оптимизировано и значительно ускорено открытие диалога для создания демо-счетов.
  2. Обновлены переводы пользовательского интерфейса.
  3. Исправления по крешлогам.

MQL5

  1. В класс COpenCL стандартной библиотеки добавлены новые методы:

    • BufferFromMatrix — заполнение буфера устройства данными из матрицы
    • BufferToMatrix — чтение данных из буфера устройства в матрицу
    • ContextCreate — создание контекста устройства (первая часть метода Initialize)
    • ProgramCreate — создание программы на основе исходного кода OpenCL (вторая часть метода Initialize)
    • ContextClean — освобождение всех данных, принадлежащих контексту устройства (аналог метода Shutdown, но без удаления контекста)
    • GetDeviceInfoInteger — получение целочисленного свойства устройства
    • GetKernelInfoInteger — получение целочисленного свойства кернела
    • GetDeviceInfo — получение любого одиночного целочисленного свойства устройства, не присутствующего в перечислении ENUM_OPENCL_PROPERTY_INTEGER

    Пример использования GetDeviceInfo:
    long preferred_workgroup_size_multiple=OpenCL.GetDeviceInfo(0x1067);
  2. Добавлены значения TERMINAL_CPU_NAME и TERMINAL_OS_VERSION в перечисление ENUM_TERMINAL_INFO_STRING. Они позволяют получить наименование процессора и операционной системы пользователя.
    void OnStart()
      {
       string cpu,os;
    //---
       cpu=TerminalInfoString(TERMINAL_CPU_NAME);
       os=TerminalInfoString(TERMINAL_OS_VERSION);
       PrintFormat("CPU: %s, OS: %s",cpu,os);
      }
    
    Результат:
    CPU: Intel Xeon  E5-2630 v4 @ 2.20GHz, OS: Windows 10 build 19045
  3. Исправлена работа параметра "table_or_sql" в функциях DatabasePrint и DatabaseExport. Теперь в нем можно передавать имя таблицы, а не только SQL-запрос.

MetaEditor

  1. Исправлена проверка на максимальное количество столбцов в базе данных, которые могут быть отображены. Теперь отобразить можно до 64 колонок.
  2. Исправлена работа точек останова в коротких конструкциях вида IF[ if(cond) break; ].
25 ноября 2022
MetaTrader 5 build 3520: добавлена 2FA/TOTP аутентификация с помощью Google Authenticator

Terminal

  1. Добавлена поддержка 2FA/TOTP-аутентификации с помощью Google Authenticator и других подобных приложений.

    Использование двухфакторной аутентификации позволяет дополнительно защитить ваш торговый аккаунт от неавторизованного доступа даже в случае утечки логина и постоянного пароля к нему. Существует множество мобильных приложений, которые позволяют проводить двухэтапную аутентификацию с помощью алгоритма Time-based One-time Password Algorithm (TOTP). Среди наиболее известных Google Authenticator, Microsoft Authenticator, LastPass Authenticator и Authy. Теперь в клиентском терминале MetaTrader 5 можно авторизоваться с помощью одноразовых паролей, получаемых из таких Authenticator-приложений.

    Чтобы включить двухэтапную аутентификацию, сначала авторизуйтесь в клиентском терминале MetaTrader 5 обычным способом. Затем правой кнопкой по торговому счету вызовите меню и выполните команду "Разрешить 2FA/TOTP". Запустите Authenticator на мобильном телефоне, нажмите в нем кнопку "+" для добавления вашего торгового счета и отсканируйте QR-код из терминала. Введите полученный код в поле "One-time password" и нажмите кнопку "Enable 2FA" — секрет для вашего счета будет добавлен на торговом сервере брокера.


    Добавлена поддержка 2FA/TOTP-аутентификации с помощью Google Authenticator и других подобных приложений

    Теперь сохраненный секрет будет использоваться в приложении Authenticator для генерации OTP-пароля при каждом последующем подключении. Срок действия каждого пароля составляет 30 секунд, затем генерируется новый.



    Для подключения к торговому счету теперь необходимо ввести дополнительный OTP пароль из приложения Authenticator

    Если вы решите удалить сохраненный секрет из приложения Authenticator, предварительно отключите использование 2FA/TOTP-аутентификации, используя соответствующую команду контекстного меню счета. Если 2FA/TOTP-аутентификация недоступна на вашем счете, попросите брокера включить эту опцию.

MQL5

  1. Исправлена работа функции CopyTicks для пользовательских торговых инструментов. В некоторых случаях при работе с кастомными символами вместо запрошенных данных возвращались начальные тики прошлой торговой сессии.

  2. Для получения информации о последней ошибке OpenCL в перечисления добавлены новые значения, которые позволяют получить код ошибки и текстовое описание.
    1. В перечисление ENUM_OPENCL_PROPERTY_INTEGER добавлено значение CL_LAST_ERROR (код 4094) 

      Для получения последней ошибки OpenCL через CLGetInfoInteger параметр handle игнорируется, то есть не имеет значения. Описание ошибок: https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS.
      Для неизвестного кода ошибки вернётся строка "unknown OpenCL error N", где вместо N будет код ошибки.

      Пример:
      //--- первый параметр handle игнорируется при получении кода последней ошибки
      int code = (int)CLGetInfoInteger(0,CL_LAST_ERROR);

    2. В перечисление ENUM_OPENCL_PROPERTY_STRING добавлено значение CL_ERROR_DESCRIPTION (4093).
      Текстовое описание ошибки OpenCL можно получить с помощью CLGetInfoString. Описание ошибок: https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS.

      При использовании CL_ERROR_DESCRIPTION в качестве параметра handle в CLGetInfoString следует передать код ошибки. Если вместо кода ошибки передать CL_LAST_ERROR, то функция вернёт описание последней ошибки.

      Пример:
      //--- получить код последней OpenCL ошибки
      int    code = (int)CLGetInfoInteger(0,CL_LAST_ERROR);
      string desc; // для получения текстового описания ошибки
      
      //--- используем код ошибки для получения текстового описания ошибки
      if(!CLGetInfoString(code,CL_ERROR_DESCRIPTION,desc))
         desc = "cannot get OpenCL error description, " + (string)GetLastError();
      Print(desc);
      
      
      //--- чтобы получить описание последней OpenCL ошибки без предварительного получения кода, нужно передать CL_LAST_ERROR  
      if(!CLGetInfoString(CL_LAST_ERROR,CL_ERROR_DESCRIPTION, desc))
         desc = "cannot get OpenCL error description, " + (string)GetLastError();
      Print(desc);
      Пока в качестве описания ошибки отдаётся имя внутреннего перечисления, расшифровку которого можно посмотреть на странице https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS. Например, если получено значение CL_INVALID_KERNEL_ARGS, описание для него "Returned when enqueuing a kernel when some kernel arguments have not been set or are invalid."

  3. Исправлена работа метода matrix::MatMul. При работе с матрицами большого размера на некоторых размерах терминал аварийно завершал работу.

  1. Исправления по крешлогам.
18 ноября 2022
MetaTrader 5 build 3510: улучшения веб-терминала

MetaTrader 5 WebTerminal

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

    В мобильной версии в раздел торговой истории добавлена сортировка операций и фильтрация по глубине


    Операции можно отcортировать по основным параметрам: дате, тикету, символу, объему и т.д.

  2. Улучшен доступ к информации о ваших торговых счетах.

    • В десктопной версии данные текущего счета в меню-бутерброде теперь кликабельны. Нажав на счет, вы перейдете к просмотру его деталей.
    • В мобильной версии отображение текущего счета добавлено в разделе "Settings". Нажав на счет, вы перейдете к просмотру его деталей.


    Улучшен доступ к информации о ваших торговых счетах

  3. Исправлено отображение типа счета в окне управления счетами.
  4. Исправлено отображение эквити и свободной маржи после обновления страницы с веб-терминалом в мобильных браузерах.
  5. Исправлено отображение нижней панели в мобильном браузере Firefox.

Terminal

  1. Terminal: Исправлена ошибка в расчете графиков баланса и эквити в торговом отчете.

MQL5

  1. Изменилось поведение typename(expr). Теперь функция отдает полный тип с модификаторами и размерностями (для массивов):
    class A
      {
      };
    
    void OnStart(void)
      {
       const A *const arr[][2][3]={};
       Print(typename(arr));
      }
    
    Результат:
    "class A const * const [][2][3]"

Исправления по крешлогам.
11 ноября 2022
MetaTrader 5 build 3500: улучшения и исправления

Terminal

  1. В контекстное меню разделов "Торговля" и "История"  добавлена команда для доступа к новому торговому отчету:

    Добавлена команда для доступа к новому торговому отчету


    Торговый отчет включает в себя:
    • Помесячные показатели прироста в виде графика и таблицы
    • График изменения эквити
    • Лепестковую диаграмму, позволяющую быстро оценить состояние счета
    • Статистику сделок по инструментам
    • Множество дополнительных показателей для анализа торговли

  2. Исправлен расчет начального депозита в торговом отчете.
  3. Исправлена установка уровней "Стоп Лосс" и "Тейк Профит" при использовании панелей быстрой торговли на графике и в "Обзоре рынка". Уровни могли ошибочно наследоваться от ранее открытых позиций, даже если это не требовалось (функционал предназначен для счетов FIFO).
  4. Обновлены переводы пользовательского интерфейса.

MQL5

  1. Исправлена ошибка компилятора, которая позволяла обращаться к полю структуры по константной строке, значением которой является имя поля.
  2. Исправлена проверка состояния клавиш с помощью TerminalInfoInteger(TERMINAL_KEYSTATE_*).

Исправления по крешлогам.


MetaTrader 5 WebTerminal build 3500

  1. Исправлено закрытие позиций при получении реквота.
  2. Исправлено переподключение к серверу после разворачивания окна браузера, которое было неактивным в течение продолжительного времени.
  3. Исправлено отображение кредитных средств на счете.
  4. Множество других улучшений и исправлений.

4 ноября 2022
MetaTrader 5 build 3490: мобильная версия веб-терминала и новые методы матриц в MQL5

Мобильная версия веб-терминала

В новой версии веб-терминала добавлена полноценная поддержка мобильных устройств. Теперь его интерфейс автоматически адаптируется по размеру экрана, позволяя пользователям удобно работать в платформе на телефонах и планшетах с iOS и Android:

В новой версии веб-терминала добавлена полноценная поддержка мобильных устройств.

Помимо этого, в веб-терминал внесено множество исправлений и улучшений.

Новый веб-терминал MetaTrader 5 поддерживает все функции, которые нужны современному трейдеру. Приложение позволяет:

  • Работать с демонстрационными и реальными счетами
  • Получать котировки любых финансовых инструментов
  • Торговать на любых рынках
  • Проводить технический анализ котировок при помощи 30+ индикаторов и 20 графических объектов
  • Анализировать данные Экономического календаря


Terminal

  1. Расширены функции диспетчера задач. Теперь он позволяет отслеживать потребляемые ресурсы еще точнее.
    • Добавлен показ размера стеков для потоков
    • Добавлено отображение количества переключений контекстов
    • Добавлено распознавание системных потоков и потоков в сторонних DLL
    • Добавлено отображение времени работы в режиме ядра. Увеличение этого показателя по сравнению с временем работы в пользовательском режиме может говорить о проблемах на уровне системы: проблемы в драйверах, аппаратные ошибки, медленное оборудование. Подробнее читайте в документации Microsoft.
    • Добавлено отображение времени работы в режиме пользователя.

    Расширены функции диспетчера задач. Теперь он позволяет отслеживать потребляемые ресурсы еще точнее.


  2. В настройки терминала добавлена вкладка OpenCL для управления доступными устройствами. Новый менеджер OpenCL позволяет явно указывать устройства, которые будут использоваться для расчетов.

    В настройки терминала добавлена вкладка OpenCL для управления доступными устройствами.

  3. Добавлена подстановка уровней Стоп Лосс и Тейк Профит в стакане цен для счетов, работающих в режиме FIFO (может быть включен на стороне брокера).

    Режим FIFO подразумевает, что позиции по каждому инструменту должны закрываться в том порядке, в каком они были открыты. Чтобы закрытие позиций по стоп-уровням всегда соответствовало правилу FIFO, на стороне клиентского терминала реализована следующая логика:

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

    Теперь при открытии стакана цен по инструменту, по которому уже есть позиции, в поля Стоп Лосс и Тейк Профит будут автоматически проставляться уровни существующих позиций (если таковые были установлены).

  4. Исправлено удаление уровней Стоп Лосс и Тейк Профит кнопками "Х" в разделе "Инструменты\Торговля". Ошибка возникала при отключенной функции быстрой торговли. Теперь при нажатии кнопки будет открываться торговый диалог с пустым значением соответствующего уровня.

  5. Внесены правки в торговый отчет — исправлены подписи на графиках и расчёт итоговой комиссии. Кроме того, в некоторых случаях показывался некорректный Profit в статистике отчета, а также неверные значения в тултипах при наведении на графики эквити и баланса.

MQL5

  1. Добавлены методы векторов и матриц CopyTicks и CopyTicksRange. Они позволяют легко копировать массивы тиковых ценовых данных в векторы и матрицы.
    bool matrix::CopyTicks(string symbol,uint flags,ulong from_msc,uint count);
    bool vector::CopyTicks(string symbol,uint flags,ulong from_msc,uint count);
    
    bool matrix::CopyTicksRange(string symbol,uint flags,ulong from_msc,ulong to_msc);
    bool matrix::CopyTicksRange(string symbol,uint flags,ulong from_msc,ulong to_msc);
    Тип копируемых данных указывается в параметре flags при помощи перечисления ENUM_COPY_TICKS. Доступны следующие значения:
    COPY_TICKS_INFO    = 1,       // тики, вызванные изменениями Bid и/или Ask
    COPY_TICKS_TRADE   = 2,       // тики, вызванные изменениями Last и Volume
    COPY_TICKS_ALL     = 3,       // все тики, в которых есть изменения
    COPY_TICKS_TIME_MS = 1<<8,    // время в миллисекундах
    COPY_TICKS_BID     = 1<<9,    // цена Bid
    COPY_TICKS_ASK     = 1<<10,   // цена Ask
    COPY_TICKS_LAST    = 1<<11,   // цена Last
    COPY_TICKS_VOLUME  = 1<<12,   // объем
    COPY_TICKS_FLAGS   = 1<<13,   // флаги тика
    При выборе нескольких типов данных (доступно только для матриц) порядок строк в матрице будет соответствовать порядку значений в перечислении.

  2. Расширены возможности методов matrix::Assign и vector::Assign.
    Теперь матрице можно назначить одномерный массив или вектор:
    bool matrix::Assign(const vector &vec);
    Результатом будет однострочная матрица.
    Также вектору теперь можно назначить матрицу (будет выполнено сглаживание матрицы):
    bool vector::Assign(const matrix &mat);
    
  3. Добавлены методы Swap для векторов и матриц.
    bool vector::Swap(vector &vec);
    bool vector::Swap(matrix &vec);
    bool vector::Swap(double &arr[]);
    bool matrix::Swap(vector &vec);
    bool matrix::Swap(matrix &vec);
    bool matrix::Swap(double &arr[]);
    Каждый массив, вектор или матрица ссылаются на буфер памяти, который содержит элементы данного объекта. Метод Swap фактически меняет местами указатели на данные буферы, не проводя записи элементов в памяти. Поэтому матрица остается матрицей, а вектор вектором. При обмене матрицы и вектора вы получите однострочную матрицу с элементами вектора и вектор с элементами матрицы в плоском представлении (смотрите метод Flat).
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //---
      matrix a= {{1, 2, 3}, {4, 5, 6}};
      Print("a before Swap: \n", a);
      matrix b= {{5, 10, 15, 20}, {25, 30, 35, 40}, {45, 50, 55, 60}};
      Print("b before Swap: \n", b);  
    //--- обменяем указатели на матрицы местами
      a.Swap(b);
      Print("a after Swap: \n", a);
      Print("b after Swap: \n", b);
      /*
      a before Swap:
      [[1,2,3]
      [4,5,6]]
      b before Swap:
      [[5,10,15,20]
      [25,30,35,40]
      [45,50,55,60]]
      
      a after Swap:
      [[5,10,15,20]
      [25,30,35,40]
      [45,50,55,60]]
      b after Swap:
      [[1,2,3]
      [4,5,6]]
      */
      vector v=vector::Full(10, 7);
      Print("v before Swap: \n", v);
      Print("b before Swap: \n", b);
      v.Swap(b);
      Print("v after Swap: \n", v);
      Print("b after Swap: \n", b);
      /*
      v before Swap:
      [7,7,7,7,7,7,7,7,7,7]
      b before Swap:
      [[1,2,3]
      [4,5,6]]
      
      v after Swap:
      [1,2,3,4,5,6]
      b after Swap:
      [[7,7,7,7,7,7,7,7,7,7]]
      */
     }
    Метод Swap также позволяет работать с динамическими массивами (массив фиксированного размера в качестве параметра передавать нельзя). При этом массив может быть любой размерности, но согласованного размера. Это означает, что общий размер матрицы или вектора должен быть кратен нулевой размерности массива. Нулевой размерностью массива называется количество элементов, которые содержатся по первому индексу массива. Например, для динамического трехмерного массива double array[][2][3] нулевой размерностью будет произведение размеров второго и третьего измерения, то есть 2x3=6. Значит, такой массив можно использовать в методе Swap только с матрицами и векторами, общий размер которых кратен 6: 6, 12, 18, 24 и т.д.

    Покажем это на примере:
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //--- заполним матрицу 1x10 значением 7.0
      matrix m= matrix::Full(1, 10, 7.0);
      Print("matrix before Swap:\n", m);
    //--- попробуем провести обмен между матрицей и массивом
      double array_small[2][5]= {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}};
      Print("array_small before Swap:");
      ArrayPrint(array_small);
      if(m.Swap(array_small))
       {
        Print("array_small after Swap:");
        ArrayPrint(array_small);
        Print("matrix after Swap: \n", m);
       }
      else // размер матрицы не кратен размеру первого измерения массива
       {
        Print("m.Swap(array_small) failed. Error ", GetLastError());
       }
      /*
      matrix before Swap:
      [[7,7,7,7,7,7,7,7,7,7]]
      array_small before Swap:
               [,0]     [,1]     [,2]     [,3]     [,4]
      [0,]  1.00000  2.00000  3.00000  4.00000  5.00000
      [1,]  6.00000  7.00000  8.00000  9.00000 10.00000
      m.Swap(array_small) failed. Error 4006
      */
    //--- возьмем матрицу побольше и снова попробуем провести обмен
      double array_static[3][10]= {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
         {2, 4, 6, 8, 10, 12, 14, 16, 18, 20},
         {3, 6, 9, 12, 15, 18, 21, 24, 27, 30}
       };
      Print("array_static before Swap:");
      ArrayPrint(array_static);
      if(m.Swap(array_static))
       {
        Print("array_static after Swap:");
        ArrayPrint(array_static);
        Print("matrix after Swap: \n", m);
       }
      else // статический массив нельзя использовать для обмена с матрицей
       {
        Print("m.Swap(array_static) failed. Error ", GetLastError());
       }
      /*
      array_static before Swap:
             [,0]     [,1]     [,2]     [,3]     [,4]     [,5]     [,6]     [,7]     [,8]     [,9]
      [0,]  1.00000  2.00000  3.00000  4.00000  5.00000  6.00000  7.00000  8.00000  9.00000 10.00000
      [1,]  2.00000  4.00000  6.00000  8.00000 10.00000 12.00000 14.00000 16.00000 18.00000 20.00000
      [2,]  3.00000  6.00000  9.00000 12.00000 15.00000 18.00000 21.00000 24.00000 27.00000 30.00000
      m.Swap(array_static) failed. Error 4006
      */
    //--- еще одна попытка обменять массив и матрицу
      double array_dynamic[][10];    // динамический массив
      ArrayResize(array_dynamic, 3); // выставим размер первого измерения
      ArrayCopy(array_dynamic, array_static);
    //--- теперь для обмена используем динамический массив
      if(m.Swap(array_dynamic))
       {
        Print("array_dynamic after Swap:");
        ArrayPrint(array_dynamic);
        Print("matrix after Swap: \n", m);
       }
      else //  нет ошибки
       {
        Print("m.Swap(array_dynamic) failed. Error ", GetLastError());
       }
      /*
      array_dynamic after Swap:
            [,0]    [,1]    [,2]    [,3]    [,4]    [,5]    [,6]    [,7]    [,8]    [,9]
      [0,] 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000
      matrix after Swap:
      [[1,2,3,4,5,6,7,8,9,10,2,4,6,8,10,12,14,16,18,20,3,6,9,12,15,18,21,24,27,30]]
      */
     }
  4. Добавлены методы LossGradient для векторов и матриц. Данный метод вычисляет вектор или матрицу частных производных функции потерь по предсказанным значениям. В линейной алгебре такой вектор называется градиентом и применяется в машинном обучении.
    vector vector::LossGradient(const vector &expected,ENUM_LOSS_FUNCTION loss) const;
    matrix matrix::LossGradient(const matrix &expected,ENUM_LOSS_FUNCTION loss) const;
  5. Включено использование FOREIGN KEYS в SQLite, что позволяет строить связи между таблицами в SQL-запросах.   Пример:
    CREATE TABLE artist(
      artistid    INTEGER PRIMARY KEY, 
      artistname  TEXT
    );
    
    CREATE TABLE track(
      trackid     INTEGER, 
      trackname   TEXT, 
      trackartist INTEGER,
      FOREIGN KEY(trackartist) REFERENCES artist(artistid)
    );

  6. Исправлен выбор нужного метода класса в зависимости от константности метода и объекта.

MetaEditor

  1. Увеличена поддерживаемая длина комментариев при коммитах в хранилище MQL5 Storage.  Подробные комментарии при отправке изменений в хранилище считаются хорошим тоном при работе над большими проектами, но длина таких сообщений ранее была ограничена 128 символами. Теперь лимит установлен в 260 символов.

MetaTester

  1.  Повышена чувствительность у переключателя скорости тестирования в визуальном режиме.

Исправления по крешлогам.


17 сентября 2022
MetaTrader 5 build 3440: Новый отчет по торговому счету

Terminal

  1. Добавлен новый отчет по торговой истории счета. По набору параметров и представлению информации он схож с уже привычными отчетами по Сигналам. Теперь и в самой платформе вам станут доступны:
    • Помесячные показатели прироста в виде графика и таблицы
    • График изменения эквити
    • Лепестковая диаграмма, позволяющая быстро оценить состояние счета
    • Статистика сделок по инструментам
    • Множество дополнительных показателей для анализа торговли

    Отчет теперь можно просматривать прямо в платформе, не экспортируя его предварительно в файл. Чтобы его открыть, нажмите "Отчеты" в меню "Вид".


  2. Исправлено заполнение доски опционов при несовпадении количества или типа инструмента у контрактов Call и Put.
  3. Исправлен некорректный выбор позиции в торговом диалоге при закрытии позиции встречной. Ошибка возникала при сортировке доступных встречных ордеров по любой колонке, кроме тикета.
  4. Ускорен вывод записей в журнал платформы.
  5. Исправлено отображение комментариев на графиках пользовательских символов.

MQL5

  1. Исправлена работа функции CArrayList::LastIndexOf. Ранее она всегда возвращала -1 вместо индекса последнего найденного элемента.
  2. Добавлен метод векторов и матриц Assign. Он позволяет заменить содержимое матрицы/вектора данными переданной матрицы/вектора или массива.
    bool vector<TDst>::Assign(const vector<TSrc> &assign);
    bool matrix<TDst>::Assign(const matrix<TSrc> &assign);
    
    Пример:
      //--- копирование матриц
      matrix b={};
      matrix a=b;
      a.Assign(b);
      
      //--- копирование массива в матрицу
      double arr[5][5]={{1,2},{3,4},{5,6}};
      Print("array arr");
      ArrayPrint(arr);
      b.Assign(arr);
      Print("matrix b \n",b);
    /*
    array arr
            [,0]    [,1]    [,2]    [,3]    [,4]
    [0,] 1.00000 2.00000 0.00000 0.00000 0.00000
    [1,] 3.00000 4.00000 0.00000 0.00000 0.00000
    [2,] 5.00000 6.00000 0.00000 0.00000 0.00000
    [3,] 0.00000 0.00000 0.00000 0.00000 0.00000
    [4,] 0.00000 0.00000 0.00000 0.00000 0.00000
    matrix b 
    [[1,2,0,0,0]
     [3,4,0,0,0]
     [5,6,0,0,0]
     [0,0,0,0,0]
     [0,0,0,0,0]]
    
    */
  3. Добавлен метод векторов и матриц CopyRates. Он позволяет легко копировать массивы ценовых данных в векторы и матрицы.
    bool matrix::CopyRates(string symbol,ENUM_TIMEFRAMES period,ulong rates_mask,ulong from,ulong count);
    bool vector::CopyRates(string symbol,ENUM_TIMEFRAMES period,ulong rates_mask,ulong from,ulong count);
    Тип копируемых данных указывается в параметре rates_mask при помощи перечисления ENUM_COPY_RATES. Доступны следующие значения:
    COPY_RATES_OPEN
    COPY_RATES_HIGH
    COPY_RATES_LOW
    COPY_RATES_CLOSE
    COPY_RATES_TIME
    COPY_RATES_VOLUME_TICK
    COPY_RATES_VOLUME_REAL
    COPY_RATES_SPREAD
    COPY_RATES_OHLC
    COPY_RATES_OHLCT
    Последние два значения предназначены для удобного выбора сразу нескольких основных параметров бара — цен Open, High, Low, Close и времени.

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

  4. Исправлено отображение объектов "Текстовая метка". При использовании свойств OBJPROP_XOFFSET и OBJPROP_YOFFSET на график мог выводиться неверный фрагмент изображения.

  5. Исправлена ошибка изменения константного параметра, переданного в функцию в виде ссылки на указатель объекта.

    Напомним, что спецификатор const объявляет переменную константой и не позволяет изменять значение этой переменной в процессе выполнения программы. Допускается только однократная инициализация переменной при ее объявлении. Пример константных переменных в функции OnCalculate:

    int OnCalculate (const int rates_total,      // размер массива price[]
                     const int prev_calculated,  // обработано баров на предыдущем вызове
                     const int begin,            // откуда начинаются значимые данные
                     const double& price[]       // массив для расчета
       );
    

    Но в примере ниже обнаружилась ошибка компилятора, который позволял неявное приведение указателей для параметров-ссылок:

    class A {};
    const A *a = new A;
    
    void foo( const A*& b )
      {
       b = a;
      }
    
    void OnStart()
      {
            A *b; 
            foo(b); // недопустимо
            Print( a,":",b );
      }
    Теперь данная недопустимая операция будет детектироваться компилятором и выдавать ошибку.

MetaEditor

  1. Исправлено отображение ссылок на комплексные числа в отладчике.
  2. Улучшена работа MQL5 Cloud Protector. Ранее в редких случаях защита файлов могла завершаться ошибкой.
  3. Исправления по крешлогам.


Новый веб-терминал MetaTrader 5

Представляем абсолютно новый веб-терминал для MetaTrader 5. Мы сделали его современным и быстрым, обновив не только внешний вид, но и полностью переписав ядро. В плане интерфейса веб-терминал стал похож на уже привычную версию платформы для iPad:



По сравнению со старой версии в нем появилось множество новых функций:

  • Возможность запрашивать реальные счета с заполнением детальной формы регистрации и предоставлением подтверждающих документов
  • Поддержка подписок на ценовые данные и возможность получения котировок с задержкой
  • Большее количество аналитических объектов, более удобное управление
  • Отображение входов и выходов из рынка на графике
  • Отображение на графике событий экономического календаря
  • Удобная настройка инструментов в Обзоре рынка, отображение дневного изменения цены
  • Существенно упрощен интерфейс: убрано контекстное меню графика и верхнее меню; все команды для управления графиком, наложения объектов и индикаторов размещены на панелях слева и сверху; оставшиеся команды размещены в одном меню-гамбургере
  • Ночная тема интерфейса
Попробуйте новый веб-терминал на www.mql5.com прямо сейчас. В скором времени он появится и у ваших брокеров.
4 августа 2022
MetaTrader 5 build 3390: Float в OpenCL и математических функциях, методы активации и потерь для машинного обучения

Terminal

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

    Добавлено автоматическое открытие туториала при первом подключении к торговому счету.

  2.  Исправлена ошибка групповых операций "Закрыть прибыльные/убыточные позиции". Ранее для закрытия соответствующих позиций платформа использовала встречные позиции при их наличии. Например, если у вас было две убыточные позиции Buy по EURUSD и одна прибыльная позиция Sell по EURUSD, то при массовом закрытии убыточных позиций были бы закрыты все три имеющиеся позиции. Buy и Sell были бы закрыты операцией Close by, а оставшаяся Buy — обычной операцией закрытия. Теперь команды работают как запланировано, закрывая только выбранные позиции — прибыльные или убыточные.

  3. Исправлено отображение ценовой истории для отрицательных цен на графиках с периодом D1. Теперь графики с негативными ценами отображаются правильно на всех таймфреймах.
  4. Оптимизировано и значительно снижено потребление системных ресурсов терминалом.
  5. Обновлена база фундаментальных данных торговых инструментов. Количество агрегаторов, доступных для просмотра биржевого инструмента, расширено до 15, что позволяет находить информацию по максимально большому числу тикеров на самых популярных экономических агрегаторах.


    Обновлена база фундаментальных данных торговых инструментов

    На мировом рынке котируются не менее 7 000 ликвидных акций и более 2 000 ETF. Кроме того, есть множество фьючерсов и других производных инструментов. Платформа MetaTrader 5 содержит огромную базу данных по биржевым инструментам и позволяет прямо из Market Watch в один клик перейти на сайт агрегатора для получения фундаментальных данных. Для удобства инвесторов для каждой ценной бумаги мы предлагаем на выбор множество источников информации.

  6. Исправлена подстановка уровней Стоп Лосс и Тейк Профит в окне выставления нового ордера. Теперь для счетов, работающих в режиме FIFO, значения стоп-уровней будут автоматически устанавливаться в соответствии со стоп-уровнями уже открытых позиций по тому же инструменту. Это необходимо для соблюдения правила FIFO.

MQL5

  1. Математические функции теперь могут работать с матрицами и векторами.

    Мы продолжаем расширять возможности платформы MetaTrader 5 для алготрейдинга и машинного обучения. Ранее мы добавили новый тип данных — матрицы и векторы, которые позволяют отказаться от использования массивов для обработки данных. Для работы с ними мы добавили в язык MQL5 более 70 методов, которые позволяют проводить вычисления из линейной алгебры и статистики в виде одной операции. Умножение, преобразование и решение системы уравнений — всё это теперь делается просто и без лишнего программирования. Добавление новых типов не оставило в стороне и математические функции.

    Математические функции изначально были предназначены для проведения математических операций над скалярными величинами. Теперь большая часть этих функций может использоваться и с новыми типами данных — матрицами и векторами — MathAbs, MathArccos, MathArcsin, MathArctan, MathCeil, MathCos, MathExp, MathFloor, MathLog, MathLog10, MathMod, MathPow, MathRound, MathSin, MathSqrt, MathTan, MathExpm1, MathLog1p, MathArccosh, MathArcsinh, MathArctanh, MathCosh, MathSinh, MathTanh. В этом случае матрица или вектор обрабатываются почленно. Пример:
    //---
      matrix a= {{1, 4}, {9, 16}};
      Print("matrix a=\n",a);
    
      a=MathSqrt(a);
      Print("MatrSqrt(a)=\n",a);
      /*
       matrix a=
       [[1,4]
        [9,16]]
       MatrSqrt(a)=
       [[1,2]
        [3,4]]
      */
    В случае MathMod и MathPow в качестве второго параметра может быть использован как скаляр, так и матрица или вектор соответствующего размера.

    Покажем на примере, как вычислить стандартное отклонение с помощью математических функций над вектором.
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //--- используем инициализирующую функцию для заполнения вектора
      vector r(10, ArrayRandom); // массив случайных чисел от 0 до 1
    //--- вычислим среднее значение
      double avr=r.Mean();       // среднее значение массива
      vector d=r-avr;            // вычислим массив отклонений от среднего значения
      Print("avr(r)=", avr);
      Print("r=", r);
      Print("d=", d);
      vector s2=MathPow(d, 2);   // массив квадратов отклонений
      double sum=s2.Sum();       // сумма квадратов отклонений
    //--- вычислим стандартное отклонение 2-мя способами
      double std=MathSqrt(sum/r.Size());
      Print(" std(r)=", std);
      Print("r.Std()=", r.Std());    
     }
    /*
      avr(r)=0.5300302133243813
      r=[0.8346201971495713,0.8031556138798182,0.6696676534318063,0.05386516922513505,0.5491195410016175,0.8224433118686484,...
      d=[0.30458998382519,0.2731254005554369,0.1396374401074251,-0.4761650440992462,0.01908932767723626,0.2924130985442671, ...
       std(r)=0.2838269732183663
      r.Std()=0.2838269732183663
    */ 
    //+------------------------------------------------------------------+
    //| Заполняет вектор случайными значениями                           |
    //+------------------------------------------------------------------+
    void ArrayRandom(vector& v)
     {
      for(ulong i=0; i<v.Size(); i++)
        v[i]=double(MathRand())/32767.;
     }
    

  2. В шаблонных функциях теперь можно использовать записи matrix<double>, matrix<float>, vector<double>, vector<float> вместо соответствующих типов matrix, matrixf, vector, vectorf.
  3. Доработаны математические функции для работы с типом float. В связи с появившейся возможностью применения математических функций к матрицам и векторам типа float, были также доработаны соответствующие функции, применяемые к скалярам типа float. Раньше параметры этих функций безусловно приводились к типу double, вызывалась соответствующая реализация математической функции, и затем результат приводился к типу float. Теперь в случае типа float параметры и результаты не подвергаются приведению, так как вызываются реализации математических функций, соответствующих типу float.

    Разница в вычислениях на примере математического синуса:

    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //---  массив случайных чисел от 0 до 1
      vector d(10, ArrayRandom);
      for(ulong i=0; i<d.Size(); i++)
       {
        double delta=MathSin(d[i])-MathSin((float)d[i]);
        Print(i,". delta=",delta);
       }
     }
    /*
       0. delta=5.198186103783087e-09
       1. delta=8.927621308885136e-09
       2. delta=2.131878673594656e-09
       3. delta=1.0228555918923021e-09
       4. delta=2.0585739779477308e-09
       5. delta=-4.199390279957527e-09
       6. delta=-1.3221741035351897e-08
       7. delta=-1.742922250969059e-09
       8. delta=-8.770715820283215e-10
       9. delta=-1.2543186267421902e-08
    */
    //+------------------------------------------------------------------+
    //| Заполняет вектор случайными значениями                           |
    //+------------------------------------------------------------------+
    void ArrayRandom(vector& v)
     {
      for(ulong i=0; i<v.Size(); i++)
        v[i]=double(MathRand())/32767.;
     }

  4. Добавлены методы матриц и векторов Activation (активационная функция) и Derivative (производная активационной функции) с параметрами:
    AF_ELU               Exponential Linear Unit
    AF_EXP               Exponential
    AF_GELU              Gaussian Error Linear Unit
    AF_HARD_SIGMOID      Hard Sigmoid
    AF_LINEAR            Linear
    AF_LRELU             Leaky REctified Linear Unit
    AF_RELU              REctified Linear Unit
    AF_SELU              Scaled Exponential Linear Unit
    AF_SIGMOID           Sigmoid
    AF_SOFTMAX           Softmax
    AF_SOFTPLUS          Softplus
    AF_SOFTSIGN          Softsign
    AF_SWISH             Swish
    AF_TANH              Hyperbolic Tangent
    AF_TRELU             Thresholded REctified Linear Unit
    Функция активации в нейронной сети определяет, как взвешенная сумма входного сигнала преобразуется в выходной сигнал узла или узлов на уровне сети. Выбор функции активации имеет большое влияние на возможности и производительность нейронной сети. В разных частях модели могут использоваться разные функции активации. В MQL5 реализованы не только все известные функции активации, но и производные активационной функции. Производные функции нужны для быстрого вычисления поправки на основании полученной ошибки во время обучения нейронной сети.
  5. Добавлен метод матриц и векторов Loss (функция потерь) со следующими параметрами:
    LOSS_MSE            Mean Squared Error
    LOSS_MAE            Mean Absolute Error
    LOSS_CCE            Categorical Crossentropy
    LOSS_BCE            Binary Crossentropy
    LOSS_MAPE           Mean Absolute Percentage Error
    LOSS_MSLE           Mean Squared Logarithmic Error
    LOSS_KLD            Kullback-Leibler Divergence
    LOSS_COSINE         Cosine similarity/proximity
    LOSS_POISSON        Poisson
    LOSS_HINGE          Hinge
    LOSS_SQ_HINGE       Squared Hinge
    LOSS_CAT_HINGE      Categorical Hinge
    LOSS_LOG_COSH       Logarithm of the Hyperbolic Cosine
    LOSS_HUBER          Huber

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

  6. Добавлены методы матриц и векторов matrix::CompareByDigits и vector::CompareByDigits. Они сравнивают элементы двух матриц/векторов на совпадение значащих цифр.

  7. Добавлена поддержка функций MathMin и MathMax для строк. В этом случае функции будут использовать лексикографическое сравнение — буквы сравниваются согласно алфавиту и с учетом регистра.

  8. Увеличено максимальное количество объектов OpenCL c 256 до 65536. Хендлы на OpenCL-объекты в MQL5-программе создаются с помощью функций CLContextCreate, CLBufferCreate и CLProgramCreate. Прежнее ограничение в 256 хендлов не позволяло эффективно работать в методах машинного обучения.

  9. Разрешено использование OpenCL на картах без поддержки double. Ранее в MQL5-программах безусловно использовались только GPU с поддержкой double, хотя множество задач допускают и предназначены для расчетов с использованием float. Тип float изначально считается родным для проведения параллельных вычислений, так как занимает меньше места. Теперь это требование убрано.

    Если для решения задачи требуется использовать только GPU с поддержкой double, то это можно явно указать при вызове CLContextCreate с помощью нового значения CL_USE_GPU_DOUBLE_ONLY (разрешается использовать только устройства, которые поддерживают вычисления с типом double).
       int cl_ctx;
    //--- инициализация OpenCL контекста
       if((cl_ctx=CLContextCreate(CL_USE_GPU_DOUBLE_ONLY))==INVALID_HANDLE)
         {
          Print("OpenCL not found");
          return;
         }

  10. Исправлена работа функции CustomBookAdd. Ранее, если в поле MqlBookInfo::volume_real указывалось нулевое значение, снимок стакана цен не создавался. Теперь проверка выполняется так:
    Передаваемые данные проверяются на корректность: для каждого элемента должны быть указаны тип, цена и объем. При этом MqlBookInfo.volume и MqlBookInfo.volume_real не должны быть нулевыми или отрицательными: если оба объема отрицательны, то это будет считаться ошибкой. Указывать можно любой из объемов или оба — берется тот, который указан или является положительным:

       volume=-1 && volume_real=2 — будет использован volume_real=2,

       volume=3 && volume_real=0 — будет использован volume=3.

    Объем с повышенной точностью MqlBookInfo.volume_real имеет больший приоритет по сравнению с обычным MqlBookInfo.volume. Если для элемента стакана указаны оба значения, будет использовано volume_real.

    Если хотя бы один элемент стакана описан неверно, система отбросит переданное состояние полностью.

  11. Исправлена работа функции CalendarValueLast. Ошибка заключалась в том, что в некоторых случаях последовательные вызовы функции после изменений в экономическом календаре (параметр change получал новое значение после вызова) могли пропускать события при использовании фильтра по валюте.
    CalendarValueLast(change, result, "", "EUR")
  12. Исправлено поведение функции ArrayBSearch — при наличии нескольких одинаковых элементов возвращается ссылка на первый по порядку, а не на случайный, как было ранее.
  13. Исправлен учёт видимости шаблонной функции в классе. Ошибка заключалась в том, что функции шаблона класса, объявленные как private/protected, оказывались фактически общедоступными (public).

MetaEditor

  1. Исправлены ошибки и неоднозначное поведение MetaAssist.
  2. Добавлена поддержка макроса %terminal%, который означает путь к каталогу данных платформы, где установлен данный терминал. Например, %terminal%\MQL5\Experts. 

    Добавлена поддержка макроса %terminal%, который означает путь к каталогу данных платформы, где установлен данный терминал

  3. Улучшено отображение массивов в отладчике.
  4. Увеличен буфер для копирования значений из отладчика.
  5. Улучшены подсказки при ошибках.
  6. В файле проекта *.mproj теперь прописываются относительные пути. Ранее пути были абсолютные, что приводило к ошибкам компиляции при перемещении проекта.
  7. Добавлено автоматическое встраивание BMP-ресурсов в виде глобально доступных 32-битных массивов битмапа при включении в проекты. Это избавляет от необходимости вызывать в коде ResourceReadImage для чтения графического ресурса.
    'levels.bmp' as 'uint levels[18990]'
    
  8. Улучшено чтение расширенных форматов BMP-файлов.
  9. Обновлены переводы пользовательского интерфейса.
  10. Исправления по крешлогам.
2 июня 2022
MetaTrader 5 build 3320: Улучшения и исправления

Terminal

  1. Расширены подсказки к объектам сделок, отображаемым на графиках.
    • Для сделок выхода из рынка добавлен показ прибыли.
    • Для сделок, совершенных в результате срабатывания Тейк Профита или Стоп Лосса, добавлена соответствующая индикация — TP/SL.

    Аналогичные подсказки добавлены к линиям, соединяющим сделки входа и выхода.

    Расширены подсказки к объектам сделок


  2. Ускорена работа графической системы.
  3. Добавлено журналирование групповых операций над открытыми ордерами и позициями. При выполнении такой команды в журнал выводится сообщение вида "bulk closing of XXX positions started".
  4. Исправлено групповое закрытие встречных позиций.
  5. Исправлено обновление объектов, которыми отображается торговая история на графике. Ошибка возникала при изменении торгового инструмента у графика.

MQL5

  1. Продолжается работа над функциями для матриц и векторов: добавляется поддержка float и complex.
  2. MQL5: Оператор "!" (LNOT) для указателя теперь проверяет его на валидность через неявный вызов функции CheckPointer. Для быстрой проверки на NULL следует использовать оператор "==". Например: ptr==NULL или ptr!=NULL.

MetaTester

  1. Исправлено отображение объектов сделок на графике тестирования.
  2. Ускорена работа графической системы.

MetaEditor

  • Обновлены переводы интерфейса.

Исправления по крешлогам.

20 мая 2022
MetaTrader 5 build 3300: Быстрая компиляция и улучшенная навигация по коду в MetaEditor

Terminal

  1. Добавлена возможность изменять размер графического объекта "Прямоугольник", перетаскивая любой из четырех углов.



  2. Ускорена отрисовка графического интерфейса.
  3. Улучшена поддержка адресов IPv6.
  4. Исправлен расчет высоты нижнего поля даты и ширины правого поля цены при первом запуске платформы.

MQL5

  1. Добавлена функция для работы с матрицами и векторами —  RegressionMetric. Она задает метрику для оценки регрессии.
     double vector.RegressionError(const enum lr_error);
     double matrix.RegressionError(const enum lr_error);
     vector matrix.RegressionError(const enum lr_error,const int axis);
    В качестве метрик могут использоваться:
    enum REGRESSION_ERROR
      {
       REGRESSION_MAE,     // Средняя абсолютная ошибка
       REGRESSION_MSE,     // Средняя квадратичная ошибка
       REGRESSION_RMSE,    // Корень из средней квадратичной ошибки
       REGRESSION_R2,      // R в квадрате
       REGRESSION_MAPE,    // Средняя абсолютная ошибка в процентах
       REGRESSION_MSPE,    // Среднеквадратичная ошибка в процентах
       REGRESSION_RMSLE    // Среднеквадратичная логарифмическая ошибка
      };
  2. Добавлена возможность записи массивов с размером данных более INT_MAX (массивы структур).

MetaEditor

  1. Доработана панель вкладок:
    • Панель не скрывается, даже если открыто только одно окно. Таким образом, вам всегда остаются доступны команды контекстного меню вкладки.
    • Для каждой вкладки добавлена кнопка 'X' для закрытия. Помимо этого, вкладки можно закрывать средней кнопкой мыши или через контекстное меню.



  2. Добавлена команда для быстрой компиляции программ. В этом режиме не выполняется оптимизация кода, что значительно сокращает время создания исполняемого файла EX5. Используйте этот режим в активной стадии разработки, когда требуется быстро проверить написанный код. А уже при компиляции программы для реальной работы включайте режим максимальной оптимизации для наилучшей производительности.



    Параметр "Максимальная оптимизация" в настройках проекта выполняет ту же функцию.
    Все операции, связанные с компиляцией, вынесены в отдельное меню "Сборка".

  3. Улучшено управление кодом:
    • Разделены команды для перехода к объявлению и реализации. Ранее использовалась одна команда, которая выводила меню выбора. Теперь вы сразу можете переходить к необходимой части кода.
    • Добавлена подстановка распознанного ключевого слова по нажатию "Tab" в дополнение в "Enter".




  4. Добавлена возможность автоматического отображения локальных переменных в списке наблюдения в отладчике. Для этого включите опцию "Локальные" в контекстном меню. Во время отладки по мере перехода по коду в список будут автоматически выводиться переменные из текущей области видимости.



  5. Улучшена работа списка наблюдения в отладчике для векторов и матриц.
  6. Исправлены пути в проектных файлах. Ошибка могла приводить к пропаданию файлов из проектов.

Tester

  1. Улучшена остановка тестерных агентов при завершении работы платформы.
  2. Добавлен пятый узел для MQL5 Cloud Network, он размещен в Гонконге. Это ускорит оптимизацию роботов с использованием сети в ближайших регионах.

Исправления по крешлогам.
предыдущая123456789101112131415