MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5

Теперь вы можете выносить графики финансовых инструментов за пределы окна торгового терминала. Это удобно при работе с несколькими мониторами. Например, на одном можно расположить основное окно платф

26 октября 2018

Terminal

  1. Теперь вы можете выносить графики финансовых инструментов за пределы окна торгового терминала.

    Это удобно при работе с несколькими мониторами. Например, на одном можно расположить основное окно платформы и следить за состоянием счета, а на другом — графики для оценки ситуации на рынке. Чтобы отделить график от терминала, отключите опцию "Закреплен" в его контекстном меню. После этого расположите график на нужном мониторе.





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

  2. Полностью обновлены встроенные чаты. Теперь они поддерживают групповые диалоги и каналы. Вы можете вести закрытые обсуждения с группой людей в едином пространстве, не переключаясь между разными диалогами, создавать тематические каналы по интересам и языкам. Общаться с коллегами и друзьями на MQL5.community можно не заходя на сайт.

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




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

    Минимальный объем и шаг его изменения зависят от настроек финансового инструмента на стороне брокера.




  4. В окно "Инструменты" добавлена вкладка статей, опубликованных на MQL5.community. Более 600 подробных материалов о разработке торговых стратегий на MQL5 теперь доступны прямо в терминале. Новые статьи выходят каждую неделю.




  5. Добавлена поддержка расширенной авторизации с использованием сертификатов при работе под Wine.
  6. Исправлено отображение стакана цен при ограничении его глубины одним уровнем.
  7. На панель инструментов "Стандартная" добавлена команда "Сохранить как рисунок". Делать снимки графиков и делиться ими в сообществе стало еще легче.




  8. Исправлено применение сдвига времени при импорте баров и тиков. Ранее в некоторых случаях сдвиг не применялся.




  9. Исправлено подвисание терминала при большом количестве новостей экономического календаря.

MQL5

  1. Добавлена нативная поддержка .NET библиотек с "умным" импортом функций. Теперь библиотеки .NET можно использовать без написания специальных оберток — MetaEditor берет это на себя.

    Для работы с функциями .NET библиотеки достаточно импортировать саму DLL без указания конкретных функций. MetaEditor автоматически импортирует все функции, с которыми возможна работа:
    • Простые структуры (POD, plain old data) — структуры, которые содержат только простые типы данных.
    • Публичные статические функции, в параметрах которых используются только простые типы и структуры POD или их массивы

    Для вызова функций из библиотеки просто импортируйте ее:
    #import "TestLib.dll"
    
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       int x=41;
       TestClass::Inc(x);
       Print(x);
      }
    C# код функции Inc класса TestClass выглядит следующим образом:
    public class TestClass
    {
       public static void Inc(ref int x)
       {
        x++;
       }
    }
    В результате выполнения скрипт вернет значение 42.

    Работа над поддержкой .NET библиотек продолжается, в будущих версиях планируется расширить возможности их использования.

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

    Функции WinAPI сгруппированы в отдельных файлах по назначению:

    • libloaderapi.mqh — работа с ресурсами
    • memoryapi.mqh — работа с памятью
    • processenv.mqh — работа с окружением
    • processthreadsapi.mqh — работа с процессами
    • securitybaseapi.mqh — работа с системой безопасности ОС
    • sysinfoapi.mqh — получение системной информации
    • winbase.mqh — общие функции
    • windef.mqh — константы, структуры и перечисления
    • wingdi.mqh — работа с графическими объектами
    • winnt.mqh — работа с исключениями
    • winreg.mqh — работа с реестром
    • winuser.mqh — управление окнами и интерфейсом
    • errhandlingapi.mqh — обработка ошибок
    • fileapi.mqh — работа с файлами
    • handleapi.mqh — работа с хэндлами
    • winapi.mqh — подключение всех функций (заголовочных файлов WinAPI)

    Обвязка работает только с 64-битной архитектурой.

  3. Добавлена поддержка спецификаторов inline, __inline, __forceinline при синтаксическом анализе кода. Наличие этих спецификаторов в коде не будет вызывать ошибки, но и не будет влиять на компиляцию. На данный момент это позволит легче переносить С++ код в MQL5.
    Более подробная информация о спецификаторах доступна в MSDN.

  4. Проведена существенная оптимизация исполнения MQL5-программ. В некоторых случаях прирост производительности может достигать 10%. Чтобы получить прирост скорости, перекомпилируйте ваши программы в новой версии MetaEditor.
    К сожалению, дополнительная оптимизация привела к потере совместимости новых программ с предыдущими версиями терминала. Все программы, скомпилированные в MetaEditor версии 1912 и выше, не будут запускаться в терминалах версии ниже 1912. При этом программы, скомпилированные ранее в предыдущих версиях MetaEditor, будут в работать в новых терминалах.

  5. Проведена большая работа по оптимизации множества функций MQL5.
  6. Добавлены новые свойства для прикрепления/открепления графиков от основного окна терминала и управления их положением.

    В перечисление ENUM_CHART_PROPERTY_INTEGER добавлены:

    • CHART_IS_DOCKED — окно графика закреплено. Если установить значение false, то график можно перетащить за пределы терминала.
    • CHART_FLOAT_LEFT — левая координата открепленного графика относительно виртуального экрана.
    • CHART_FLOAT_TOP — верхняя координата открепленного графика относительно виртуального экрана.
    • CHART_FLOAT_RIGHT — правая координата открепленного графика относительно виртуального экрана.
    • CHART_FLOAT_BOTTOM — нижняя координата открепленного графика относительно виртуального экрана.

    В перечисление ENUM_TERMINAL_INFO_INTEGER добавлены:

    • TERMINAL_SCREEN_LEFT — левая координата виртуального экрана. Виртуальным экраном является прямоугольник, охватывающий все мониторы. Если в системе имеются два монитора и их порядок задан справа налево, то левая координата виртуального экрана может оказаться на границе двух мониторов.
    • TERMINAL_SCREEN_TOP — верхняя координата виртуального экрана.
    • TERMINAL_SCREEN_WIDTH — ширина терминала.
    • TERMINAL_SCREEN_HEIGHT — высота терминала.
    • TERMINAL_LEFT — левая координата терминала относительно виртуального экрана.
    • TERMINAL_TOP — верхняя координата терминала относительно виртуального экрана.
    • TERMINAL_RIGHT — правая координата терминала относительно виртуального экрана.
    • TERMINAL_BOTTOM — нижняя координата терминала относительно виртуального экрана.

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

    struct MqlTick
      {
       datetime         time;            // Время последнего обновления цен
       double           bid;             // Текущая цена Bid
       double           ask;             // Текущая цена Ask
       double           last;            // Текущая цена последней сделки (Last)
       ulong            volume;          // Объем для текущей цены Last
       long             time_msc;        // Время последнего обновления цен в миллисекундах
       uint             flags;           // Флаги тиков
       double           volume_real;     // Объем для текущей цены Last c повышенной точностью
      };

    struct MqlBookInfo
      {
       ENUM_BOOK_TYPE   type;            // тип заявки из перечисления ENUM_BOOK_TYPE
       double           price;           // цена
       long             volume;          // объем
       double           volume_real;     // объем с повышенной точностью
      };

  8. В перечисление ENUM_SYMBOL_INFO_DOUBLE добавлены новые свойства:

    • SYMBOL_VOLUME_REAL — объем последней совершенной сделки;
    • SYMBOL_VOLUMEHIGH_REAL — максимальное значение объема совершенной сделки за текущие сутки;
    • SYMBOL_VOLUMELOW_REAL — минимальное значение объема совершенной сделки за текущие сутки.

    Для получения этих свойств используйте функцию SymbolInfoDouble.

  9. В перечисление ENUM_MQL_INFO_INTEGER добавлено свойство MQL_FORWARD — признак того, что программа находится в режиме форвард-тестирования.
  10. Для структур добавлено свойство pack( integer_value ). Оно позволяет задать выравнивание расположения полей внутри структуры, это бывает необходимо при работе с DLL. Для integer_value возможны значения 1, 2, 4, 8 и 16.
    Если свойство не определено, по умолчанию используется вырванивание в 1 байт — pack(1).

    Пример использования:
    //+------------------------------------------------------------------+
    //| Default packing                                                  |
    //+------------------------------------------------------------------+
    struct A
      {
       char              a;
       int               b;
      };
    //+------------------------------------------------------------------+
    //| Specified packing                                                |
    //+------------------------------------------------------------------+
    struct B pack(4)
      {
       char              a;
       int               b;
      };
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       Print("sizeof(A)=",sizeof(A));
       Print("sizeof(B)=",sizeof(B));
      }
    //+------------------------------------------------------------------+
    Вывод:
    sizeof(A)=5
    sizeof(B)=8
    Более подробная информация о выравнивании в структурах доступно в MSDN.

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

    Для следующего кода:
    enum Main
      {
       PRICE_CLOSE_,
       PRICE_OPEN_
      };
    
    input Main Inp=PRICE_CLOSE;
    //+------------------------------------------------------------------+
    //| Start function                                                   |
    //+------------------------------------------------------------------+
    void OnStart()
      {
      }
    Компилятор выдаст предупреждение:
    implicit conversion from 'enum ENUM_APPLIED_PRICE' to 'enum Main'
    'Main::PRICE_OPEN_' instead of 'ENUM_APPLIED_PRICE::PRICE_CLOSE' will be used
    Ранее в этом случае выдавалась ошибка:
    'PRICE_CLOSE' - cannot convert enum
    При неправильном использовании перечислений в параметрах функций компилятор по-прежнему будет выдавать ошибку.

  12. Исправлены ошибки компиляции шаблонных функций. Теперь при использовании перегруженных шаблонных функций инстанцируется только нужная перегрузка, а не все имеющиеся.
    class X {  };
    
    void f(int)  {  }
      
    template<typename T>
    void a(T*) { new T(2); }  // ранее в этом месте компилятор выдавал ошибку
      
    template<typename T>
    void a()  { f(0); }
      
      
    void OnInit()  { a<X>(); }  

  13. Оптимизированы некоторые случаи доступа к тиковой истории через функции CopyTicks*.
  14. Добавлена новая функция TesterStop, которая позволяет досрочно завершить тестирование/проход оптимизации. При ее вызове вся накопленная торговая статистика и результат OnTester передаются в клиентский терминал как при штатном заврешении тестирования/оптимизации.
  15. Добавлено новое свойство для пользовательских индикаторов #property tester_everytick_calculate. Оно используется в тестере стратегий и позволяет принудительно влючить расчет индикаторов на каждом тике.

Tester

  1. Теперь при невизуальном тестировании/оптимизации все используемые индикаторы (стандартные и пользовательские) рассчитываются только по запросу данных. Исключение составляют индикаторы, содержащие вызовы функции EventChartCustom и использующие обработчик OnTimer. Ранее в тестере стратегий при приходе любого тика (даже от чужого инструмента) все индикаторы рассчитывались безусловно. Нововведение позволило существенно ускорить тестирование и оптимизацию.

    Чтобы принудительно включить расчет индикаторов на каждом тике, добавьте для программы свойство #property tester_everytick_calculate.

    Индикаторы, скомпилированные предыдущими версиями компилятора, будут рассчитываться как раньше — на каждом тике.

  2. Исправлен учет точности валюты депозита при тестировании/оптимизации и формировании соответствующих отчетов.
  3. Оптимизирована и ускорена работа тестера стратегий.
  4. Исправлен ряд ошибок тестирования и оптимизации.

MetaEditor

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

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