Новая версия платформы MetaTrader 5 build 2980: Push-уведомления о торговых операциях

 

В пятницу 18 июня 2021 года будет выпущена обновленная версия платформы MetaTrader 5. Обновление содержит следующие изменения:

  1. Terminal: Добавлена возможность получать Push-уведомления о сделках с торгового сервера — они работают, даже когда ваш терминал выключен.


    Включите уведомления о сделках с торгового сервера


    Ранее вы могли получать уведомления на мобильные устройства только от собственного десктопного терминала. Как только происходила торговая операция, терминал отправлял соответствующее сообщение на MetaQuotes ID, указанный в настройках. Соответственно, это работало, только пока он оставался включенным. Теперь таких ограничений нет. Если на сервере сработал Тейк Профит, а ваш компьютер выключен, вы получите уведомление о закрытии позиции на свое мобильное устройство.

    Для получения уведомлений с сервера необходимо:

    • Иметь реальный счет — уведомления с сервера не работают для демо-счетов
    • Установить на свой смартфон мобильный терминал MetaTrader 5 для iOS или Android
    • Открыть в нем раздел сообщений, найти ваш MetaQuotes ID и указать его в настройках десктопного терминала
    • Включить уведомления с сервера в настройках десктопного терминала

    Доступность и детальность уведомлений зависит от вашего брокера

    Всего поддерживаются три типа уведомлений: об ордерах, о сделках и о балансовых операциях. При включении опции доступные виды уведомлений будут выведены в журнал терминала:
    '1222': subscribed to deals, orders, balance notifications from trade server

  2. Terminal: Обновлена витрина MetaTrader VPS. Мы сделали ее более современной и удобной:

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


    Улучшена витрина MetaTrader VPS


  3. Terminal: На панель тестера стратегий добавлены команды для быстрого переключения к MQL5-сервисам и окну "Инструменты". Они отображаются только в разделе "Обзор", в остальных вкладках панель используется для управления тестированием.


    Быстрое переключение между окнами


  4. Terminal: Добавлено сохранение состояния окон для MQL5-сервисов. Если вы оставите Маркет открытым перед выключением терминала, вы найдете его в таком же состоянии при последующем включении.
  5. Terminal: Исправлена периодическая синхронизация состояния MQL5-аккаунта. Ошибка в некоторых случаях могла приводить к невозможности копировать сигналы.
  6. Terminal: Исправлено отображение подборки рекомендуемых продуктов в Маркете.
  7. Terminal: Исправлена работа контекстного меню сигналов в Навигаторе. При помощи него можно перейти к просмотру сигнала, на который вы подписаны, а также отменить подписку.
  8. MQL5: В стандартной библиотеке исправлена ошибка в работе оператора "-" в реализации комплексных чисел (файл MQL5\Include\Math\Alglib\complex.mqh).
  9. MQL5: В инициализирующих последовательностях теперь можно использовать любые выражения, а не только константные. Это повысит удобство использования и улучшит совместимость с кодом С++.
    struct POINT
      {
       int x,y;
      };
    
    int GetYFunc(y)
      {
       return(y * y);
      }
    
    void SomeFunction(int x1,int x2,int y)
      {
       POINT pt={ x1+x2, GetYFunc(y) };
       ProcessPoint(pt);
      };
  10. MQL5: Исправлена ошибка, возникавшая при компиляции union с огромными массивами данных.
  11. MQL5: Исправлена работа функции StringToCharArray. Теперь она преобразует всю переданную строку в массив Char, а не останавливается на первом терминирующем нуль-символе.
  12. MQL5: Добавлен контроль явного присутствия в коде вызова конструктора для классов/структур, у которых родительский класс не имеет конструктора по умолчанию.
  13. MQL5: Добавлено отображение места вызова для inline-функций в отчете профилировщика.

    В приведенном ниже примере вызов func(); теперь подсвечивается:


    Место вызова inline-функции теперь подсвечивается


    Сама функция func не подсвечена, так как ее код полностью помещен в OnStart.

  14. MetaEditor: Добавлена возможность создавать пустой проект. Это будет удобно при нестандартных разработках с собственной структурой файлов, когда шаблоны по умолчанию не подходят.


    Теперь вы можете создать пустой проект для любых нестандартных разработок


    При создании проекта таким образом создается только пустой файл настроек "mqproj". Файлы для исходного кода в последующем необходимо создать самостоятельно.

  15. MetaEditor: Ускорен запуск MetaEditor.
  16. MetaEditor: Исправлена ошибка отображения данных в списке наблюдаемых выражений при отладке. В некоторых случаях в нем могли показываться некорректные значения переменных.
  17. MetaEditor: Исправлено автоматическое добавление расширения ".py" к файлам скриптов на Python, создаваемым через MQL Wizard.
  18. Обновлена документация.
     

Обновление будет доступно через систему Live Update.

 

Терминал удобно показывает совершение сделок на чарте символа. Однако, он показывает всю историю символа. Это даже не зависит от MaxBars.

На скрине 5000 M1 баров и 4500 объектов истории, что автоматически создает Терминал. Есть символы, на которых он создает 50 000 исторических объектов. При таком обилии объектов серьезно забивается память, когда открыто несколько чартов. И очень тормозит горизонтальный скроллинг чарта мышкой. Настолько сильно тормозит, что встроенный TaskManager полностью замирает, пока не прекратишь скроллить - с нажотой ЛКМ двигать чарт влево-вправо.


Прошу ввести опцию по ограничению количества автоматических исторических объектов - MaxHistoryObjects, по аналогии с MaxBars.

На некоторых счетах сотни тысяч сделок, это вызывает, мягко говоря, неудобства. Полное отключение таких объектов не делаю, т.к. смотрю свежие сделки.

 
Предыдущие исторические объекты уничтожаются, если идет переключение на другой символ. Но остаются при переключении на другой торговый счет. Надо их прибивать все же.
 
fxsaber:
Предыдущие исторические объекты уничтожаются, если идет переключение на другой символ. Но остаются при переключении на другой торговый счет. Надо их прибивать все же.
А здесь я не согласен. Активно сравниваю бары на разных счётах и как раз объекты очень помогают. 
 
Vladimir Karputov:
А здесь я не согласен. Активно сравниваю бары на разных счётах и как раз объекты очень помогают. 

Речь идет об автоматических исторических объектах. Вы можете сохранить шаблон перед переключением на другой торговый счет, а потом его применить.

 
Пожалуйста, добавьте информацию по крашу ME. Нужно, чтобы ME куда-то писал информацию, могущую помочь понять природу вылета ME, когда жмешь ALT+LEFT. Именно на этом сочетании очень часто идет вылет.
 
fxsaber:
Пожалуйста, добавьте информацию по крашу ME. Нужно, чтобы ME куда-то писал информацию, могущую помочь понять природу вылета ME, когда жмешь ALT+LEFT. Именно на этом сочетании очень часто идет вылет.

Похоже, научился воспроизводить вылет. Нажмите и держите ALT+LEFT.

 
fxsaber:

Похоже, научился воспроизводить вылет. Нажмите и держите ALT+LEFT.

Не вылетает у меня. Файлы все живы, по которым прыгает эдитор?

 
Andrey Khatimlianskii:

Не вылетает у меня. Файлы все живы, по которым прыгает эдитор?

Да, все живы. Новая инструкция, воспроизводится в 100% случаев.

  1. Открыть MT4Orders.mqh.
  2. Начать поиск фразы ByPass.Waiting.
  3. Нажать и зажать F3 на три секунды, чтобы по кругу поискал.
  4. Нажать и держать ALT+LEFT.
ЗЫ Возможно, получится и на других исходниках.
 
fxsaber:

Да, все живы. Новая инструкция, воспроизводится в 100% случаев.

  1. Открыть MT4Orders.mqh.
  2. Начать поиск фразы ByPass.Waiting.
  3. Нажать и зажать F3 на три секунды, чтобы по кругу поискал.
  4. Нажать и держать ALT+LEFT.
ЗЫ Возможно, получится и на других исходниках.

Спасибо, воспроизвели.

Исправляем.

 
А не могли бы Вы поправить компилятор в отношении функции OnTimer().
Вот такой простой код выдает ерунду.
long last;
int OnInit()
  {
  last=TimeLocal();
  EventSetTimer(1);
  return(INIT_SUCCEEDED);
  }
void OnDeinit(const int reason)
  {
   EventKillTimer();
  }
void OnTimer()
  {
  Alert(IntegerToString(TimeLocal()-last)); // Timer period
  EventKillTimer();
  last=TimeLocal();
  EventSetTimer(1);    
  }

До версии приблизительно 23XX код работал правильно, т.е. в выводе были единицы.
А потом единица и двойки.
PS.С EventSetMillisecondTimer() тоже самое...
Причина обращения: