MetaTrader 5 build 1525: Представление истории в виде позиций и улучшение тестера

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

27 января 2017

Terminal

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




    Для хеджинговых счетов данный вид представления позиций фактически аналогичен истории счета в MetaTrader 4.



  2.   Добавлена команда для визуализации истории сделок на графике по конкретному символу.

    • Чтобы показать все сделки только по символу выбранной позиции/сделки, нажмите "Добавить сделки по [Имя символа]". Сделки будут добавлены на все открытые в данный момент графики по этому символу. Если таких графиков нет, будет открыт новый.
    • Чтобы показать сделки по всем символам из истории счета, нажмите "Добавить все сделки". На все открытые графики будут добавлены все сделки по соответствующим символам.




  3. Добавлен показ международного имени торгового инструмента в спецификации контракта, а также возможность поиска по нему в диалоге управления инструментами.




  4. Добавлена возможность быстро установить разрешение для окна терминала. Функция будет удобна для тех, кто снимает видеоролики. В меню доступны наиболее популярные разрешения для публикации роликов в видеосервисах, таких как YouTube.



  5. Шаблоны и профили графиков перенесены из [каталога данных терминала\Profiles] в [каталог данных терминала\MQL5\Profiles]. Теперь можно легко добавлять шаблоны в хранилище MQL5 Storage и использовать их с любого вашего компьютера.

MQL5

  1. Добавлена поддержка ресурсных переменных. Использование таких переменных может существенно облегчить написание некоторых программ. Например, вы можете написать OpenCL код в отдельном CL-файле, а затем включить этот файл в виде строки в ресурсы вашей MQL5-программы. Раньше вместо этого код пришлось бы описывать в виде одной большой строковой переменной.

    Объявление ресурсной переменной
    #resource путь_к_файлу_ресурса as тип_ресурсной_переменной имя_ресурсной_переменной

    Особенности
    • Для строковых файлов производится автоматическое определение кодировки по BOM (заголовку). Если BOM отсутствует, кодировка определяется по содержимому. Поддерживаются кодировки ANSI, UTF-8 и UTF-16. Все строки переводятся в Unicode.
    • К данным такого ресурса можно обращаться только через переменную. Автоматическая адресация через "::<resource name>" не работает.
    • Специальный тип ресурсной переменной bitmap указывает компилятору, что ресурс является графическим изображением. Ресурсная переменная в данном случае получает тип uint.
    • При использовании 24-битного изображения для всех его пикселей компонента альфа-канала устанавливается в значение 255.
    • При использовании 32-битного изображения без альфа-канала для всех его пикселей компонента альфа-канала также устанавливается в значение 255.
    • При загрузке 32-битного изображения с альфа-каналом никаких манипуляций с пикселями не происходит.
    • Ресурсная переменная-массив типа bitmap может иметь две размерности. В этом случае размер массива будет установлен как [высота_картинки][ширина_картинки].
    • В случае одномерного массива количество элементов будет установлено как высота_картинки*ширина_картинки.
    • Если размер файла ресурса не кратен размеру элемента массива, то остаток данных отсекается. Например, при размере файла в 14 байт, для массива int количество элементов будет составлять 3, а оставшиеся 2 байта (14 - sizeof(int)*3) будут отброшены.
    Примеры использования
    #resource "data.bin" as int ExtData[]             // объявление массива числового типа, содержащего данные из файла data.bin
    #resource "data.bin" as MqlRates ExtData[]        // объявление массива простых структур, содержащего данные из файла data.bin
    
    #resource "data.txt" as string ExtCode            // объявление строки, содержащей данные файла data.txt
    #resource "data.txt" as string ExtCode[]          // объявление строкового массива, содержащего строки файла data.txt
    
    #resource "image.bmp" as bitmap ExtBitmap[]       // объявление одномерного массива, содержащего в себе растр из файла BMP, размер массива = height * width
    #resource "image.bmp" as bitmap ExtBitmap2[][]    // объявление двумерного массива, содержащего в себе растр из файла BMP, размер массива [height][width]

  2. Добавлено свойство CHART_SHOW для отключения отображения графика. Для получения и установки свойства используются функции ChartGetInteger и ChartSetInteger.

    Если установлено значение false, то отключается отрисовка любых атрибутов ценового графика и устраняются все отступы по краям графика: шкалы времени и цены, строка быстрой навигации, метки событий Календаря, значки сделок, тултипы индикаторов и баров, подокна индикаторов, гистограммы объёмов и т.д.

    Отключение отрисовки является идеальным решением для создания собственного интерфейса программы с использованием графических ресурсов.

    Графические объекты отрисовываются всегда независимо от установленного значения свойства CHART_SHOW.

  3. Добавлено свойство CHART_KEYBOARD_CONTROL для включения/отключения управления графиком при помощи клавиатуры ("Home", "End", "PageUp", "+", "-", "Стрелка вверх"  и т.д.). Установка  CHART_KEYBOARD_CONTROL=false позволяет отключить скроллинг и масштабирование графика, но при этом сохраняется возможность получать события нажатия данных клавиш в OnChartEvent.

    Для получения и установки свойства используются функции ChartGetInteger и ChartSetInteger.

  4. Добавлены новые функции и свойства для работы с OpenCL.

    Новые свойства для работы с памятью
    С помощью CLGetInfoIntegrer теперь можно получить четыре новых свойства:
    • CL_DEVICE_MAX_WORK_GROUP_SIZE — общее количество локальных рабочих групп, доступных для OpenCL устройства.
    • CL_KERNEL_WORK_GROUP_SIZE — общее количество локальных рабочих групп, доступных для OpenCL программы.
    • CL_KERNEL_LOCAL_MEM_SIZE — размер локальной памяти в байтах, которую использует OpenCL программа для всех параллельных задач в группе. Используйте CL_DEVICE_LOCAL_MEM_SIZE для получения доступного максимума.
    • CL_KERNEL_PRIVATE_MEM_SIZE — минимальный размер приватной памяти в байтах, используемой каждой задачей в кернеле OpenCL программы.

    bool CLExecutionStatus(int kernel)
    Возвращает состояние выполнения OpenCL программы. В качестве параметра передается хэндл на кернел программы OpenCL.

    bool CLSetKernelArgMemLocal(int kernel_handle,int arg_index,ulong local_mem_size)
    Задает локальный буфер в качестве аргумента kernel-функции. В качестве параметров передаются хэндл на кернел программы OpenCL, номер аргумента OpenCL функции и размер буфера.

  5. Добавлен код ответа TRADE_RETCODE_LIMIT_POSITIONS. Количество открытых позиций, которое можно одновременно иметь на счете, может быть ограничено настройками сервера. При достижении лимита в ответ на выставление ордера сервер вернет ошибку TRADE_RETCODE_LIMIT_POSITIONS. Ограничение работает по-разному в зависимости от типа учета позиций на счете:

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

  6. Исправлена ошибка, в некоторых случаях приводившая к пропуску тиков в тиковой истории.
  7. Исправлены ошибки косвенной типизации шаблонов.
  8. Обновлена библиотека работы с математической статистикой.
  9. Добавлена функция TranslateKey, которая возвращает  Unicode-символ по виртуальному коду клавиши, учитывая текущий язык ввода и состояние управляющих клавиш. Функция использует ToUnicodeEx для преобразования нажатых пользователем клавиш в Unicode-символы.
    void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam)
      {
       if(id==CHARTEVENT_KEYDOWN)
         {
          short sym=TranslateKey((int)lparam);
          //--- если введённый символ успешно преобразован в Юникод
          if(sym>0)
             Print(sym,"'",ShortToString(sym),"'");
          else
             Print("Error in TranslateKey for key=",lparam);
         }
      }

Market

  1. Исправлено открытие страницы продукта при скачивании демо-версии.

Tester

  1. После завершения оптимизации результаты теперь автоматически сортируются по колонке "Результат".
  2. В контекстное меню вкладки результатов оптимизации и журнала добавлена опция автоматического переключения на результаты после завершения оптимизации.
  3. Тестер стратегий теперь остается в режиме оптимизации после запуска одиночного тестирования. Ранее, если из вкладки результатов оптимизации запускалось одиночное тестирование, тестер стратегий полностью переходил в режим одиночного тестирования. Для проведения повторной оптимизации было необходимо включать ее вновь в настройках.
  4. Теперь наборы входных параметров можно сохранять не только в виде set-файлов, но и в виде настроек локального тестера стратегий с удобным доступом к ним через контекстное меню.




  5. Добавлен перевод интерфейса на монгольский, венгерский, румынский языки и язык урду.

MetaEditor

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




  2. Исправлена ошибка определения кодировки исходных файлов.
  3. Исправлен поиск по файлам в кодировке UTF-8.
  4. Исправлена ошибка выделения текста мышью при наличии в нем знаков табуляции.
  5. Добавлен перевод интерфейса на венгерский и румынский языки.

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