Get Trial

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

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

26 апреля 2017

MetaTrader 5 build 1596: доступ к ценовой истории

Terminal

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

    Для закачки данных откройте диалог управления символами в контекстном меню "Обзора рынка":


    Теперь в нем доступны две новые вкладки: "Бары" и "Тики". Выберите символ, временной диапазон и нажмите "Запрос". Платформа запросит все доступные данные с сервера или отобразит их моментально, если они уже закачаны. Сохраненные ценовые данные можно экспортировать в CSV-файл.

  2. Добавлен показ времени с точностью до миллисекунд для позиций, сделок и ордеров.




  3. В диалоге торговли исправлено уведомление об отказе в выполнении запроса на закрытие позиции встречной.

MQL5

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

Signals

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

Tester

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

Обновлена документация.

8 апреля 2017

MetaTrader 5 Android build 1576: в историю торговли добавлены позиции

В MetaTrader 5 Android добавлено представление торговой истории в виде позиций. Ранее во вкладке "История" отражались только сделки и ордера из истории, теперь же анализ торговли можно проводить в разрезе позиций. Для этого  все сделки, относящиеся к позиции, группируются в единую запись, где можно увидеть:

  • Время открытия и закрытия позиции (определяемые по первой и последней сделке)
  • Объем позиции (при частичном закрытии показывается закрытый объем и исходный объем)
  • Средневзвешенные цены открытия и закрытия позиции
  • Общий финансовый результат по всем сделкам, относящимся к позиции

30 марта 2017

MetaTrader 5 iOS build 1547: торговая история в виде позиций

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

  • Время открытия и закрытия позиции, определяемые по первой и последней сделке
  • Объем позиции; если позиция закрыта частично, показывается закрытый объем и исходный объем
  • Средневзвешенную цену открытия и цену закрытия позиции
  • Суммарный финансовый результат по сделкам, относящимся к позиции

24 марта 2017

MetaTrader 5 build 1570: улучшение витрины Маркета и расширение шаблонных функций в MQL5

Terminal

  1. Обновлена витрина магазина приложений MetaTrader Market. Выбирать торговых роботов и технические индикаторы стало удобнее. Мы обновили дизайн и добавили подборки продуктов:

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


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

MQL5

  1. Добавлена поддержка перегрузки шаблонных функций по параметрам. Например, есть шаблонная функция, которая записывает в первый параметр значение второго параметра с помощью явного приведения типов. В языке MQL5 запрещено приведение типа string к типу bool, но мы можем сделать это сами. Создадим перегрузку шаблонной функции:
    //+------------------------------------------------------------------+
    //| Шаблонная функция                                                |
    //+------------------------------------------------------------------+
    template<typename T1,typename T2>
    string Assign(T1 &var1,T2 var2)
      {
       var1=(T1)var2;
       return(__FUNCSIG__);
      }
    //+------------------------------------------------------------------+
    //| Специальная перегрузка для случая bool+string                    |
    //+------------------------------------------------------------------+
    string Assign(bool &var1,string var2)
      {
       var1=(StringCompare(var2,"true",false) || StringToInteger(var2)!=0);
       return(__FUNCSIG__);
      }
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       int i;
       bool b;
       Print(Assign(i,"test"));
       Print(Assign(b,"test"));
      }
    В результате выполнения кода мы увидим, что для пары int+string была использована шаблонная функция Assign(), а при втором вызове для пары bool+string уже использовалась перегруженная версия.
    string Assign<int,string>(int&,string)
    string Assign(bool&,string)

  2. Добавлена возможность явной специализации шаблонных функций. Для этого перед списком параметров вызова необходимо указать параметры типизации:
    template<typename T>
    T Func() { return (T)0; }
      
      
    void OnInit()
      {
       Func<double>();   // явная специализация шаблонной функции
      }
    Таким образом, специализация происходит не через параметры вызова, а прямым указанием типов.

  3. Оптимизировано отображение пользовательских индикаторов с типом рисования DRAW_ZIGZAG.
  4. В перечисление типов сделок ENUM_DEAL_TYPE добавлены новые значения:

    • DEAL_DIVIDEND — сделка начисления дивиденда.
    • DEAL_DIVIDEND_FRANKED — сделка начисления франкированного дивиденда (не облагается налогом, налог за клиента оплачивает компания).
    • DEAL_TAX — сделка удержания налога.

  5. Исправлено отображение пользовательских индикаторов с типом рисования DRAW_FILLING. При совпадении координат верхней и нижней линии теперь рисуется тонкая линия.
  6. Исправлено вычисление координат объекта "Графическая метка" (Bitmap Label) при выставлении параметра CHART_SHOW в состояние false. Этот параметр устанавливается функцией ChartSetInteger и позволяет скрыть все элементы ценового графика для создания собственного интерфейса программы.
  7. Исправлена ошибка перекодировки 24-битных изображений при помещении их в ресурсы MQL5-приложения.
  8. Исправлена ошибка вывода на печать структур функцией ArrayPrint.
  9. Обновлены стандартные библиотеки MQL5.

MetaEditor

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

Signals

  1. Исправлено открытие страницы сигнала в терминале при переходе с сайта MQL5.community в случае отсутствия подключения торговым счетом.

Tester

  1. Исправлены ошибки при работе функции CopyTicks в тестере стратегий.
  2. Исправлена сортировка сделок типа "Снятие" (Withdrawal) при формировании отчета тестирования.
  3. Исправлена модификация отложенных ордеров.

Hosting

  1. Исправлено отображение мастера виртуального хостинга на экранах сверхвысокого разрешения (4К).

Обновлена документация.

17 февраля 2017

MetaTrader 5 build 1545: быстрое переключение между окнами и изменение цен мышью

Terminal

  1. Добавлено быстрое переключение между окнами "Инструменты" и "Тестер стратегий".



  2. Добавлена возможность изменения цен и объемов ордеров при помощи колеса мыши:




  3. Теперь при переходе к скачиванию мобильных терминалов запоминается список ваших торговых серверов. При последующей установке MetaTrader 5 для iPhone или Android на мобильном устройстве вам сразу будет показан готовый список серверов. Вы сможете быстро подключить существующие торговые счета. Сервер текущего подключенного счета будет показан в мобильном терминале первым.




  4. Значительно снижена нагрузка на терминал, создаваемая невидимыми (свернутыми) графиками и объектами.
  5. Исправлена ошибка, в некоторых случаях приводившая к некорректному срабатыванию трейлинг-стопов.
  6. Исправлена ошибка фильтрации сделок по символу в торговой истории счета.
  7. Исправлена ошибка отображения поля "Тип" в истории позиций.
  8. Исправлена ошибка в формировании и представлении торговой истории в виде позиций.
  9. Исправлено отображение пользовательских индикаторов с типом построения DRAW_COLOR_LINE, DRAW_COLOR_ZIGZAG и DRAW_COLOR_SECTION при использовании цвета CLR_NONE.

MQL5

  1. Исправлена ошибка в шаблонах при типизации константным указателем.
  2. Исправлен контроль доступа к private и protected членам класса.

Tester

  1. Исправлено срабатывание лимитных ордеров на биржевых инструментах при выставлении ордеров хуже текущего рынка (цена покупки выше рыночной, или цена продажи ниже рыночной).
  2. Снято ограничение на тестирование пользовательских индикаторов с более чем 64 входными параметрами.
  3.  Добавлен перевод пользовательского интерфейса на хинди.

Обновлена документация.

9 февраля 2017

MetaTrader 5 iOS build 1509: авторизация на MQL5.com через Facebook
  • Добавлена возможность авторизации и регистрации MQL5.com-аккаунта через Facebook. Теперь, если у вас есть профиль в этой социальной сети, вы можете в несколько кликов получить доступ к чатам и всему набору сервисов для MetaTrader 5.


  • Улучшения и исправления.

27 января 2017

MetaTrader 5 build 1525: Представление истории в виде позиций и улучшение тестера

Terminal

  1. Добавлено представление торговой истории в виде позиций. Терминал собирает данные по сделкам, относящимся к позиции (открытие, наращивание, частичное и полное закрытие), и группирует эти данные в единую запись, где можно сразу посмотреть:
    • Время открытия и закрытия позиции, определяемое по первой и последней сделке соответственно
    • Объем позиции; если позиция закрыта частично, показывается закрытый объем и исходный объем
    • Средневзвешенную цену открытия и цену закрытия позиции
    • Суммарный финансовый результат по сделкам, относящимся к позиции




    Для хеджинговых счетов данный вид представления позиций фактически аналогичен истории счета в MetaTrader 4.



  2.   Добавлена команда для визуализации истории сделок на графике по конкретному символу.

    • Чтобы показать все сделки только по символу выбранной позиции/сделки, нажмите "Добавить сделки по [Имя символа]". Сделки будут добавлены на все открытые в данный момент графики по этому символу. Если таких графиков нет, будет открыт новый.
    • Чтобы показать сделки по всем символам из истории счета, нажмите "Добавить все сделки". На все открытые графики будут добавлены все сделки по соответствующим символам.




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




  4. Добавлена возможность быстро установить разрешение для окна терминала. Функция будет удобна для тех, кто снимает видеоролики. В меню доступны наиболее популярные разрешения для публикации роликов в видеосервисах, таких как YouTube.



  5. Шаблоны и профили графиков перенесены из [каталога данных терминала\Profiles] в [каталог данных терминала\MQL5\Profiles]. Теперь можно легко добавлять шаблоны в хранилище MQL5 Storage и использовать их с любого вашего компьютера.

MQL5

  1. Добавлена поддержка ресурсных переменных. Использование таких переменных может существенно облегчить написание некоторых программ. Например, вы можете написать OpenCL код в отдельном CL-файле, а затем включить этот файл в виде строки в ресурсы вашей MQL5-программы. Раньше вместо этого код пришлось бы описывать в виде одной большой строковой переменной.

    Объявление ресурсной переменной
    #resource путь_к_файлу_ресурса as тип_ресурсной_переменной имя_ресурсной_переменной

    Особенности
    • Для строковых файлов производится автоматическое определение кодировки по BOM (заголовку). Если BOM отсутствует, кодировка определяется по содержимому. Поддерживаются кодировки ANSI, UTF-8 и UTF-16. Все строки переводятся в Unicode.
    • К данным такого ресурса можно обращаться только через переменную. Автоматическая адресация через "::<resource name>" не работает.
    • Специальный тип ресурсной переменной bitmap указывает компилятору, что ресурс является графическим изображением. Ресурсная переменная в данном случае получает тип uint.
    • При использовании 24-битного изображения для всех его пикселей компонента альфа-канала устанавливается в значение 255.
    • При использовании 32-битного изображения без альфа-канала для всех его пикселей компонента альфа-канала также устанавливается в значение 255.
    • При загрузке 32-битного изображения с альфа-каналом никаких манипуляций с пикселями не происходит.
    • Ресурсная переменная-массив типа bitmap может иметь две размерности. В этом случае размер массива будет установлен как [высота_картинки][ширина_картинки].
    • В случае одномерного массива количество элементов будет установлено как высота_картинки*ширина_картинки.
    • Если размер файла ресурса не кратен размеру элемента массива, то остаток данных отсекается. Например, при размере файла в 14 байт, для массива int количество элементов будет составлять 3, а оставшиеся 2 байта (14 - sizeof(int)*3) будут отброшены.
    Примеры использования
    #resource "data.bin" as int ExtData[]             // объявление массива числового типа, содержащего данные из файла data.bin
    #resource "data.bin" as MqlRates ExtData[]        // объявление массива простых структур, содержащего данные из файла data.bin
    
    #resource "data.txt" as string ExtCode            // объявление строки, содержащей данные файла data.txt
    #resource "data.txt" as string ExtCode[]          // объявление строкового массива, содержащего строки файла data.txt
    
    #resource "image.bmp" as bitmap ExtBitmap[]       // объявление одномерного массива, содержащего в себе растр из файла BMP, размер массива = height * width
    #resource "image.bmp" as bitmap ExtBitmap2[][]    // объявление двумерного массива, содержащего в себе растр из файла BMP, размер массива [height][width]

  2. Добавлено свойство CHART_SHOW для отключения отображения графика. Для получения и установки свойства используются функции ChartGetInteger и ChartSetInteger.

    Если установлено значение false, то отключается отрисовка любых атрибутов ценового графика и устраняются все отступы по краям графика: шкалы времени и цены, строка быстрой навигации, метки событий Календаря, значки сделок, тултипы индикаторов и баров, подокна индикаторов, гистограммы объёмов и т.д.

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

    Графические объекты отрисовываются всегда независимо от установленного значения свойства CHART_SHOW.

  3. Добавлено свойство CHART_KEYBOARD_CONTROL для включения/отключения управления графиком при помощи клавиатуры ("Home", "End", "PageUp", "+", "-", "Стрелка вверх"  и т.д.). Установка  CHART_KEYBOARD_CONTROL=false позволяет отключить скроллинг и масштабирование графика, но при этом сохраняется возможность получать события нажатия данных клавиш в OnChartEvent.

    Для получения и установки свойства используются функции ChartGetInteger и ChartSetInteger.

  4. Добавлены новые функции и свойства для работы с OpenCL.

    Новые свойства для работы с памятью
    С помощью CLGetInfoIntegrer теперь можно получить четыре новых свойства:
    • CL_DEVICE_MAX_WORK_GROUP_SIZE — общее количество локальных рабочих групп, доступных для OpenCL устройства.
    • CL_KERNEL_WORK_GROUP_SIZE — общее количество локальных рабочих групп, доступных для OpenCL программы.
    • CL_KERNEL_LOCAL_MEM_SIZE — размер локальной памяти в байтах, которую использует OpenCL программа для всех параллельных задач в группе. Используйте CL_DEVICE_LOCAL_MEM_SIZE для получения доступного максимума.
    • CL_KERNEL_PRIVATE_MEM_SIZE — минимальный размер приватной памяти в байтах, используемой каждой задачей в кернеле OpenCL программы.

    bool CLExecutionStatus(int kernel)
    Возвращает состояние выполнения OpenCL программы. В качестве параметра передается хэндл на кернел программы OpenCL.

    bool CLSetKernelArgMemLocal(int kernel_handle,int arg_index,ulong local_mem_size)
    Задает локальный буфер в качестве аргумента kernel-функции. В качестве параметров передаются хэндл на кернел программы OpenCL, номер аргумента OpenCL функции и размер буфера.

  5. Добавлен код ответа TRADE_RETCODE_LIMIT_POSITIONS. Количество открытых позиций, которое можно одновременно иметь на счете, может быть ограничено настройками сервера. При достижении лимита в ответ на выставление ордера сервер вернет ошибку TRADE_RETCODE_LIMIT_POSITIONS. Ограничение работает по-разному в зависимости от типа учета позиций на счете:

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

  6. Исправлена ошибка, в некоторых случаях приводившая к пропуску тиков в тиковой истории.
  7. Исправлены ошибки косвенной типизации шаблонов.
  8. Обновлена библиотека работы с математической статистикой.
  9. Добавлена функция TranslateKey, которая возвращает  Unicode-символ по виртуальному коду клавиши, учитывая текущий язык ввода и состояние управляющих клавиш. Функция использует ToUnicodeEx для преобразования нажатых пользователем клавиш в Unicode-символы.
    void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam)
      {
       if(id==CHARTEVENT_KEYDOWN)
         {
          short sym=TranslateKey((int)lparam);
          //--- если введённый символ успешно преобразован в Юникод
          if(sym>0)
             Print(sym,"'",ShortToString(sym),"'");
          else
             Print("Error in TranslateKey for key=",lparam);
         }
      }

Market

  1. Исправлено открытие страницы продукта при скачивании демо-версии.

Tester

  1. После завершения оптимизации результаты теперь автоматически сортируются по колонке "Результат".
  2. В контекстное меню вкладки результатов оптимизации и журнала добавлена опция автоматического переключения на результаты после завершения оптимизации.
  3. Тестер стратегий теперь остается в режиме оптимизации после запуска одиночного тестирования. Ранее, если из вкладки результатов оптимизации запускалось одиночное тестирование, тестер стратегий полностью переходил в режим одиночного тестирования. Для проведения повторной оптимизации было необходимо включать ее вновь в настройках.
  4. Теперь наборы входных параметров можно сохранять не только в виде set-файлов, но и в виде настроек локального тестера стратегий с удобным доступом к ним через контекстное меню.




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

MetaEditor

  1. Добавлена возможность менять порядок наблюдаемых выражений в окне отладки. Просто перетащите выражение в нужную позицию мышью.




  2. Исправлена ошибка определения кодировки исходных файлов.
  3. Исправлен поиск по файлам в кодировке UTF-8.
  4. Исправлена ошибка выделения текста мышью при наличии в нем знаков табуляции.
  5. Добавлен перевод интерфейса на венгерский и румынский языки.

Обновлена документация.

18 января 2017

MetaTrader 5 Android build 1506: фильтрация и сортировка сделок
  • Во вкладках "Торговля" и "История" появилась возможность сортировки по символам (финансовым инструментам), ордерам и времени торговых операций. Помимо сортировки в "Истории" вы можете также отфильтровать сделки по символу.

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

9 декабря 2016

MetaTrader 5 build 1495: Улучшения в MQL5 для работы с пользовательской графикой

MQL5

  1. Добавлена функция CopyTicksRange.
  2. В класс CCanvas добавлены улучшенные функции сглаживания:
  3. В документацию MQL5 добавлено описание графической библиотеки, с помощью которой можно быстро строить гистограммы, распределения и линейные графики прямо на ценовых чартах.
  4. В константы Состояние клиентского терминала добавлены идентификаторы состояния системных клавиш. Вызов TerminalInfoInteger(TERMINAL_KEYSTATE_XXX) возвращает такой же код состояния клавиши, как и функция GetKeyState() из MSDN.
  5. Отключена поддержка приведения типа string к типу bool. Для проверки строк потребуется явно прописать условие. Например, для следующего кода в новой версии будет выдаваться ошибка компиляции:
    string str;
    ...
    if(str)                        // будет ошибка компиляции "Cannot convert type 'string' to 'bool'" (в предыдущих билдах ошибки не было)
       Print("str is true");
    Следует написать явное условие:
    string str;
    ...
    
    //--- проверка, инициализирована ли строка
    if(str!=NULL)
       Print("str is true");
    
    или
    
    //--- проверка, является ли значение строки "true"
    if(StringCompare(str,"true",false))
       Print("str is true");
    
    или
    
    //--- проверка, что строка является числом и не равна нулю
    if((int)str!=0)
       Print("str is true");
Исправления по крешлогам.

2 декабря 2016

Веб-платформа MetaTrader 5: двухфакторная авторизация и смена пароля
  • Для усиления защиты торговых счетов добавлена двухфакторная авторизация при помощи одноразовых паролей. Чтобы включить двухфакторную авторизацию, воспользуйтесь мобильным приложением MetaTrader 5. Авторизуйтесь и в окне "Настройки" откройте генератор One-time password (OTP). Привяжите к нему все свои торговые счета — и для каждого будет автоматически создаваться уникальный одноразовый пароль из шести цифр. Введите его при авторизации в веб-платформу. 
     



  • Добавлена возможность смены обычного и инвесторского паролей. Воспользуйтесь этой возможностью, чтобы создать удобный для запоминания персональный идентификатор.
  • Веб-платформа также получила автоматическую генерацию демо-счетов. Теперь вы можете зайти в MetaTrader 5 Web из любого браузера и немедленно начать торговать на Форексе, фондовой бирже, фьючерсами или CFD.

24 ноября 2016

MetaTrader 5 build 1485: дополнительные режимы тестирования и графика в стандартной библиотеке

Terminal

  1. Изменен порядок отображения записей в журналах терминала и MetaEditor. Ранее в начале журнала показывались самые свежие записи, теперь — самые старые. Обратный порядок сортировки сделает чтение журнала более удобным и привычным.


    Кроме того, через контекстное меню журнала теперь можно скрыть столбцы "Время" и "Источник".

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



  3. Исправлена ошибка, приводившая к копированию уровней SL/TP из имеющейся позиции в новую позицию по тому же инструменту. Ошибка проявлялась при использовании функций торговли одним кликом (например, на графике, в окне "Обзор рынка") в режиме хеджинга.
  4. Исправлено отображение объектов-стрелок на экранах сверхвысокого разрешения (4К).

MQL5

  1. Добавлена функция ArrayPrint для вывода в журнал массивов простых типов и структур.
    void  ArrayPrint(
       const void&   array[],             // выводимый массив
       uint          digits=_Digits,      // количество десятичных знаков после запятой
       const string  separator=NULL,      // разделитель между значениями полей структуры
       ulong         start=0,             // индекс первого выводимого элемента
       ulong         count=WHOLE_ARRAY,   // количество выводимых элементов
       ulong         flags=ARRAYPRINT_HEADER|ARRAYPRINT_INDEX|ARRAYPRINT_LIMIT|ARRAYPRINT_ALIGN    
       );
    ArrayPrint выводит в журнал не все поля массива структур – поля-массивы и поля-указатели объектов пропускаются. Для вывода всех полей такой структуры понадобится собственная функция массового вывода с желаемым форматированием.
    //--- выводит значения 10 последних баров
       MqlRates rates[];
       if(CopyRates(_Symbol,_Period,1,10,rates))
         {
          ArrayPrint(rates);
          Print("Проверка\n[time]\t[open]\t[high]\t[low]\t[close]\t[tick_volume]\t[spread]\t[real_volume]");
          for(int i=0;i<10;i++)
            {
             PrintFormat("[%d]\t%s\t%G\t%G\t%G\t%G\t%G\t%G\t%I64d\t",i,
             TimeToString(rates[i].time,TIME_DATE|TIME_MINUTES|TIME_SECONDS),
             rates[i].open,rates[i].high,rates[i].low,rates[i].close,
             rates[i].tick_volume,rates[i].spread,rates[i].real_volume);
            }
         }
       else
          PrintFormat("CopyRates failed, error code=%d",GetLastError());
    //--- пример вывода
    /*
                        [time]  [open]  [high]   [low] [close] [tick_volume] [spread] [real_volume]
       [0] 2016.11.09 04:00:00 1.11242 1.12314 1.11187 1.12295         18110       10   17300175000
       [1] 2016.11.09 05:00:00 1.12296 1.12825 1.11930 1.12747         17829        9   15632176000
       [2] 2016.11.09 06:00:00 1.12747 1.12991 1.12586 1.12744         13458       10    9593492000
       [3] 2016.11.09 07:00:00 1.12743 1.12763 1.11988 1.12194         15362        9   12352245000
       [4] 2016.11.09 08:00:00 1.12194 1.12262 1.11058 1.11172         16833        9   12961333000
       [5] 2016.11.09 09:00:00 1.11173 1.11348 1.10803 1.11052         15933        8   10720384000
       [6] 2016.11.09 10:00:00 1.11052 1.11065 1.10289 1.10528         11888        9    8084811000
       [7] 2016.11.09 11:00:00 1.10512 1.11041 1.10472 1.10915          7284       10    5087113000
       [8] 2016.11.09 12:00:00 1.10915 1.11079 1.10892 1.10904          8710        9    6769629000
       [9] 2016.11.09 13:00:00 1.10904 1.10913 1.10223 1.10263          8956        7    7192138000
       Проверка
       [time] [open] [high] [low] [close] [tick_volume] [spread] [real_volume]
       [0] 2016.11.09 04:00:00 1.11242 1.12314 1.11187 1.12295 18110 10 17300175000 
       [1] 2016.11.09 05:00:00 1.12296 1.12825 1.1193 1.12747 17829 9 15632176000 
       [2] 2016.11.09 06:00:00 1.12747 1.12991 1.12586 1.12744 13458 10 9593492000 
       [3] 2016.11.09 07:00:00 1.12743 1.12763 1.11988 1.12194 15362 9 12352245000 
       [4] 2016.11.09 08:00:00 1.12194 1.12262 1.11058 1.11172 16833 9 12961333000 
       [5] 2016.11.09 09:00:00 1.11173 1.11348 1.10803 1.11052 15933 8 10720384000 
       [6] 2016.11.09 10:00:00 1.11052 1.11065 1.10289 1.10528 11888 9 8084811000 
       [7] 2016.11.09 11:00:00 1.10512 1.11041 1.10472 1.10915 7284 10 5087113000 
       [8] 2016.11.09 12:00:00 1.10915 1.11079 1.10892 1.10904 8710 9 6769629000 
       [9] 2016.11.09 13:00:00 1.10904 1.10913 1.10223 1.10263 8956 7 7192138000 
    */

  2. Исправлена ошибка сложения строк вида S1=S2+S1
  3. Изменено поведение функции ArrayResize. При передаче в качестве параметра reserve_size значения -1 функция освобождает неиспользованную (зарезервированную) память, если при этом не происходит увеличение размера массива. Изменение размера массива на 0 со значением reserve_size=-1 эквивалентно вызову ArrayFree. Новое поведение позволяет оптимизировать использование памяти в MQL5-программах.
    void OnStart()
      {
       int arr[];
    //--- сколько памяти использовано изначально 
       Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB");
    //--- сколько памяти использовано для массива размером 1, но с резервом
       ArrayResize(arr,1,1024*1024);
       Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB");
    //--- после увеличения массива размер используемой памяти не изменится за счет резерва
       ArrayResize(arr,1024*512,1024*1024);
       Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB");
    //--- после уменьшения массива размер памяти также не изменится
       ArrayResize(arr,1);
       Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB");
    //--- не используемая массивом память освободится за счет удаления резерва
       ArrayResize(arr,1,-1);
       Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB");
      }

  4. В стандартную библиотеку добавлены функции для построения графиков. Для использования включите файл MQL5\Include\Graphics\Graphic.mqh в свой проект.

    Построение графика из 3 серий данных при помощи GraphPlot:
    #include <Graphics/Graphic.mqh>
    
    double Func1(double x) { return MathPow(x,2); }
    double Func2(double x) { return MathPow(x,3); }
    double Func3(double x) { return MathPow(x,4); }
    
    void OnStart()
      {
       GraphPlot(Func1,Func2,Func3,-2,2,0.05,CURVE_LINES);
      }
    
    Результат:



    Построение графика на основе массива данных при помощи GraphPlot:
    #include <Math/Stat/Binomial.mqh>
    #include <Graphics/Graphic.mqh>
    
    void OnStart(void)
      {
       double    vars[101];
       double    results[101];
       const int N=2000;
    //---  
       MathSequence(0,N,20,vars);
       MathProbabilityDensityBinomial(vars,N,M_PI/10,true,results);
       ArrayPrint(results,4);
       GraphPlot(results);
    //---
      }
    Результат:



  5. Обновлены функции работы с математической статистикой в стандартной библиотеке. Проведена большая проверка качества и точности всех функций как в MQL5-версии, так и в исходном языке R. Для контроля точности и скорости работы вместе со статистической библиотекой распространяются юнит-тесты. Они находятся в каталоге \MQL5\Scripts\UnitTests\Stat.

    • TestStat.mq5 — основной тестовый скрипт для проверки результатов вычислений
    • TestPrecision.mq5 — тест точности вычислений
    • TestBenchmark.mq5 — тест с замером производительности вычислений

Tester

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


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

  2. Исправлена ошибка формирования тикового объема баров при тестировании в режиме OHLC на М1.
  3. Исправлено проставление времени открытия у ордеров и позиций с точностью до миллисекунд при торговле в режиме хеджинга.
  4. Исправлена ошибка "old tick" (тик устарел), появлявшаяся при мультивалютном либо мультитаймфреймовом тестировании в режиме реальных тиков.
  5. Ускорена работа функции CopyTicks в случае, когда запрошенные тики читались из базы на диске.

MetaEditor

  1. Команды работы с версионным хранилищем исходных кодов MQL5 Storage добавлены в контекстное меню файла в Навигаторе и на панель инструментов.



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

Обновлена документация.

24 ноября 2016

MetaTrader 5 iOS build 1425
  • Улучшена панель торговли одним кликом на графике: теперь она доступна и при вертикальной ориентации смартфона, а объем сделок можно быстро менять, выбирая нужный из списка.

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

14 октября 2016

MetaTrader 5 build 1455: Библиотеки математических функций в MQL5

Terminal

  1. Добавлены всплывающие подсказки для кнопок Buy, Sell и Close в диалогах торговли. Подсказки поясняют, какие именно активы будут куплены и проданы при выполнении той или иной операции, помогая начинающим трейдерам понять суть торгового процесса.




  2. Добавлены новые пиктограммы ордеров, сделок и позиций на вкладках "Торговля" и "История".




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

MQL5

  1. В стандартную библиотеку включена MQL5-версия библиотеки численного анализа ALGLIB.

    Возможности библиотеки

    • Линейная алгебра
    • Решение систем уравнений — линейных и нелинейных
    • Интерполяция
    • Оптимизация
    • Быстрое преобразование Фурье
    • Численное интегрирование
    • Линейная и нелинейная аппроксимация по методу наименьших квадратов
    • Решение обыкновенных дифференциальных уравнений
    • Вычисление специальных функций
    • Описательная статистика и проверка гипотез
    • Анализ данных — классификация, регрессия
    • Реализация алгоритмов линейной алгебры, интерполяции и т.д. в арифметике высокой точности (с использованием MPFR)

    Как использовать

    Файлы библиотеки ALGLIB расположены в каталоге \MQL5\Include\Math\Alglib. Для использования функций включите основной файл библиотеки в свою программу:

    #include <Math\Alglib\alglib.mqh>

  2. В стандартную библиотеку включены функции работы с математической статистикой. Теперь в MQL5 доступны возможности языка R —  одного из лучших инструментов статистической обработки и анализа данных.

    Возможности библиотеки

    Статистическая библиотека содержит функции для расчета статистических характеристик данных, а также функции для работы со статистическими распределениями:

    • Функции для расчета статистических характеристик элементов массива
    • Функции для работы со статистическими распределениями: нормальное распределение, логнормальное распределение, бета-распределение и т.д.

    Как использовать

    Файлы статистической библиотеки расположены в каталоге \MQL5\Include\Math\Stat. Для использования включите файл с нужными функциями в свою программу, например:

    #include <Math\Stat\Binomal.mqh>
    #include <Math\Stat\Cauchy.mqh>
    

    Подробное описание функций библиотеки читайте в статье Статистические распределения в MQL5 - берем лучшее из R.


  3. В стандартную библиотеку включена MQL5-версия библиотеки Fuzzy, в которой реализованы системы нечеткого логического вывода Мамдани и Сугено.

    Возможности библиотеки

    • 13 функций принадлежностей
    • Гибкая форма написания правил для нечетких систем
    • Система нечеткого логического вывода Мамдани
    • Система нечеткого логического вывода Сугено
    • 5 методов дефаззификации для систем типа Мамдани
    • Неограниченное количество входных и выходных переменных

    Как использовать

    Файлы библиотеки Fuzzy расположены в каталоге \MQL5\Include\Math\Fuzzy. Для использования включите файл с нужными функциями в свою программу, например:

    #include <Math\Fuzzy\mamdanifuzzysystem.mqh>
    #include <Math\Fuzzy\sugenofuzzysystem.mqh>
    

    Подробное описание библиотеки можно найти в Code Base: Fuzzy - библиотека для работы с нечеткой логикой


  4. Добавлено свойство CHART_QUICK_NAVIGATION для включения/отключения строки быстрой навигации на графике. Для изменения и получения состояния свойства используйте функции ChartSetInteger и ChartGetInteger.




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

  5. Добавлены функции FileLoad и FileSave для легкого чтения и сохранения массивов в файлы. В отличие от FileRead* и FileWrite*, этим функциям не требуется хэндл файла. FileLoad и FileSave работают с массивами числовых типов, а также с простыми структурами, не имеющими строк, динамических массивов или объектов класса.
    long  FileLoad(
       const string filename,      // [in] имя файла
       void         &buffer[],     // [out] массив, в который считывается файл
       uint         common_flag=0  // [in] 0 - поиск файла в папке Files терминала, FILE_COMMON - в общей папке терминалов
       );
    
    bool  FileSave(
       const string filename,      // [in] имя файла
       const void   &buffer[],     // [in] массив, который сохраняется в файл
       uint         common_flag=0  // [in] 0 - создание файла в папке Files терминала, FILE_COMMON - в общей папке терминалов
       );
    Пример записи массива тиков в файл с последующим чтением этих данных:
    //--- входные параметры
    input int      ticks_to_save=1000; // количество тиков
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       string  filename=_Symbol+"_ticks.bin";
       MqlTick ticks[];
    //---
       int copied=CopyTicks(_Symbol,ticks,COPY_TICKS_ALL,0,ticks_to_save);
       if(copied!=-1)
         {
          PrintFormat(" CopyTicks(%s) copied %d ticks",_Symbol,copied);
          //--- если тиковая история синхронизирована, то код ошибки равен нулю
          if(!GetLastError()==0)
             PrintFormat("%s: Ticks are not synchronized. Error=",_Symbol,copied,_LastError);
          //---  запишем тики в файл
          if(!FileSave(filename,ticks,FILE_COMMON))
             PrintFormat("FileSave() failed, error=%d",GetLastError());
         }
       else
          PrintFormat("Failed CopyTicks(%s), Error=",_Symbol,GetLastError());
    //--- теперь прочитаем эти тики обратно из файла
       ArrayFree(ticks);
       long count=FileLoad(filename,ticks,FILE_COMMON);
       if(count!=-1)
         {
          Print("Time\tBid\tAsk\tLast\tVolume\tms\tflags");
          for(int i=0;i<count;i++)
            {
             PrintFormat("%s.%03I64u:\t%G\t%G\t%G\t%I64u\t0x%04x",
             TimeToString(ticks[i].time,TIME_DATE|TIME_SECONDS),ticks[i].time_msc%1000,
             ticks[i].bid,ticks[i].ask,ticks[i].last,ticks[i].volume,ticks[i].flags);
            }
         }
      }

  6. Модифицировано отображение пользовательского индикатора с режимом рисования DRAW_CANDLES. Теперь для этого стиля можно задавать от одного до трех цветов, в зависимости от этого меняется внешний вид свечей.

    Если указан один цвет, все свечи на графике будут полностью окрашены этим цветом.
    //--- одинаковые свечи, окрашенные в один цвет 
    #property indicator_label1  "One color candles"
    #property indicator_type1   DRAW_CANDLES
    //--- указан только один цвет, поэтому все свечи будут одного цвета
    #property indicator_color1  clrGreen  
    Если указано два цвета, контуры свечи будут отрисовываться первым цветом, а тело — вторым цветом.
    //--- цвет свечей отличается от цвета теней
    #property indicator_label1  "Two color candles"
    #property indicator_type1   DRAW_CANDLES
    //--- тени и контур свечей зеленого цвета, тело белого цвета
    #property indicator_color1  clrGreen,clrWhite 
    Если указано три цвета, контур свечи будет нарисован первым цветом, а цвет бычьей и медвежьей свечей будет задаваться вторым и третьим цветом.
    //--- цвет свечей отличается от цвета теней
    #property indicator_label1  "One color candles"
    #property indicator_type1   DRAW_CANDLES
    //--- тени и контур зелёного цвета, тело бычьей свечи белого цвета, тело медвежьей свечи красного цвета
    #property indicator_color1  clrGreen,clrWhite,clrRed
    Таким образом, с помощью стиля DRAW_CANDLES можно создавать собственные пользовательские варианты раскраски свечей. Все цвета можно также менять динамически в процессе работы индикатора с помощью функции PlotIndexSetInteger(индекс_построения_DRAW_CANDLES, PLOT_LINE_COLOR, номер_модификатора, цвет) , где номер_модификатора можеть иметь следующие значения:
    • 0 – цвет контура и теней
    • 1– цвет тела бычьей свечи
    • 2 – цвет тела медвежьей свечи
    //--- установим цвет контура и теней
    PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,clrBlue);
    //--- установим цвет тела для бычьей свечи
    PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,clrGreen);
    //--- установим цвет тела для медвежьей свечи
    PlotIndexSetInteger(0,PLOT_LINE_COLOR,2,clrRed);
  7. Исправлен ряд ошибок и ускорена работа с тиковой историей при помощи функций CopyTicks.
  8. Разрешено использование операторов в интерфейсах.

Market

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

Tester

  1. Добавлен перевод пользовательского интерфейса на греческий язык, малайский язык и иврит.

Обновлена документация.

29 сентября 2016

Веб-платформа MetaTrader 5: оптимизация кода и новые возможности интерфейса
  • Добавлена возможность изменять размеры блоков веб-приложения — от "Обзора рынка" до окон с графиками котировок.
  • Стала доступна сортировка по столбцам во вкладках "Торговля" и "История" в окне "Инструменты". Ширину столбцов при этом можно менять.
  • В Market Watch добавлен инструмент быстрого выделения символа и вкладка "Детали".
  • Проведена оптимизация кода для ускорения общей работы веб-терминала — инициализация счета, выделение символов и сама торговля стали работать еще быстрее.

26 сентября 2016

MetaTrader 5 iOS build 1403
  • Изменено отображение раздела "Торговля" — вид торговой информации теперь зависит от системы управления рисками на торговом счете: Retail Forex, CFD, Futures или Биржевая модель.


  • Выбор языка интерфейса перенесён в отдельный пункт меню в общих настройках.
  • Исправления и улучшения.
  • 26 сентября 2016

    MetaTrader 5 Android build 1372
    • Добавлена поддержка мультиоконного режима чартов — трейдеры могут одновременно следить за динамикой цен сразу нескольких финансовых инструментов.
    • Появилась возможность менять высоту подокон, в которых открываются индикаторы.
    • Теперь в мобильной платформе есть кнопка быстрого выбора инструмента и отдельное меню настроек чарта. 


    • Добавлено редактирование уровней индикаторов.
    • Интерфейс переведен на болгарский язык.

    16 сентября 2016

    MetaTrader 5 build 1430: Обновленная вкладка Exposure

    Terminal

    1. Реализован новый алгоритм формирования вкладки "Активы" для фондового рынка. Теперь терминал адаптирует представление активов в зависимости от того, какая система управления рисками используется для торгового счета: Retail Forex, CFD, Futures или Биржевая модель.

      Тем, кто торгует на Forex или фьючерсами на бирже, раздел "Активы" поможет понять свое текущее положение в рынке. Одни и те же валюты встречаются во множестве различных инструментов: в качестве одной из валют в паре, в качестве базовой валюты и т.д. Например, у вас могут быть разнонаправленные позиции по GBPUSD, USDJPY и GBPJY. В этой ситуации понять, сколько в итоге у вас есть той или иной валюты, и сколько вы должны, весьма проблематично. Еще сложнее, когда таких позиций не три, а гораздо больше. В этой ситуации итоговое состояние счета можно легко посмотреть на вкладке "Активы".
      Рассмотрим пример на тех же трех позициях:

      Buy GBPJPY 1 lot at 134.027 — получили 100 000 GBP, отдали 134 027 000 JPY
      Sell USDJPY 1 lot at 102.320 — отдали 100 000 USD, получили 102 320 000 JPY
      Sell GBPUSD 1 lot at 1.30923 — отдали 100 000 GBP, получили 103 920 USD

      Мы одновременно купили и продали 100 000 GPB. Суммарно по GBP у нас 0, и вкладка "Активы" эту валюту не показывает. По USD в одном случае мы отдали валюту, в другом — получили. Вкладка "Активы" посчитает итог и просуммирует его с текущим балансом, поскольку валюта депозита у нас также USD. JPY участвовала в двух сделках, вкладка также покажет итоговое значение.




      Тем, кто торгует по биржевой модели, раздел поможет понять, как используются деньги. В отличие от предыдущей модели, при совершении сделок деньги сразу списываются/начисляются на баланс. Например, при покупке EURRUB вы сразу получаете евро, а с баланса списывается соответствующая сумма в рублях. Во время торговли баланс счета даже может стать отрицательным: когда вы торгуете на заемные средства, а в роли обеспечения выступают приобретенные активы. В этой ситуации вкладка "Активы" позволит вам легко понять торговое состояние счета.

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





    2. Исправлена ошибка отображения типа сделки в истории торговых операций.
    3. Исправлен повторный показ окна уведомления о рисках при переподключении к торговому счету.
    4. Оптимизирована и исправлена работа с диалогом выбора торговых инструментов при большом числе символов (несколько тысяч и более).
    5. Исправлено отображение уровней у встроенных индикаторов, рассчитываемых на основе Moving Average (Bollinger Bands, Adaptive Moving Average и т.д.). Проблема возникала при построении индикаторов в отдельном подокне.
    6. Исправлена ошибка, в некоторых случаях приводившая к невозможности выставить ордер по фьючерсном контракту. Проблема возникала, если цена в ордере совпадала с верхним или нижним лимитом цен по контракту.

    MQL5

    1. Оптимизирована и ускорена компиляция MQL5-программ.
    2. Добавлена поддержка модификаторов final и override для классов, структур и функций.

      Модификатор final для классов и структур
      Наличие модификатора final при объявлении структуры или класса запрещает дальнейшее наследование от него. Если класс (структура) таков, что нет необходимости вносить в него дальнейшие изменения, или изменения недопустимы по соображениям безопасности, объявите его с модификатором final. При этом все методы класса будут также неявно считаться final.
      class CFoo final
        {
        //--- тело класса
        };
       
      class CBar : public CFoo
        {
        //--- тело класса
        };
      При попытке наследования от класса с модификатором final, как показано в примере выше, компилятор выдаст ошибку:
      cannot inherit from 'CFoo' as it has been declared as 'final'
      see declaration of 'CFoo'

      Модификатор override для функций
      Модификатор override означает, что объявляемая функция обязательно должна переопределить метод родительского класса. Использование этого модификатора позволяет избежать ошибок при переопределении, таких как случайное изменение сигнатуры метода. Например, в базовом классе определен метод func, принимающий в качестве аргумента переменную типа int:
      class CFoo
        {
         void virtual func(int x) const { }
        };
      Далее метод переопределяется в наследуемом классе:
      class CBar : public CFoo
        {
         void func(short x) { }
        };
      Но по ошибке тип аргумента изменяется с int на short. Фактически, в этом случае уже происходит не переопределение, а перегрузка метода. Действуя в соответствии с алгоритмом определения перегруженной функции, в определенных ситуациях компилятор может выбрать метод, определенный в базовом классе, вместо переопределенного метода.

      Чтобы избежать подобных ошибок, к переопределяемому методу следует явно добавлять модификатор override.
      class CBar : public CFoo
        {
         void func(short x) override { }
        };
      Если при переопределении будет изменена сигнатура метода, компилятор не сможет найти в родительском классе метод с точной такой же сигнатурой и выдаст ошибку компиляции:
      'CBar::func' method is declared with 'override' specifier but does not override any base class method

      Модификатор final для функций

      Модификатор final действует наоборот — он запрещает переопределение метода в классах-наследниках. Если реализация метода самодостаточна и полностью завершена, объявите его с модификатором final, чтобы он гарантированно не был изменен в последующем.
      class CFoo
        {
         void virtual func(int x) final { }
        };
       
      class CBar : public CFoo
        {
         void func(int) { }
        };
       
      При попытке переопределения метода с модификатором final, как показано в примере выше, компилятор выдаст ошибку:
      'CFoo::func' method declared as 'final' cannot be overridden by 'CBar::func'
      see declaration of 'CFoo::func'
    3. Исправлена ошибка компиляции шаблонных функций с параметрами по умолчанию.

    Market

    1. Исправлен ряд ошибок в сортировке продуктов Маркета.

    Tester

    1. Исправлены обновления текущих рыночных цен у открытых ордеров и позиций в режиме визуального тестирования.
    2. Убрано проскальзывание исполнения ордеров Buy Limit и Sell Limit при тестировании на биржевых инструментах.
    3. Исправлена ошибка, в некоторых случаях приводившая к генерации некорректных цен в режиме тестирования "По ценам открытия".
    4. Исправлено формирование событий OnTradeTransaction при тестировании.
    5. При тестировании на основе реальных тиков в журнал тестера выводится информация о несоответствии цен тиков (bid или last, в зависимости от того, по какой цене строится бар) значениям low или high имеющегося минутного бара.

    MetaEditor

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

    19 августа 2016

    MetaTrader 5 build 1395: Ускорение торговых операций и улучшения в визуальном тестировании

    Терминал

    1. Оптимизирована и значительно ускорена отправка торговых команд клиентским терминалом.
    2. Исправлена ошибка, приводившая к невозможности выполнения MQL5-программ в терминалах при работе в 32-х разрядной версии Windows 10, build 1607.
    3. В навигатор добавлен показ режима работы торгового счета — Hedging или Netting.
    4. В навигатор добавлена команда контекстного меню для подключения выбранным счетом к веб-терминалу.
    5. Переработан раздел меню "Справка", добавлены ссылки на обучающие видеоролики.
    6. Исправлен ряд ошибок интерфейса при работе на экранах высокого разрешения (4К).
    7. Исправлены ошибки в переводе пользовательского интерфейса на персидский язык.

    MQL5

    1. Добавлены указатели 'void *', что позволит создавать абстрактные коллекции объектов. В переменную этого типа можно сохранить указатель на объект любого класса.
      Для обратного преобразования рекомендуется использовать оператор dynamic_cast<имя класса *>(указатель void *). Если приведение невозможно, результатом будет NULL.
      class CFoo { };
      class CBar { };
      //+------------------------------------------------------------------+
      //| Script program start function                                    |
      //+------------------------------------------------------------------+
      void OnStart()
        {
         void *vptr[2];
         vptr[0]=new CFoo();
         vptr[1]=new CBar();
      //---
         for(int i=0;i<ArraySize(vptr);i++)
           {
            if(dynamic_cast<CFoo *>(vptr[i])!=NULL)
               Print("CFoo * object at index ",i);
            if(dynamic_cast<CBar *>(vptr[i])!=NULL)
               Print("CBar * object at index ",i);
           }
         CFoo *fptr=vptr[1];  // выдаст ошибку приведения указателей, vptr[1] не является объектом CFoo
        }
      //+------------------------------------------------------------------+
    2. Добавлена поддержка оператора [ ] для строки, что позволит получать символ из строки по индексу. Если указанный индекс выходит за пределы строки, результатом будет 0.
      string text="Hello";
      ushort symb=text[0];  // вернет код символа 'H'
      
    3. Добавлен второй вариант обработчика события TesterInit с сигнатурой int OnTesterInit(void), который может возвращать коды INIT_SUCCEEDED (0) или INIT_FAILED (либо любое ненулевое значение). Если OnTesterInit возвращает ненулевое значение, то оптимизация не начинается.
    4. Исправлена ошибка, в результате которой разные перегрузки функции ChartGetString отдавали разный результат.

    Тестер

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




    2.  Исправлена работа функции Sleep в режиме тестирования "По ценам открытия".
    3.  Исправлена ошибка, приводившая к формированию некорректного состояния баров при работе на таймфреймах W1 и MN1.

    MetaEditor

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

    Обновлена документация.

    8 августа 2016

    MetaTrader 5 iOS build 1371
    • Полностью обновлен внешний вид сообщений. Теперь переписка на MQL5.community и уведомления из десктопной платформы показываются в виде чатов, которые вы привыкли видеть в популярных мобильных мессенджерах.
    • Появилась возможность переключаться между 23 доступными языками прямо в платформе. Если вы предпочитаете английский язык в трейдинге, включите его в разделе "О программе", не переключая язык всего устройства.

    5 августа 2016

    MetaTrader 5 Android build 1338
    • Добавлен чат MQL5.community.
    • Добавлена возможность переноса SSL-сертификатов из десктопной платформы.
    • Добавлены переводы интерфейса на персидский и голландский языки. 
    12345