Бета-версия платформы MetaTrader 5 build 1700: Проекты в MetaEditor и синтетические инструменты
Постарайтесь, пожалуйста, внести в 1700 билд исправления по всем багам CopyTicks и CustomSymbol из СД.
Можете пояснить, что нашли?
Все выкладывал в паблик в соответствующих темах. По памяти - tkc кастомных растут бесконечно. Тики в них не всегда записываются. И считать их не получается. В СД все рассматривается. Надеюсь, что исправят, т.к. коды воспроизведения полностью предоставлены.
Теперь нужен штатный трекер задач для командных проектов.
Удобный механизм для codereview.
Жду также статью про непрерывную интеграцию для больших проектов (@Rashid Umarov добавьте тему, пожалуйста, в список нужных статей). Например, постоянную доставку кода на продакшн. Ведь специфичных моментов хватает, например, как это делать безопасно, если работает советник.
- В свойствах проектов появились две новые опции для компиляции MQL5-программ:
- Включить дополнительную оптимизацию — приложения с отключенной оптимизацией компилируются быстрее, но работают медленнее.
- Проверять вещественные делители — приложения с отключенной проверкой работают несколько быстрее, поскольку ошибки деления на ноль не проверяются при исполнении кода.
- MQL5:
Добавлено свойство торгового инструмента SYMBOL_VISIBLE. Вызов SymbolInfoInteger(symbol,
SYMBOL_VISIBLE) вернет false, если указанный символ не виден в Обзоре рынка.
По документации так и не смог понять, в чем отличие от SYMBOL_SELECT.
Какие опции компилятора стоят для обычных файлов? И можно ли эти опции менять директивами?
По документации так и не смог понять, в чем отличие от SYMBOL_SELECT.
Символ может быть выбран, но при этом может быть не виден в окне "Обзор рынка". В такой ситуации SYMBOL_SELECT - true, а SYMBOL_VISIBLE - false
Говорю по тому, как понял пояснения - они где-то были на форуме.
Что будет, если названия двух независимых Shared Projects, добавляемых мной (с моей машины) и кем-то еще (с его машины) совпадут?
Жду также статью про непрерывную интеграцию для больших проектов (@Rashid Umarov добавьте тему, пожалуйста, в список нужных статей). Например, постоянную доставку кода на продакшн. Ведь специфичных моментов хватает, например, как это делать безопасно, если работает советник.
Для продакшена сперва нужно решить проблему автоматических обновлений терминала, т.к. они иногда приводят к неработоспособности какой-нибудь mql-программы.
Много лет назад писал в СД, что обновления должны поставляться в соответствии с настройками пользователя:
- автоматически
- по запросу
- никогда
За колесо мышки отдельное спасибо! (п. 15)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Бета-версия платформы MetaTrader 5 build 1700: Проекты в MetaEditor и синтетические инструменты
6 декабря 2017 года будет выпущена обновленная версия платформы MetaTrader 5 в бета-режиме. Мы обновим наш публичный демо-сервер MetaQuotes-Demo, находящийся по адресу access.metatrader5.com:443. Призываем всех трейдеров присоединиться к тестированию новой версии платформы, чтобы самостоятельно опробовать все ее возможности и помочь разработчикам в исправлении найденных ошибок.
Для обновления на новый 1700 билд платформы MetaTrader 5 достаточно подключиться к серверу access.metatrader5.com:443.
После окончания данного этапа бета-тестирования будет выпущен финальный билд новой платформы MetaTrader 5.
В новой версии платформы прекращается поддержка десктопных и мобильных терминалов старых версий:
Изменен протокол работы с MQL5 Storage
Для поддержки новых групповых проектов был изменен протокол работы с онлайн хранилищем MQL5 Storage. К сожалению, после обновления на новую версию платформы вам потребуется заново извлечь все данные из хранилища. Сами данные, которые в нем хранятся, не будут затронуты и не потеряются.
Перед обновлением на новую версию платформы мы рекомендуем отправить все локальные изменения в хранилище (выполнить Commit).
Обновление содержит следующие изменения:
Теперь в качестве проекта не выступает основной MQ5-файл программы. Проект — это отдельный файл "MQPROJ", в котором хранятся настройки программы, параметры компиляции и информация обо всех используемых файлах. Доступ к основным настройкам проекта организован через отдельное диалоговое окно, больше нет необходимости указывать их в исходном коде через #property.
Для удобной работы с проектом предусмотрена отдельная вкладка в Навигаторе. В ней по категориям отображаются все используемые файлы: включаемые, ресурсные, заголовочные и т.д. При этом файлы добавляются в навигатор проекта автоматически. Например, если вы включите новый MQH-файл в код, он будет автоматически показан в разделе "Dependencies" навигатора.
Мы сразу же предусмотрели возможность работы с новыми проектами в онлайн хранилище MQL5 Storage. Теперь разработкой больших проектов можно удобно заниматься вместе с другими участникам сообщества MQL5.community.
Для работы с групповыми проектами добавлен новый раздел Shared Projects. Проект, созданный в этом разделе, сразу же отправляется в хранилище: вы можете быстро раздать права на него другим участникам и приступить к совместной разработке.
При компиляции проекта в Shared Project исполняемый файл EX5 автоматически копируется в локальный каталог Experts, Indicators или Scripts, в зависимости от типа программы. Вы можете сразу запустить программу на графике, не копируя файлы каждый раз вручную.Изменения в работе с хранилищем MQL5 Storage
Для реализации полноценной работы с групповыми проектами был полностью переделан протокол работы с хранилищем MQL5 Storage. К сожалению, после обновления на новую версию платформы вам потребуется заново извлечь все данные из хранилища. Сами данные, которые в нем хранятся, не будут затронуты и не потеряются.
Новые проекты: пример создания и подробности работы
В MetaEditor появилась новая сущность — собственно проект. Это файл с расширением mqproj, в котором хранятся общие свойства программы, а также информация обо всех используемых файлах. Теперь свойствами программы можно удобно управлять в отдельном диалоговом окне MetaEditor, а не изменять их вручную в исходном коде (директивы #property).
Если у вас уже есть разработки, то самый простой способ попробовать новые проекты — воспользоваться командой "Новый проект из исходного файла".
В том же каталоге, что и выбранный исходный файл, будет создан одноименный файл проекта с расширением mqproj. В проект автоматически добавятся основные свойства программы, указанные в виде #property в исходном файле: имя, копирайт, версия, ссылка на разработчика и описание.
В свойствах проектов появились две новые опции для компиляции MQL5-программ:Для работы с проектом предназначена отдельная вкладка "Проект" в окне "Навигатор". В ней удобно показываются все файлы, используемые в проекте. При генерации проекта из исходного файла в раздел "Dependencies" автоматически добавляются все используемые включаемые файлы (указанные при помощи директивы #include в основном MQ5-файле и во всех включенных в него файлах).
При добавлении новых включаемых файлов в исходный код, они также будут появляться в Навигаторе проекта. В раздел Headers будут добавляться используемые заголовочные файлы, а в раздел Resources — изображения, звуки и другие MQL5-программы, включенные в проект в виде ресурсов. В разделе Sources показываются MQ5-файлы с исходным кодом. В раздел Settings and files можно добавлять другие файлы, например, настройки для тестирования и шаблоны для графиков.
Для добавления существующих файлов в проект и удаления из него файлов воспользуйтесь командами контекстного меню. Будьте внимательны при удалении: вы можете убрать файл из проекта (убрать привязку) или полностью удалить его с жесткого диска:
Новый проект создать также легко, как и обычную MQL5-программу. Нажмите "Новый проект" и в Мастере MQL5 в обычном режиме выберите тип создаваемой программы и укажите ее свойства (имя, обработчики событий и т.п.).Для получения исполняемого файла EX5 вы можете открыть проект и выполнить команду компиляции (F7) или же, как раньше, открыть основной MQ5-файл программы и скомпилировать его.
Групповые проекты в MQL5 Storage: подробности работы
Для работы с групповыми проектами предусмотрен раздел Shared Projects. Если у вас еще не подключено хранилище, выполните в контекстном меню этой папки команду Activate MQL5 Storage. MetaEditor сразу же проверит, есть ли в вашем хранилище сохраненные данные, а также доступны ли вам какие-либо групповые проекты. Имеющиеся данные будут сразу же извлечены из хранилища и загружены на компьютер (Checkout). Доступные групповые проекты будут показаны в разделе Shared Project, чтобы получить их, нажмите "Извлечь файлы из хранилища" в контекстном меню.
Для создания нового группового проекта выберите папку Shared Projects и нажмите "Новый проект":
Далее пройдите стандартные шаги Мастера MQL5: задайте тип, имя и свойства будущей программы. Выбирайте для групповых проектов четкие и понятные имена, чтобы другие участники легко их различали. В имени допускаются только латинские буквы, пробелы не допускаются.Сразу после создания проект будет автоматически добавлен в хранилище MQL5 Storage. Используемые файлы стандартной библиотеки в хранилище не добавляются, при необходимости вы можете добавить их вручную.
Чтобы разрешить другим участникам работать с проектом, откройте его свойства. Здесь можно назначить права конкретным пользователям (указать логин MQL5.community), а также задать общие параметры групповой работы:
Для удобства работы при компиляции группового проекта конечный исполняемый файл (EX5) автоматически копируется в папку Experts, Indicators или Scripts в зависимости от типа программы. Таким образом, вы сразу можете запустить программу в терминале без ее ручного копирования в нужный каталог.Как это происходит
Примечание: в исходной формуле индекса доллара используются пары USDEUR и USDGBP. Поскольку в платформе есть только обратные валютные пары, в формуле синтетического инструмента для них используется отрицательная степень и цена Ask вместо Bid.
В режиме реального времени платформа будет рассчитывать цену нового инструмента на основе котировок шести других инструментов, предоставляемых вашим брокером. В Обзоре рынка и на графике вы будете видеть, как изменяется его цена:
Создайте новый пользовательский инструмент, откройте его спецификацию и укажите формулу:
Для удобства редактор формул показывает список возможных вариантов по мере ввода имен инструментов и функций.Расчет тиков и минутных баров синтетического инструмента начнется при его добавлении в "Обзор рынка". При этом в "Обзор рынка" сразу же автоматически добавляются все символы, необходимые для его расчета. В журнал платформы будет добавлена запись о начале расчета: Synthetic Symbol USDX: processing started.
Расчет котировок в реальном времени
Каждые 100 мс (десять раз в секунду) проверяется, изменилась ли цена хотя бы одного из инструментов, участвующих в формуле. Если да, происходит расчет цены синтетического инструмента и генерируется тик. Расчет осуществляется параллельно в трех потоках для цен Bid, Ask и Last. Например, если в формуле указан EURUSD*GBPUSD, расчет цен синтетического инструмента будет следующим:
Наличие изменений проверяется для каждой цены отдельно. Например, если при очередном расчете у исходного инструмента поменялась только цена Bid, то и для тика синтетического инструмента будет рассчитана только та цена, где были изменения.
Построение истории минутных баров
Помимо сбора тиков в реальном времени, платформа создает и минутную историю синтетического инструмента. Таким образом, трейдер может просматривать его графики аналогично обычным инструментам, проводить на них технический анализ при помощи объектов и индикаторов.
Как только трейдер добавляет синтетический инструмент в Обзор рынка, платформа проверяет, есть ли для него рассчитанная минутная история. Если нет, она будет создана для последних 60 дней — это около 50 000 баров. Если в настройках платформы в параметре "Макс. баров в окне" указана меньшая величина, то будет использовано именно это ограничение.
Если часть баров за этот период уже построена, то платформа досоздаст новые бары. Более глубокая история создается только при попытке просмотреть соответствующий временной период на графике (если прокрутить его назад или запросить историю из MQL5-программы).
История минутных баров синтетического инструмента рассчитывается на основе минутных баров (не тиков) инструментов, входящих в его формулу. Например, чтобы посчитать цену Open минутного бара синтетического инструмента, платформа берет цены Opеn инструментов, входящих в его формулу. Аналогично производится расчет для цен High, Low и Close.
Если для какого-либо инструмента из формулы отсутствует нужный минутный бар, платформа возьмет для расчета цену Close предыдущего бара. Например, используются три инструмента: EURUSD, USDJPY и GBPUSD. Если при расчете бара для 12:00 на инструменте USDJPY такого минутного бара не окажется, то при расчете будут использованы следующие цены:
Если минутный бар отсутствует у всех инструментов из формулы, соответствующий минутный бар синтетического инструмента не будет рассчитан.
Построение новых минутных баров
Все новые бары (текущий и последующие) синтетического инструмента создаются на основе генерируемых тиков. Цена, по которой строятся бары, зависит от параметра "Построение графиков" в спецификации:
Какие операции можно использовать в формуле инструмента
В формуле можно использовать ценовые данные, а также некоторые свойства имеющихся символов (предоставляемых брокером). Для этого укажите:
Для арифметических операций существует приоритет их выполнения:
Также в формуле можно использовать константы:
Также в формуле можно использовать все математические функции, поддерживаемые в MQL5, кроме MathSrand, MathRand и MathIsValidNuber. Для всех функций используются только короткие имена: fabs(), acos(), asin() и т.д.
Функция CustomTicksAdd позволяет транслировать тики так, как если бы они приходили от сервера брокера. Данные записываются не напрямую в базу тиков, а отправляются в окно "Обзор рынка". И уже из него терминал сохраняет тики в своей базе. При большом объеме данных, передаваемых за один вызов, функция меняет свое поведение для экономии ресурсов. Если передается более 256 тиков, данные делятся на две части. Первая часть (большая) сразу напрямую записывается в базу тиков (как это делает CustomTicksReplace). Вторая часть, состоящая из последних 128 тиков, передается в окно "Обзор рынка" и после этого сохраняется терминалом в базе.
Теперь использовать защиту как в Маркете может каждый. Достаточно выполнить команду Сервис — MQL5 Cloud Protector в MetaEditor. Единственное отличие этой защиты от Маркета заключается в том, что файл не привязывается к компьютеру пользователя. Файлы, защищенные через MQL5 Cloud Protector, можно запускать на любых компьютерах как обычные EX5 файлы.
Для инструментов, чьи графики строятся по ценам Bid (указано в спецификации), показываются цены Bid High и Bid Low. Для инструментов, чьи графики строятся по ценам Last, показываются Last High и Last Low.
Вместе с колонками High/Low автоматически включается колонка Last, если в Обзоре рынка есть хотя бы один инструмент, чьи графики строятся по ценам Last.
Для удобства измененные записи подсвечиваются:Для сохранения изменений нажмите "Применить изменения" в нижней части окна.
Функция принимает динамические массивы одинакового типа и одинаковых размерностей. Для многомерных массивов количество элементов во всех измерениях кроме первого должно совпадать.
При помощи этого же меню в код программы можно легко добавить файлы в виде бинарного или текстового массива. Например, вы можете переносить шаблоны графиков вместе с экспертами/индикаторами: включите свой шаблон в код программы в виде массива, затем при помощи функции FileSave сохраните его на диск. После этого шаблон можно применить к графику прямо из эксперта при помощи функции ChartApplyTemplate.Обновление будет доступно через систему LiveUpdate.