Бета-версия платформы MetaTrader 5 build 2155: Области видимости в MQL5, глобальное обновление тестера стратегий и встроенного хостинга

 

В пятницу 20 сентября 2019 года будет выпущена обновленная версия платформы MetaTrader 5 в бета-режиме. Призываем всех трейдеров присоединиться к тестированию новой версии платформы, чтобы самостоятельно опробовать все ее возможности и помочь разработчикам в исправлении найденных ошибок.

Для обновления на новый 2155 билд платформы MetaTrader 5 достаточно нажать "Помощь \ Проверить обновления десктопа \ Последняя бета-версия":


После окончания данного этапа бета-тестирования будет выпущен финальный билд новой платформы MetaTrader 5.

Обновление содержит следующие изменения:

  1. Terminal: Полностью переработано управление встроенным сервисом Виртуального хостинга. Вся информация об арендованном терминале, а также функции миграции окружения, остановки и запуска теперь доступны в отдельной вкладке окна "Инструменты". 

    Ранее для работы с виртуальным хостингом использовалось контекстное меню счета в Навигаторе. Теперь же вся необходимая информация и команды управления всегда находятся у вас на виду во вкладке "VPS":




    В левой части доступна основная информация о подписке:

    • Данные по подключению: сравнение сетевых задержек между вашим терминалом на хостинг-сервере и терминалом на локальном компьютере.
    • Торговый счет, для которого арендован хостинг, и тарифный план.
    • Уникальный идентификатор подписки. Нажав на него, вы перейдете в раздел "Хостинг" в своем профиле на MQL5.community, где можно управлять подпиской.
    • Дата оформления и текущее состояние. Если ваш хостинг остановлен, вы немедленно об этом узнаете.

    Кнопкой Старт/Стоп вы можете быстро останавливать и запускать виртуальный терминал.

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

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

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




  2. Terminal: Добавлена возможность быстрого перехода к пополнению/снятию средств с торгового счета на сайте брокера.

    Теперь вам не нужно искать соответствующие функции в личном кабинете на сайте брокера. Команды для быстрого перехода к страницам пополнения счета и вывода средств стали доступны прямо в терминалах — в меню счетов в Навигаторе и на вкладке торговли в Инструментах:


    • Команды пополнения/снятия доступны только в том случае, если соответствующие функции включены для торгового счета на стороне брокера.
    • Торговый терминал не производит никаких операций пополнения/снятия средств со счета. Встроенные функции лишь перенаправляют пользователя на соответствующие веб-страницы брокерской компании.
  3. Terminal: В спецификацию торгового инструмента добавлены новые поля:

    Категория
    Свойство используется для дополнительной маркировки финансовых инструментов. Например, в нем могут быть указаны секторы рынка, к которым относится символ: Agriculture, Oil & Gas и т.д. Показывается, только если соответствующая информация предоставляется брокером.

    Биржа
    Здесь указывается название биржи или площадки, на которой торгуется символ. Показывается, только если соответствующая информация предоставляется брокером.

    Комиссия
    Здесь отображается информация о комисcиях, взимаемых брокером при совершении сделок по инструменту. Показываются все подробности расчета:

    • Комиссии могут быть одноуровневыми и многоуровневыми, т.е. взиматься в одинаковом размере независимо от объема сделки/оборота или разниться в зависимости от их величины. Соответствующая информация выводится в спецификации.
    • Комиссии могут взиматься сразу при совершении сделки или в конце торгового дня/месяца.
    • Комиссии могут взиматься в зависимости от направления сделки: за вход, за выход или за оба типа операций.
    • Комиссии могут взиматься за каждый лот или за каждую сделку.
    • Комиссии могут взиматься в разных величинах: в деньгах, процентах или пунктах.

    Например, следующая запись означает, что комиссия начисляется немедленно при совершении сделок входа и выхода. При объеме сделки от 0 до 10 лотов комиссия взимается в размере 1.2 USD за операцию. При объеме сделки от 11 до 20 лотов комиссия будет взиматься в размере 1.1 USD за каждый лот сделки.
    Комиссия | Немедленно за объем, сделки входа/выхода
    0  - 10  | 1.2 USD за сделку
    11 - 20  | 1.1 USD за лот


  4. Terminal: Теперь инструмент "Перекрестие" показывает расстояние между ценовыми уровнями не только в пипсах, но и в процентах:




  5. Terminal: Теперь при совершении операций в режимах исполнения "По рынку" и "Биржевое" в диалогах торговли показывается итоговая цена сделки, если она известна на момент получения ответа от брокера:




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

  7. MQL5: Изменена работа области видимости, что делает MQL5 еще более приближенным к C++. Программисты MQL5 получат гораздо больше свободы по использованию сторонних библиотек. Больше не нужно будет их модифицировать и приводить все идентификаторы к уникальному виду.

    Пример: в коде объявлено две структуры с одинаковым именем, но в разных классах. Ранее такое объявление выдавало ошибку компиляции "identifier already used". Теперь такой код будет успешно скомпилирован и исполнен. При этом для правильного обращения к нужной переменной/структуре/функции не из ее области видимости должен указываться класс, в данном случае — CBar::Item.
    class CFoo
      {
    public:
       struct Item { int x; };
      };
    //+------------------------------------------------------------------+
    class CBar
      {
    public:
       struct Item { int x; };
      };
      
    CBar::Item item;  // правильное объявление структуры Item из класса Bar
    Item       item;  // некорректное объявление
    Также добавлена поддержка пространства имен (namespace), что дает еще больше свободы при использовании сторонних кодов/библиотек в своих программах.

    #define PrintFunctionName() Print(__FUNCTION__)
    
    namespace NS
    {
    void func()
      {
       PrintFunctionName();
      }
    
    struct C
      {
       int               x;
                         C() { PrintFunctionName(); };
      };
    }
    
    struct C
      {
       int               x;
                         C() { PrintFunctionName(); };
      };
    
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    void func()
      {
       PrintFunctionName();
      }
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       func();
       NS::func();
    
       C c;
       NS::C ac;
      }
    В результате исполнения программа выведет следующий результат:
    2019.09.18 13:39:35.947    TestScript (AUDCAD,H1)    func
    2019.09.18 13:39:35.949    TestScript (AUDCAD,H1)    NS::func
    2019.09.18 13:39:35.949    TestScript (AUDCAD,H1)    C::C
    2019.09.18 13:39:35.949    TestScript (AUDCAD,H1)    NS::C::C

  8. MQL5: Ускорен доступ к данным таймсерий при помощи функций iTime, iOpen, iHigh, iLow, iClose, iVolume, iTickVolume, iSpread.

  9. MQL5: Добавлена поддержка атрибута "=delete". Он позволяет запретить использование конкретных методов класса.
    class A
      {
       void              operator=(const A &)=delete;    // запрещаем оператор копирования объекта
      };
    
    class B : public A
      {
      };
    
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       A a1,a2;
       B b1,b2; 
      
       a1=a2;
       b1=b2;
      }
    В этом примере для строк "a1=a2" и "b1=b2" компилятор выдаст ошибки:
    attempting to reference deleted function 'void A::operator=(const A&)'
       function 'void A::operator=(const A&)' was explicitly deleted here

    attempting to reference deleted function 'void B::operator=(const B&)'
       function 'void B::operator=(const B&)' was implicitly deleted because it invokes deleted function 'void A::operator=(const A&)'

  10. MQL5: В перечисление ENUM_SYMBOL_INFO_STRING добавлены следующие значения:

    • SYMBOL_CATEGORY — категория символа. Используется для дополнительной маркировки финансовых инструментов. Например, в нем могут быть указаны секторы рынка, к которым относится символ: Agriculture, Oil & Gas и т.д.
    • SYMBOL_EXCHANGE — название биржи или площадки, на которой торгуется символ.

  11. MQL5: Добавлена поддержка закрытия позиций по правилу FIFO.

    • В перечисление ENUM_ACCOUNT_INFO_INTEGER добавлено значение ACCOUNT_FIFO_CLOSE — признак того, что позиции можно закрывать только по правилу FIFO. Если значение свойства равно true, то позиции по каждому символу разрешается закрывать только в том порядке, в котором они были открыты — сначала самую старую, затем более новую и т.д. При попытке закрыть позиции в ином порядке будет получена ошибка. Для счетов без хеджингового учета позиций (ACCOUNT_MARGIN_MODE!=ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) свойство всегда равно false.
    • Добавлен новый код возврата сервера TRADE_RETCODE_FIFO_CLOSE — запрос отклонен, так как для торгового счета установлено правило "Разрешено закрывать существующие позиции только по правилу FIFO".

    Закрытие позиций может осуществляться тремя основными способами:

    • Закрытие через клиентский терминал — это закрытие позиций трейдером вручную, при помощи торгового робота, через сервис "Сигналы" и т.д. При попытке закрыть позиции не по правилу FIFO трейдер получит соответствующую ошибку.
    • Закрытие при срабатывании Стоп Лосса или Тейк Профита — эти ордера обрабатываются на стороне сервера, соответственно и закрытие позиций в таком случае инициируется не трейдером (терминалом), а самим сервером. Если для позиции сработал Стоп Лосс или Тейк профит, и эта позиция не соответствует правилу FIFO (по тому же инструменту есть более ранние позиции), то она не будет закрыта.
    • Закрытие при срабатывании Стоп аута — такие операции также обрабатываются на стороне сервера. В обычном режиме, когда закрытие по правилу FIFO отключено, при наступлении Стоп аута позиции закрываются, начиная с самой убыточной. При включении этой опции у закрываемых убыточных позиции будет дополнительно проверяться время их открытия. Сервер определяет убыточные позиции по каждому символу, находит для каждого символа наиболее старую позицию, а затем из найденных позиций закрывает ту, что дает наибольший убыток.

  12. MQL5: Исправлена ошибка, возникавшая при импорте функций из DLL, чьи имена пересекались с функциями MQL. Пример:
    #import "lib.dll"
    int func();
    #import
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    int func()
      {
       return(0);
      }
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       Print(func());
      }
    Ранее компиляция такого кода выдавала ошибку:
    'func' - ambiguous call to overloaded function with the same parameters
    could be one of 2 function(s)
       int func()
       int func()
    Теперь вместо ошибки по умолчанию будет использоваться встроенная функция MQL, как имеющая больший приоритет. А для вызова импортированной функции необходимо явно указать область видимости:
    void OnStart()
      {
       Print( lib::func() );
      }
  13. MQL5: Исправлено указание времени у новостей экономического календаря. Теперь время события передается с учетом часового пояса торгового сервера, к которому подключен терминал, а не часового пояса локального компьютера.
  14. Signals: Исправлено отображение графиков сигналов при работе в Wine (Mac OS и Linux).
  15. Tester: Существенно обновлен тестер стратегий: добавлена стартовая страница, переработана страница настроек, повышено удобство использования.

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

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



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




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




    Отсюда же вы можете быстро перейти к редактированию программы в MetaEditor.

    Расчет прибыли в пипсах
    Теперь в настройках вы можете включить расчет прибыли в пипсах. Это позволяет ускорить процесс тестирования за счет того, что прибыль не будет пересчитываться в валюту депозита через другие курсы (а соответственно не нужно скачивать их ценовую историю). Также в этом режиме не рассчитываются свопы и комиссии.


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

    Общие улучшения
    Кнопка запуска/остановки тестирования, а также полоса прогресса перенесены на панель вкладок. Это позволит контролировать процесс, в каком бы разделе тестера стратегий вы бы ни находились. Помимо этого, команды запуска и остановки тестирования добавлены в контекстные меню разделов настройки и входных параметров.



  16. Tester: График оптимизации теперь можно отобразить в основной рабочей области терминала. Для 3D графиков добавлена новая системы визуализации:




  17. Tester: Добавлено сохранение кэша оптимизации для режима "Все символы в Обзор рынка".
  18. Tester: Добавлено сохранение кэша тестирования.

    Ранее результаты выполненных задач сохранялись в файлы только при оптимизации советников. Теперь кэш-файлы сохраняются и при одиночном тестировании, позволяя в любой момент вернуться к предыдущим расчетам — посмотреть всю статистику, а также графики баланса, эквити и загрузки депозита. Также в будущем это позволит сравнивать результаты тестов между собой.

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




  19. Tester: Значительно ускорены тестирование и оптимизация, в том числе — с использованием облачной вычислительной сети MQL5 Cloud Network.
  20. Tester: Исправлены ошибки и оптимизирована работа с фреймами.
  21. MetaEditor: Добавлена возможность настраивать стилизатор кода.

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



    Помимо этого, для стилизатора теперь можно задать следующие параметры:

    Пробелов на отступ
    Определяет количество пробелов, вставляемых при выравнивании вложенных конструкций:
    if(condition)
      {
       //---
      }

    Заменять табуляцию пробелами
    При включении этой опции стилизатор будет заменять все символы табуляции в коде на символы пробелов. Количество символов на табуляцию определяется в разделе "Общие".

    Удалять пустые строки
    При включении этой опции стилизатор будет удалять из кода все строки, в которых есть только символ переноса строки.

    Вставлять пробелы после запятых и точек с запятой
    При включении этой опции стилизатор будет визуально отделять конструкции с перечислением элементов. Например:
    // до стилизации
    ParameterGetRange("InpX",enable,x_cur,x_start,x_step,x_stop);
    // после стилизации
    ParameterGetRange("InpX", enable, x_cur, x_start, x_step, x_stop);

    Вставлять пробелы вокруг операторов объявления
    При включении этой опции стилизатор будет вставлять пробелы вокруг операторов присваивания, равенства, сравнения и т.д. Например:
    // до стилизации
    if(x==1&y!=2)
      {
       int a=0;
      }
    // после стилизации
    if(x == 1 & y != 2)
     {
      int a = 0;
     }

  22. MetaEditor: В контекстное меню закладок файлов добавлена команда "Показать в Навигаторе". Она позволяет быстро найти открытый на редактирование файл в структуре папок редактора.



  23. MetaEditor: Исправлено отображение ключевого слова union в подсказках.
  24. Добавлен перевод пользовательского интерфейса на грузинский язык.
  25. Обновлена документация.

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

 

Есть-ли возможность оставить переход, переключение на "Инструменты"


находясь на любой из вкладок, подчёркнутых на снимке


И большое спасибо, что сделали перевод на русский.

 

Не исправлено ((


И ещё одна проблема (регрессия)

В MetaEditor при компиляции всей папки (через контекстное меню в Навигаторе) mqh не компилируются, таким образом пропала возможность массово компилировать mqh для проверки ошибок.

 

Когда ME перестанет фризить от больших исходников, даже разбитых на инклюды?

Уже нет сил, переключение от вкладки с кодом на другую вкладку занимает по 10 минут.

 
Неужели фолдинг настолько не посильная задача ???
 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Бета-версия платформы MetaTrader 5 build 2155: Области видимости в MQL5, глобальное обновление тестера стратегий и встроенного хостинга

MetaQuotes Software Corp., 2019.09.20 16:36


Комиссия
Здесь отображается информация о комисcиях, взимаемых брокером при совершении сделок по инструменту. Показываются все подробности расчета:

  • Комиссии могут быть одноуровневыми и многоуровневыми, т.е. взиматься в одинаковом размере независимо от объема сделки/оборота или разниться в зависимости от их величины. Соответствующая информация выводится в спецификации.
  • Комиссии могут взиматься сразу при совершении сделки или в конце торгового дня/месяца.
  • Комиссии могут взиматься в зависимости от направления сделки: за вход, за выход или за оба типа операций.
  • Комиссии могут взиматься за каждый лот или за каждую сделку.
  • Комиссии могут взиматься в разных величинах: в деньгах, процентах или пунктах.

Например, следующая запись означает, что комиссия начисляется немедленно при совершении сделок входа и выхода. При объеме сделки от 0 до 10 лотов комиссия взимается в размере 1.2 USD за операцию. При объеме сделки от 11 до 20 лотов комиссия будет взиматься в размере 1.1 USD за каждый лот сделки.
Комиссия | Немедленно за объем, сделки входа/выхода
0  - 10  | 1.2 USD за сделку
11 - 20  | 1.1 USD за лот

Ждем MQL-доступа к полям.

 

  1. MQL5: Добавлена поддержка закрытия позиций по правилу FIFO.

    • В перечисление ENUM_ACCOUNT_INFO_INTEGER добавлено значение ACCOUNT_FIFO_CLOSE — признак того, что позиции можно закрывать только по правилу FIFO. Если значение свойства равно true, то позиции по каждому символу разрешается закрывать только в том порядке, в котором они были открыты — сначала самую старую, затем более новую и т.д. При попытке закрыть позиции в ином порядке будет получена ошибка. Для счетов без хеджингового учета позиций (ACCOUNT_MARGIN_MODE!=ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) свойство всегда равно false.
    • Добавлен новый код возврата сервера TRADE_RETCODE_FIFO_CLOSE — запрос отклонен, так как для торгового счета установлено правило "Разрешено закрывать существующие позиции только по правилу FIFO".

    Закрытие позиций может осуществляться тремя основными способами:

    • Закрытие через клиентский терминал — это закрытие позиций трейдером вручную, при помощи торгового робота, через сервис "Сигналы" и т.д. При попытке закрыть позиции не по правилу FIFO трейдер получит соответствующую ошибку.
    • Закрытие при срабатывании Стоп Лосса или Тейк Профита — эти ордера обрабатываются на стороне сервера, соответственно и закрытие позиций в таком случае инициируется не трейдером (терминалом), а самим сервером. Если для позиции сработал Стоп Лосс или Тейк профит, и эта позиция не соответствует правилу FIFO (по тому же инструменту есть более ранние позиции), то она не будет закрыта.
    • Закрытие при срабатывании Стоп аута — такие операции также обрабатываются на стороне сервера. В обычном режиме, когда закрытие по правилу FIFO отключено, при наступлении Стоп аута позиции закрываются, начиная с самой убыточной. При включении этой опции у закрываемых убыточных позиции будет дополнительно проверяться время их открытия. Сервер определяет убыточные позиции по каждому символу, находит для каждого символа наиболее старую позицию, а затем из найденных позиций закрывает ту, что дает наибольший убыток.


Новая придумка?

Ничего не понятно, причем тут FIFO и закрытие позиций. Как эти придумки отразятся на трейдерах?

 

В новых билдах что-то конкретно поломали в MQL.  Коды, которые раньше нормально компилировались, теперь выдают сотни (а то и тысячи!) ошибок.

Вот например первое, что попалось на глаза:

template<typename T>
class A { };

template<typename T>
class B : A<T> { };  // class type expected, pointer to type 'void' is not allowed

class C : B<void*> { };

Что это за нововведение такое?  С каких пор шаблон стал принимать только классы?  И почему ошибка в классе B, а не в C, в котором инициируется шаблон с типом void*?

 
fxsaber:

Ждем MQL-доступа к полям.

SymbolInfoString(NULL,SYMBOL_CATEGORY);
SymbolInfoString(NULL,SYMBOL_EXCHANGE);

А вот комиссий и вправду нету...

 
Sergey Chalyshev:

Новая придумка?

Ничего не понятно, причем тут FIFO и закрытие позиций. Как эти придумки отразятся на трейдерах?

Для биржи - никак

FIFO - первый пришел - первый ушел.

Эта придумка для хеджингового учета позиций

 
prostotrader:

Для биржи - никак

FIFO - первый пришел - первый ушел.

Эта придумка для хеджингового учета позиций

Надеюсь на это.

Я знаю что такое FIFO.

Поэтому и не понятно. Значит на хеджинговом счете например цена дошла до Тейк Профита - а сервер в ответ FIFO ?

Как и где посмотреть эту очередь FIFO?

На бирже я знаю как, а на форекс не представляю.

Причина обращения: