Новая версия платформы MetaTrader 5 build 1860: Функции для работы с барами в MQL5 и улучшения в тестере стратегий

 

Новая версия платформы MetaTrader 5 build 1860: Функции для работы с барами в MQL5 и улучшения в тестере стратегий

15 июня 2018 года будет опубликовано обновление платформы MetaTrader 5.

Это обновление платформы будет доступно только для терминалов, работающих в операционных системах Windows 7 и новее. Более ранние версии Windows не поддерживаются.
Обновление содержит следующие изменения:

  1. Terminal: Полностью переработан диалог открытия счетов. Теперь вы сначала выбираете интересующего брокера, а затем — тип счета, который хотите открыть. Благодаря этому список брокеров стал более компактным, поскольку в нем теперь отображаются названия компаний, а не всех доступных серверов.

    Также для облегчения поиска в список добавлены логотипы компаний. Если нужного брокера нет в списке, просто наберите название компании или адрес сервера в поисковой строке и нажмите "Найти вашего брокера".




    Чтобы помочь начинающим трейдерам, в диалог добавлены описания типов счетов. Также в связи с обновлением General Data Protection Regulation (GDPR) при открытии счета теперь могут показываться ссылки на различные соглашения и политики брокерских компаний:




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




  2. MQL5: Увеличена скорость работы MQL5-программ за счет дополнительной оптимизации исходного кода при компиляции. Чтобы получить прирост скорости, перекомпилируйте ваши программы в новой версии MetaEditor.
    К сожалению, дополнительная оптимизация привела к потере совместимости новых программ с предыдущими версиями терминала. Все программы, скомпилированные в MetaEditor версии 1860 и выше, не будут запускаться в терминалах версии ниже 1860. При этом программы, скомпилированные ранее в предыдущих версиях MetaEditor, будут в работать в новых терминалах.

  3. MQL5: Добавлены функции iTime, iOpen, iHigh, iLow, iClose, iVolume, iBars, iBarShift, iLowest, iHighest, iRealVolume, iTickVolume, iSpread. Эти функции аналогичны используемым в MQL4. Таким образом, пользователям будет проще переносить код торговых программ в платформу пятого поколения.

    Ранее большинство задач, решаемых этими функциями, можно было легко выполнить при помощи функций Copy*. Однако для поиска максимальных/минимальных значений на графике и поиска баров по времени пользователю требовалось реализовывать собственные функции. Теперь это можно легко выполнить функциями iHighest, iLowest и iBarShift.

    iTime
    Возвращает значение времени открытия бара (указанного параметром shift) соответствующего графика.
    datetime  iTime(
       string           symbol,          // символ
       ENUM_TIMEFRAMES  timeframe,       // период
       int              shift            // сдвиг
       );

    iOpen
    Возвращает значение цены открытия бара (указанного параметром shift) соответствующего графика.
    double  iOpen(
       string           symbol,          // символ
       ENUM_TIMEFRAMES  timeframe,       // период
       int              shift            // сдвиг
       );

    iHigh
    Возвращает значение максимальной цены бара (указанного параметром shift) соответствующего графика.
    double  iHigh(
       string           symbol,          // символ
       ENUM_TIMEFRAMES  timeframe,       // период
       int              shift            // сдвиг
       );

    iLow
    Возвращает значение минимальной цены бара (указанного параметром shift) соответствующего графика.
    double  iLow(
       string           symbol,          // символ
       ENUM_TIMEFRAMES  timeframe,       // период
       int              shift            // сдвиг
       );

    iClose
    Возвращает значение цены закрытия бара (указанного параметром shift) соответствующего графика.
    double  iClose(
       string           symbol,          // символ
       ENUM_TIMEFRAMES  timeframe,       // период
       int              shift            // сдвиг
       );

    iVolume
    Возвращает значение тикового объема бара (указанного параметром shift) соответствующего графика.
    long  iVolume(
       string           symbol,          // символ
       ENUM_TIMEFRAMES  timeframe,       // период
       int              shift            // сдвиг
       );

    iBars
    Возвращает количество баров в истории по соответствующему символу и периоду.
    int  iBars(
       string           symbol,          // символ
       ENUM_TIMEFRAMES  timeframe        // период
       );

    iBarShift
    Поиск бара по времени. Функция возвращает индекс бара, в который попадает указанное время.
    int  iBarShift(
       string           symbol,          // символ
       ENUM_TIMEFRAMES  timeframe,       // период
       datetime         time,            // время
       bool             exact=false      // режим
       );

    iLowest
    Возвращает индекс наименьшего найденного значения (смещение относительно текущего бара) соответствующего графика.
    int  iLowest(
       string           symbol,          // символ
       ENUM_TIMEFRAMES  timeframe,       // период
       int              type,            // идентификатор таймсерии
       int              count,           // число элементов
       int              start            // индекс
      );

    iHighest
    Возвращает индекс наибольшего найденного значения (смещение относительно текущего бара) соответствующего графика.
    int  iHighest(
       string           symbol,          // символ
       ENUM_TIMEFRAMES  timeframe,       // период
       int              type,            // идентификатор таймсерии
       int              count,           // число элементов
       int              start            // индекс
      );

    iRealVolume
    Возвращает значение реального объема бара (указанного параметром shift) соответствующего графика.
    long  iRealVolume(
       string           symbol,          // символ
       ENUM_TIMEFRAMES  timeframe,       // период
       int              shift            // сдвиг
       );

    iTickVolume
    Возвращает значение тикового объема бара (указанного параметром shift) соответствующего графика.
    long  iTickVolume(
       string           symbol,          // символ
       ENUM_TIMEFRAMES  timeframe,       // период
       int              shift            // сдвиг
       );

    iSpread
    Возвращает значение спреда бара (указанного параметром shift) соответствующего графика.
    long  iSpread(
       string           symbol,          // символ
       ENUM_TIMEFRAMES  timeframe,       // период
       int              shift            // сдвиг
       );

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




  5. Terminal: В историю позиций добавлено отображение значений Стоп Лосс и Тейк Профит. Они заполняются в соответствии со значениями Стоп Лосс и Тейк Профит сделок, открывающих и закрывающих соответствующие позиции.




  6. Terminal: Теперь при отображении отложенных ордеров на графике используется текущий объем ордера вместо изначально запрошенного.




  7. Terminal: Оптимизировано и значительно ускорено отображение стакана цен в расширенном режиме с включенным показом спреда.
  8. Terminal: Оптимизирована обработка результатов выполнения торговых запросов. В некоторых случаях это может дать значительное ускорение обработки.
  9. Terminal: Исправлена ошибка работы Трейлинг Стопа, в некоторых случаях приводившая к отправке нескольких запросов на изменение уровня Стоп Лосс у одной позиции.
  10. Terminal: Исправлена установка минимального и максимального объема, а также шага объема в свойствах пользовательских инструментов.
  11. Terminal: Исправлена ошибка, из-за которой опция "Фиксировать масштаб" не учитывалась при применении шаблона к графику торгового инструмента.
  12. Terminal: Исправлена ошибка, в некоторых случаях приводившая к некорректному накоплению тиковой истории.
  13. MQL5: Добавлена функция TesterHideIndicators. Она задает режим показа/скрытия индикаторов, которые используются в эксперте. Функция предназначена для управления видимостью используемых индикаторов только при тестировании. Укажите флаг true, если необходимо скрывать создаваемые индикаторы, иначе false.
    void  TesterHideIndicators(
       bool      hide     // флаг
       );
  14. MQL5: Добавлена генерация события CHARTEVENT_CLICK при нажатии мышью на торговых уровнях графика.
  15. MQL5: Исправлена и оптимизирована работа функций CopyTicks.
  16. MQL5: Исправлено значение, отдаваемое функцией SymbolInfoDouble для свойства SYMBOL_PROP_LIQUIDITY_RATE.
  17. MQL5: Исправлена ошибка копирования строковых массивов с пересекающейся областью памяти.
  18. MQL5: Исправлена ошибка выделения строкового массива в функции FileReadArray.
  19. MQL5: Исправлен ряд ошибок в стандартной библиотеке MQL5.
  20. Tester: Полностью обновлена система работы с кэшем оптимизации. Кэш — это данные о ранее рассчитанных проходах оптимизации. Тестер стратегий хранит их, чтобы возобновлять оптимизацию после паузы и не пересчитывать уже рассчитанные проходы тестирования.

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

    Просмотр результатов ранее выполненных оптимизаций
    Теперь вы можете просматривать результаты ранее выполненных оптимизаций прямо в тестере стратегий, не разбирая огромные XML-файлы в сторонних программах. Откройте вкладку "Результаты оптимизации", выберите эксперта и файл с кэшем оптимизации:



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

    Пересчет критерия оптимизации на ходу
    Критерий оптимизации — некий показатель, значение которого определяет качество тестируемого набора входных параметров. Чем больше значение критерия оптимизации, тем лучше оценивается результат тестирования с данным набором параметров.

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




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

  21. Tester: Добавлена возможность вручную задавать валюту депозита и размер плеча для тестирования и оптимизации. Ранее валюта депозита устанавливалась в соответствии с текущим подключенным счетом. Соответственно, для ее изменения пользователю приходилось переключаться на другие счета. Размер плеча можно было выбирать только из предопределенного списка, теперь вы можете указывать любое значение.

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




  22. Tester: Убран запрет на использование OpenCL в агентах тестирования. Ранее OpenCL-устройства можно было использовать только при тестировании на локальных агентах. Теперь агентам разрешено использовать все доступные OpenCL-устройства (процессор, видеокарту) при работе в локальной сети и в MQL5 Cloud Network.
  23. MetaEditor: Оптимизирована и ускорена работа с версионным хранилищем данных MQL5 Storage.
  24. MetaEditor: Исправлено возобновление отладки после приостановки в MQH-файле.
  25. MetaEditor: Исправлены ошибки подсветки исходного кода в редакторе.
  26. MetaEditor: Исправлена ошибка перехода по результатам поиска.
  27. MetaEditor: Исправлена массовая замена текста. В некоторых случаях заменялось только первое вхождение заменяемой последовательности вместо всех.
  28. Обновлена документация.

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

 
При открытии нового счета нужно поле Partner ID  для партнерских программ брокеров...
 
MetaQuotes Software Corp.:
  1. Terminal: В историю сделок добавлено отображение значений Стоп Лосс и Тейк Профит. Для сделок входа и разворота они устанавливаются в соответствии со значениями Стоп Лосс и Тейк Профит ордеров, в результате исполнения которых они были совершены. Для сделок выхода используются значения Стоп Лосс и Тейк Профит соответствующих позиций на момент их закрытия. Последнее позволяет сохранять и показывать информацию о том, какие значения Стоп Лосс и Тейк Профита были у позиции в момент ее закрытия. До этого такая информация нигде не сохранялась, так как позиция после закрытия исчезает, а история позиций в терминале формируется на основе сделок.
DEAL_SL и DEAL_TP? Как через MQL получить эти значения?

  1. MQL5: Исправлено значение, отдаваемое функцией SymbolInfoDouble для свойства SYMBOL_PROP_LIQUIDITY_RATE

Что это за свойство?


  1. Пересчет критерия оптимизации на ходу
  2. Критерий оптимизации — некий показатель, значение которого определяет качество тестируемого набора входных параметров. Чем больше значение критерия оптимизации, тем лучше оценивается результат тестирования с данным набором параметров.

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

Что значит "пересчитает"? Это же сортировка по другому столбцу. Фактически, просто показывается только один критерий в таблице. Но сохранены все. Или не так?

OnTester будет выполняться принудительно - даже когда при Оптимизации не выбран кастомный критерий?

 
В индикаторе iBars показывает значение большее, чем TerminalInfoInteger( TERMINAL_MAXBARS ). Так задумано?
 

MetaQuotes Software Corp.

Terminal: Теперь при отображении отложенных ордеров на графике используется текущий объем ордера вместо изначально запрошенного.

Что это значит поконкретней? Если я выставил объем 10 лотов в отложенном ордере, а исполнилось (отоварилось) только 4, то будет показывать объем 6? Если так - то это хорошо, но лучше такой стиль "4/10" - он кажется наглядней.

MetaQuotes Software Corp.

  1. Tester: Убран запрет на использование OpenCL в агентах тестирования. Ранее OpenCL-устройства можно было использовать только при тестировании на локальных агентах. Теперь агентам разрешено использовать все доступные OpenCL-устройства (процессор, видеокарту) при работе в локальной сети и в MQL5 Cloud Network.

Поконкретней можно про это, так как не ясна ситуация.

1. Допустим у меня есть 6 ядер и 1 GPU. Как мне указать к какому агенту дать/не дать эту GPU?

2. Какие тарифы на использование GPU в MQL5 Cloud Network ?

3. Как выбрать агентов для оптимизации в  MQL5 Cloud Network только отвечающие определенным критериям - наличие GPU?

4. Если у меня более 1 GPU, то агент по прежнему может использовать только 1 GPU?

5. Если у меня 6 GPU и 4 CPU ядра, то как сделать распределение/привязку ядер процессора к ядрам GPU?

6. Не совсем ясно, как будет происходить оплата  MQL5 Cloud Network , если используется 1 агент и задействуется OpenCL для процессора, т.е. по факту используется ещё x ядер?

Распределенные вычисления в сети MQL5 Cloud Network
Распределенные вычисления в сети MQL5 Cloud Network
  • cloud.mql5.com
Большую часть времени современные компьютеры простаивают и не используют всех возможностей процессора. Мы предлагаем задействовать их с пользой. Вы можете сдавать мощности вашего компьютера другим участникам нашей сети для выполнения разнообразных...
 
22. Убран запрет на использование OpenCL в агентах тестирования. Ранее OpenCL-устройства можно было использовать только при тестировании на локальных агентах. Теперь агентам разрешено использовать все доступные OpenCL-устройства (процессор, видеокарту) при работе в локальной сети и в MQL5 Cloud Network.

Как установить запрет на использование моего GPU чужими агентами тестирования не запрещая использования CPU?

 

iBarShift работает некорректно при exact=true:

Print(iBarShift(_Symbol,_Period,iTime(_Symbol,_Period,7)+PeriodSeconds()/2,true));    //  -1 - неправильный результат (должно быть 7)
Print(iBarShift(_Symbol,_Period,iTime(_Symbol,_Period,7),true));                      //   7 - правильный результат 
Print(iBarShift(_Symbol,_Period,iTime(_Symbol,_Period,7)+PeriodSeconds()/2,false));   //   7 - правильный результат
 

Функции ITime, iClose и т.д. виснут на те же пресловутые 16 секунд.

void OnStart()
  {
   Print("1");
   Print(TimeToString(iTime(_Symbol,PERIOD_D1,1000000)));
   Print(iClose(_Symbol,PERIOD_D1,1000000));
   Print("2");
  }

2018.06.15 03:16:56.562 Speed (EURUSD,M1)       1
2018.06.15 03:17:12.427 Speed (EURUSD,M1)       1970.01.01 00:00   // 16 секунд
2018.06.15 03:17:28.316 Speed (EURUSD,M1)       0.0                // 16 секунд
2018.06.15 03:17:28.316 Speed (EURUSD,M1)       2
 
Nikolai Semko:

iBarShift работает некорректно при exact=true:

Распечайте значение

+PeriodSeconds()/2

и посмотрите сколько у вас баров реально на графике

 
Nikolai Semko:

Функции ITime, iClose и т.д. виснут на те же пресловутые 16 секунд.

Терминал пытается получить данные для запрошенной даты с сервера. Вы зачем лом суете в бензопилу?

 
Rashid Umarov:

Распечайте значение

и посмотрите сколько у вас баров реально на графике

У меня все правильно. Конструкцию +PeriodSeconds()/2   я добавил, чтобы получить дробную часть бара. Т.к. дробная часть бара не должна влиять на результат, но она влияет.

Т.е. если у нас H1, тогда

Print(TimeToString(iTime(_Symbol,PERIOD_H1,7)));                      //  2018.06.15 03:00
Print(TimeToString(iTime(_Symbol,PERIOD_H1,7)+PeriodSeconds()/2));    //  2018.06.15 03:30

при exact=true и существовании бара результат у iBarShift будет правильный если time - ровно время открытия бара, если промежуточное значение то всегда "-1" (что означает вне бара, но это не так). 100% Баг!


Rashid Umarov:

Терминал пытается получить данные для запрошенной даты с сервера. Вы зачем лом суете в бензопилу?

Я сознательно создаю такую ситуацию. Защита от дурака должна быть. А ее нет. 

Проверку деления на ноль ведь тоже нужно ставить в уважающих себя функциях.

Тем более дату я не запрашиваю, а лишь номер бара.

Например если на MN1 и я запрашиваю цену открытия или любую другую характеристику 600-го бара - Зависнет на 16 секунд.

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