- Добавлена нативная поддержка .NET библиотек с "умным" импортом функций.
    Теперь библиотеки .NET можно использовать без написания специальных 
    оберток — MetaEditor берет это на себя.
 
 Для
    работы с функциями .NET библиотеки достаточно импортировать саму DLL 
    без указания конкретных функций. MetaEditor автоматически импортирует 
    все функции, с которыми возможна работа:
 - Простые структуры (POD, plain old data) — структуры, которые содержат только простые типы данных.
- Публичные статические функции, в параметрах которых используются только простые типы и структуры POD или их массивы
 
 
 Для вызова функций из библиотеки просто импортируйте ее:
 #import "TestLib.dll"
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 библиотек продолжается, в будущих версиях планируется расширить возможности их использования.
 
 
- В стандартную библиотеку добавлена поддержка работы с 
функциями 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-битной архитектурой.
 
 
- Добавлена поддержка спецификаторов inline, __inline, __forceinline при 
    синтаксическом анализе кода. Наличие этих спецификаторов в коде не будет
    вызывать ошибки, но и не будет влиять на компиляцию. На данный момент 
    это позволит легче переносить С++ код в MQL5.
 Более подробная информация о спецификаторах доступна в MSDN.
 
 
- Проведена существенная оптимизация исполнения MQL5-программ. В 
    некоторых случаях прирост производительности может достигать 10%. Чтобы 
    получить прирост скорости, перекомпилируйте ваши программы в новой 
    версии MetaEditor.
 К сожалению, дополнительная 
      оптимизация привела к потере совместимости новых программ с 
предыдущими 
      версиями терминала. Все программы, скомпилированные в MetaEditor 
версии 1912 и выше, не будут запускаться в терминалах версии ниже 1912. 
При этом программы, 
      скомпилированные ранее в предыдущих версиях MetaEditor, будут в 
работать в
      новых терминалах.
 
 
 
- Проведена большая работа по оптимизации множества функций MQL5.
- Добавлены новые свойства для прикрепления/открепления графиков от основного окна терминала и управления их положением.
 
 В перечисление 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 — нижняя координата терминала относительно виртуального экрана.
 
 
- Добавлено поле 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;            
   double           price;           
   long             volume;          
   double           volume_real;     
  };
 
- В перечисление ENUM_SYMBOL_INFO_DOUBLE добавлены новые свойства:
 
 - SYMBOL_VOLUME_REAL — объем последней совершенной сделки;
 
- SYMBOL_VOLUMEHIGH_REAL — максимальное значение объема совершенной сделки за текущие сутки;
 
- SYMBOL_VOLUMELOW_REAL — минимальное значение объема совершенной сделки за текущие сутки.
 
 
 Для получения этих свойств используйте функцию SymbolInfoDouble.
 
 
- В перечисление ENUM_MQL_INFO_INTEGER добавлено свойство MQL_FORWARD — признак того, что программа находится в режиме форвард-тестирования.
- Для структур добавлено свойство pack( integer_value ). Оно позволяет 
задать выравнивание расположения полей внутри структуры, это бывает 
необходимо при работе с DLL. Для integer_value возможны значения 1, 2, 4, 8 и 16.
 Если свойство не определено, по умолчанию используется вырванивание в 1 байт — pack(1).
 
 Пример использования:
 
struct A
  {
   char              a;
   int               b;
  };
struct B pack(4)
  {
   char              a;
   int               b;
  };
void OnStart()
  {
   Print("sizeof(A)=",sizeof(A));
   Print("sizeof(B)=",sizeof(B));
  }
Вывод:
 sizeof(A)=5
sizeof(B)=8 Более подробная информация о выравнивании в структурах доступно в MSDN.
 
 
- Ослаблены требования к приведению перечислений. При неявном приведении 
    компилятор автоматически подставит значение правильного перечисления и 
    выведет предупреждение.
 
 Для следующего кода:
 enum Main
  {
   PRICE_CLOSE_,
   PRICE_OPEN_
  };
input Main Inp=PRICE_CLOSE;
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 При неправильном использовании перечислений в параметрах функций компилятор по-прежнему будет выдавать ошибку.
 
 
- Исправлены ошибки компиляции шаблонных функций. Теперь при 
    использовании перегруженных шаблонных функций инстанцируется только 
    нужная перегрузка, а не все имеющиеся. 
 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>(); }  
 
- Оптимизированы некоторые случаи доступа к тиковой истории через функции CopyTicks*.
- Добавлена новая функция TesterStop, которая позволяет досрочно 
завершить тестирование/проход оптимизации. При ее вызове вся накопленная
 торговая статистика и результат OnTester передаются в клиентский терминал как при штатном заврешении тестирования/оптимизации.
 
- Добавлено новое свойство для пользовательских индикаторов #property 
tester_everytick_calculate. Оно используется в тестере стратегий и 
позволяет принудительно влючить расчет индикаторов на каждом тике.
 
Обновлена документация.