MetaTrader 5 build 1200: тиковая история и оплата сервисов напрямую

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

23 октября 2015

Торговый терминал

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


    Для автоматического получения более глубокой тиковой истории используйте функцию CopyTicks(), ее работа изменена таким образом, что запрашивает и загружает отсутствующую историю при ее наличии на торговом сервере.

  2. На графике рядом с панелью "Торговля одним кликом" добавлена иконка для быстрого включения/выключения стакана цен.  Вы можете также пользоваться новым хоткеем Alt+B, который  работает не только на самом графике, но и в окне Market Watch - в этом случае открывается стакан цен по тому символу, который выделен в Обзоре рынка.



  3. Добавлена запись в журнал о характеристиках компьютера и операционной системы на старте клиентского терминала. Пример:
    2015.10.14 14:48:18.486	Data Folder: C:\Program Files\MetaTrader 5
    2015.10.14 14:48:18.486	Windows 7 Professional (x64 based PC), IE 11.00, UAC, 8 x Intel Core i7  920 @ 2.67GHz, RAM: 8116 / 12277 Mb, HDD: 534262 / 753865 Mb, GMT+03:00
    2015.10.14 14:48:18.486	MetaTrader 5 build 1190 started (MetaQuotes Software Corp.)
  4. Улучшена работа с символами в "Обзоре рынка" (Market Watch):

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


  5. Добавлена поддержка календаря экономических событий на нескольких языках.
  6. Добавлены недостающие пиктограммы стран в экономическом календаре.
  7. Добавлены горячие клавиши для вызова окна управления символами в Обзоре рынка - Ctrl+U.
  8. Исправлено упорядочивание открытых окон графиков командами в меню "Window".
  9. Исправлена ошибка, когда терминал в некоторых случаях не мог найти файл сертификата при использовании расширенной аутентификации.
  10. Исправлена ошибка, приводившая в некоторых случаях к зацикливанию синхронизации ценовой истории.
  11. Исправлена ошибка, приводившая к занулению уровней StopLoss/TakeProfit у ранее открытой позиции при увеличении ее объема, если инструмент торгуется в режиме Request Execution.
  12. В стакане цен исправлена проверка возможности выставления ордеров на продажу при наличии длинной позиции по инструментам с режимом торговли "Long only".
  13. Исправлена работа функции Trailing Stop. В некоторых редких случаях защитный Stop Loss мог неправильно подтягиваться для открытой позиции.
  14. Продолжены работы по адаптации интерфейса к работе на экранах высокого разрешения (4К).
  15. Исправлена ошибка, приводившая к выгрузке исторических данных как неиспользуемых, несмотря на регулярные обращения к данным из MQL5 программ.
  16. Исправлено отображения ряда элементов пользовательского интерфейса при работе в Windows 10.
  17. Обновлены переводы пользовательского интерфейса.

Маркет

  1. Переработана и оптимизирована работа с базой продуктов MQL5 Market.
  2. Добавлен запрет на покупку без MQL5.community аккаунта при использовании терминала в среде виртуальной машины. Теперь для покупки необходимо указать аккаунт MQL5.community в настройках терминала: Сервис - Настройки - Сообщество.
  3. Добавлена прямая покупка продуктов с помощью платежной системы UnionPay.
  4. Добавлено расширенное журналирование при покупке продуктов в MQL5 Market.

Виртуальный хостинг и Сигналы

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


    Выберите подходящую систему и проведите платеж:


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


    Нужная сумма будет сначала зачислена на ваш MQL5.community аккаунт, а затем с него будет произведена оплата. Таким образом, вы всегда сможете иметь прозрачную и понятную историю арендованных хостингов и подписок на сигналы, а также видеть все свои платежи за сервисы MQL5.community.
  2. Добавлено управление виртуальным хостингом (кроме миграции) при работе в 32-х битной версии клиентского терминала.
  3. Исправлена миграция настроек FTP-экспорта на виртуальный хостинг, независимо от разрешения публикации по FTP.

MQL5

  1. Включен новый оптимизирующий компилятор. В 64-битных платформах исполнение программ ускорено до 5 раз. MQL5-программы необходимо перекомпилировать в последней версии MetaEditor.
  2. Расширен формат структуры MqlTick. Теперь в ней передается время прихода тика в миллисекундах, а также флаги, позволяющие определить, какой именно параметр тика изменился.
    struct MqlTick
      {
       datetime     time;          // Время последнего обновления цен
       double       bid;           // Текущая цена Bid
       double       ask;           // Текущая цена Ask
       double       last;          // Текущая цена последней сделки (Last)
       ulong        volume;        // Объем для текущей цены Last
       long         time_msc;      // Время последнего обновления цен в миллисекундах
       uint         flags;         // Флаги тиков
      };
    У каждого тика всегда заполняются все параметры, независимо от того, изменились ли данные по сравнению с предыдущим тиком. Это позволяет всегда иметь актуальное состояние цен на любой момент времени без поиска предыдущих значений по тиковой истории. Например, с тиком могла измениться только цена бид, но в структуре помимо новой цены будут указаны и остальные параметры: предыдущая цена аск, объем и т.д. Чтобы узнать, какие именно данные изменились с текущим тиком, анализируйте его флаги:

    • TICK_FLAG_BID - тик изменил цену бид
    • TICK_FLAG_ASK  - тик изменил цену аск
    • TICK_FLAG_LAST - тик изменил цену последней сделки
    • TICK_FLAG_VOLUME - тик изменил объем
    • TICK_FLAG_BUY - тик возник в результате сделки на покупку
    • TICK_FLAG_SELL - тик возник в результате сделки на продажу

    Структура MqlTick используется в двух методах:

    • CopyTicks - метод не поддерживает старый формат структуры. Скомпилированные ранее файлы EX5, использующие старый формат тика, при вызове функции CopyTicks будут возвращать ошибку 4006 (ERR_MQL_INVALID_ARRAY).
    • SymbolInfoTick - метод поддерживает и старый, и новый формат структуры.

  3. Добавлены шаблоны классов, что позволяет создавать параметризованные классы как в C++. Это позволяет добиться еще большего абстрагирования и использовать один и тот же код для работы с объектами разных классов единообразно. Пример использования:
    //+------------------------------------------------------------------+
    //|                                                    TemplTest.mq5 |
    //|                        Copyright 2015, MetaQuotes Software Corp. |
    //|                                             https://www.mql5.com |
    //+------------------------------------------------------------------+
    #property copyright "Copyright 2015, MetaQuotes Software Corp."
    #property link      "https://www.mql5.com"
    #property version   "1.00"
    //+------------------------------------------------------------------+
    //| Объявляем шаблонный класс                                        |
    //+------------------------------------------------------------------+
    template<typename T>
    class TArray
      {
    protected:
       T                 m_data[];
    
    public:
    
       bool              Append(T item)
         {
          int new_size=ArraySize(m_data)+1;
          int reserve =(new_size/2+15)&~15;
          //---
          if(ArrayResize(m_data,new_size,reserve)!=new_size)
             return(false);
          //---
          m_data[new_size-1]=item;
          return(true);
         }
       T                 operator[](int index)
         {
          static T invalid_index;
          //---
          if(index<0 || index>=ArraySize(m_data))
             return(invalid_index);
          //---
          return(m_data[index]);
         }   
      };
    //+------------------------------------------------------------------+
    //| Шаблонный класс массива указателей, в деструкторе он удаляет     |
    //| объекты, указатели на которые хранились в нём.                   |
    //|                                                                  |
    //| Обратите внимание на наследование от шаблонного класса TArray    |
    //+------------------------------------------------------------------+
    template<typename T>
    class TArrayPtr : public TArray<T *>
      {
    public:
       void             ~TArrayPtr()
         {
          for(int n=0,count=ArraySize(m_data);n<count;n++)
             if(CheckPointer(m_data[n])==POINTER_DYNAMIC)
                delete m_data[n];
         }
      };
    //+------------------------------------------------------------------+
    //| Объявим класс, указатели на его объекты будем хранить в массиве  |
    //+------------------------------------------------------------------+
    class CFoo
      {
       int               m_x;
    public:
                         CFoo(int x):m_x(x) { }
       int               X(void) const { return(m_x); }
      };
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    TArray<int>     ExtIntArray;   // инстанцируем шаблон TArray (специализируем шаблон TArray типом int)
    TArray<double>  ExtDblArray;   // инстанцируем шаблон TArray (специализируем шаблон TArray типом double)
    TArrayPtr<CFoo> ExtPtrArray;   // инстанцируем шаблон TArrayPtr (специализируем шаблон TArrayPtr типом CFoo)
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
    //--- наполняем массивы данными
       for(int i=0;i<10;i++)
         {
          int integer=i+10;
          ExtIntArray.Append(integer);
          
          double dbl=i+20.0;
          ExtDblArray.Append(dbl);
          
          CFoo *ptr=new CFoo(i+30);
          ExtPtrArray.Append(ptr);
         }
    //--- выведем содержимое массивов
       string str="Int:";
       for(int i=0;i<10;i++)
          str+=" "+(string)ExtIntArray[i];      
       Print(str);   
       str="Dbl:";
       for(int i=0;i<10;i++)
          str+=" "+DoubleToString(ExtDblArray[i],1);
       Print(str);   
       str="Ptr:";
       for(int i=0;i<10;i++)
          str+=" "+(string)ExtPtrArray[i].X();      
       Print(str);
    //--- созданные через new объекты CFoo удалять не нужно, они удалятся в деструкторе объекта TArrayPtr<CFoo>  
      }
    Результат выполнения:
    TemplTest (EURUSD,H1)    Int: 10 11 12 13 14 15 16 17 18 19
    TemplTest (EURUSD,H1)    Dbl: 20.0 21.0 22.0 23.0 24.0 25.0 26.0 27.0 28.0 29.0
    TemplTest (EURUSD,H1)    Ptr: 30 31 32 33 34 35 36 37 38 39

  4. Добавлены новые операции * и & - соответственно, появилось получение переменной по ссылке и получение ссылки на переменную.
  5. Добавлена перегруженная форма функции ObjectsDeleteAll - удаление по префиксу имени в подокне графика всех объектов указанного типа.
    int  ObjectsDeleteAll(
       long           chart_id,   // идентификатор графика
       const string     prefix,   // префикс имени объекта
       int       sub_window=-1,   // индекс окна
       int      object_type=-1    // тип объекта для удаления
       );
  6. Исправлена работа функции ObjectGetValueByTime. Ранее в некоторых случаях (например, для горизонтальной трендовой линии) некорректно возвращалось значение цены по времени на чарте.
  7. Исправлена работа Copy* функций при отсутствии исторических данных на сервере. Ранее при отсутствии данных на сервере вызов этих функций приводил к задержке на 30-50 секунд, прежде чем вернуть управление.
  8. Внесен ряд исправлений в стандартную библиотеку MQL5.
  9. Документация по Стандартной библиотеке переведена на немецкий, французский, китайский, турецкий, испанский и португальский языки.
  10. Добавлена документация MQL5 на японском языке.

Tester

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


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

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

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