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

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

16 сентября 2016

Terminal

  1. Реализован новый алгоритм формирования вкладки "Активы" для фондового рынка. Теперь терминал адаптирует представление активов в зависимости от того, какая система управления рисками используется для торгового счета: Retail Forex, 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. Обновлена документация.