21 декабря 2017
21 декабря 2017
В новой версии платформы прекращается поддержка десктопных и мобильных терминалов старых версий:
Такие терминалы не смогут подключаться к серверам новых версий. Мы настоятельно рекомендуем заранее обновить ваши терминалы.
Для поддержки новых групповых проектов был изменен протокол работы с онлайн хранилищем MQL5 Storage. К сожалению, после обновления на новую версию платформы вам потребуется заново извлечь все данные из хранилища. Сами данные, которые в нем хранятся, не будут затронуты и не потеряются.
Перед обновлением на новую версию платформы мы рекомендуем отправить все локальные изменения в хранилище (выполнить Commit).
Как это происходит
Например, вы можете создать инструмент, который будет показывать индекс доллара (USDX). Его формула будет выглядеть следующим образом:
50.14348112 * pow(ask(EURUSD),-0.576) * pow(USDJPY,0.136) * pow(ask(GBPUSD),-0.119) * pow(USDCAD,0.091) * pow(USDSEK,0.042) * pow(USDCHF,0.036)
Примечание: в исходной формуле индекса доллара используются пары
USDEUR и USDGBP. Поскольку в платформе есть только обратные валютные
пары, в формуле синтетического инструмента для них используется
отрицательная степень и цена Ask вместо Bid.
В режиме реального времени платформа будет
рассчитывать цену нового инструмента на основе котировок шести
других инструментов, предоставляемых вашим брокером. В Обзоре рынка и на
графике вы будете видеть, как изменяется его цена:
int CustomTicksAdd( const string symbol, // имя символа const MqlTick& ticks[] // массив с тиковыми данными, которые необходимо применить к пользовательскому инструменту );Функция CustomTicksAdd позволяет транслировать тики так, как если бы они приходили от сервера брокера. Данные записываются не напрямую в базу тиков, а отправляются в окно "Обзор рынка". И уже из него терминал сохраняет тики в своей базе. При большом объеме данных, передаваемых за один вызов, функция меняет свое поведение для экономии ресурсов. Если передается более 256 тиков, данные делятся на две части. Первая часть (большая) сразу напрямую записывается в базу тиков (как это делает CustomTicksReplace). Вторая часть, состоящая из последних 128 тиков, передается в окно "Обзор рынка" и после этого сохраняется терминалом в базе.
В MetaEditor появились полноценные проекты. Разрабатывать программы стало значительно удобнее.
Теперь в качестве проекта не выступает основной MQ5 файл
программы. Проект — это отдельный файл "MQPROJ", в котором хранятся
настройки программы, параметры компиляции и информация обо всех
используемых файлах. Доступ к основным настройкам проекта организован
через отдельное диалоговое окно, больше нет необходимости указывать их в
исходном коде через #property.
Для удобной работы с проектом предусмотрена отдельная вкладка в
Навигаторе. В ней по категориям отображаются все используемые файлы:
включаемые, ресурсные, заголовочные и т.д. При этом файлы добавляются в
навигатор проекта автоматически. Например, если вы включите новый
MQH-файл в код, он будет автоматически показан в разделе "Dependencies"
навигатора.
Мы сразу же предусмотрели возможность работы с новыми проектами в
онлайн хранилище MQL5 Storage. Теперь намного удобнее заниматься
разработкой больших проектов вместе с другими участникам сообщества
MQL5.community.
Для работы с групповыми проектами добавлен новый раздел Shared Projects. Проект, созданный в этом разделе, сразу же отправляется в хранилище: вы можете быстро раздать права на него другим участникам и приступить к совместной разработке.
При компиляции проекта в Shared Project исполняемый файл EX5 автоматически копируется в локальный каталог Experts, Indicators или Scripts, в зависимости от типа программы. Вы можете сразу запустить программу на графике, не копируя файлы каждый раз вручную.
Изменения в работе с хранилищем MQL5 Storage
Для реализации полноценной работы с групповыми проектами был полностью переделан протокол взаимодействия с хранилищем MQL5 Storage. К сожалению, после обновления на новую версию платформы вам потребуется заново извлечь все данные из хранилища. Сами данные, которые в нем хранятся, не будут затронуты и не потеряются.
Команда "Извлечь данные из хранилища" (Checkout from 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 Projects; чтобы получить их, нажмите "Извлечь файлы из хранилища" в контекстном меню.
Для создания нового группового проекта выберите папку Shared Projects и нажмите "Новый проект":
Далее пройдите стандартные шаги Мастера MQL5: задайте тип, имя и свойства будущей программы. Выбирайте для групповых проектов четкие и понятные имена, чтобы другие участники легко их различали. В имени допускаются только латинские буквы и цифры, пробелы не допускаются.
Сразу после создания проект будет автоматически добавлен в хранилище MQL5 Storage. Используемые файлы стандартной библиотеки в хранилище не добавляются, при необходимости вы можете добавить их вручную.
Чтобы разрешить другим участникам работать с проектом, откройте его свойства: здесь можно назначить права конкретным пользователям (указать логин MQL5.community), а также задать общие параметры групповой работы:
Для удобства работы при компиляции группового проекта конечный
исполняемый файл (EX5) автоматически копируется в папку Experts,
Indicators или Scripts в зависимости от типа программы. Таким образом,
вы сразу можете запустить программу в терминале без ее ручного
копирования в нужный каталог.
Публичные проекты в MQL5 Storage: участие в разработках
Как уже упоминалось выше, у каждого группового проекта в MQL5 Storage есть настройки публичности: проект может быть приватным или же открытым для участия других пользователей. Теперь все проекты, к которым можно свободно присоединиться, отображаются в отдельной вкладке "Публичные проекты".
Каждый может найти интересный проект и принять участие в его разработке. Достаточно нажать "Присоединиться", а затем получить проект из хранилища.
//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- файл шаблона в виде бинарного массива unsigned char my_template[]= { 0xFF,0xFE,0x3C, ... ,0x00 // массив данных в примере сокращен }; //--- сохранение и применение шаблона if(FileSave("my_template.tpl",my_template)) { Print("Custom template saved in \\MQL5\\Files"); if(ChartApplyTemplate(0,"\\Files\\my_template.tpl")) Print("Custom template applied to the current chart"); else Print("Failed to apply custom template"); } else Print("Failed to save custom template"); }
Функция | Действие |
---|---|
CustomSymbolCreate | Создает пользовательский символ с указанным именем в указанной группе |
CustomSymbolDelete | Удаляет пользовательский символ с указанным именем |
CustomSymbolSetInteger | Устанавливает для пользовательского символа значение свойства целочисленного типа |
CustomSymbolSetDouble | Устанавливает для пользовательского символа значение свойства вещественного типа |
CustomSymbolSetString | Устанавливает для пользовательского символа значение свойства строкового типа |
CustomSymbolSetMarginRate | Устанавливает для пользовательского символа коэффициенты взимания маржи в зависимости от типа и направления ордера |
CustomSymbolSetSessionQuote | Устанавливает время начала и время окончания указанной котировочной сессии для указанных символа и дня недели |
CustomSymbolSetSessionTrade | Устанавливает время начала и время окончания указанной торговой сессии для указанных символа и дня недели |
CustomRatesDelete | Удаляет все бары в указанном временном интервале из ценовой истории пользовательского инструмента |
CustomRatesReplace | Полностью заменяет ценовую историю пользовательского инструмента в указанном временном интервале данными из массива типа MqlRates |
CustomRatesUpdate | Добавляет в историю пользовательского инструмента отсутствующие бары и заменяет существующие бары данными из массива типа MqlRates |
CustomTicksAdd | Добавляет в ценовую историю пользовательского инструмента данные из массива типа MqlTick. Пользовательский символ должен быть выбран в окне MarketWatch (Обзор рынка) |
CustomTicksDelete | Удаляет все тики в указанном временном интервале из ценовой истории пользовательского инструмента |
CustomTicksReplace | Полностью заменяет ценовую историю пользовательского инструмента в указанном временном интервале данными из массива типа MqlTick |
Библиотека размещается в рабочем каталоге терминала в папке Include\Generic.
bool ArraySwap( void& array1[], // первый массив void& array2[] // второй массив );Функция принимает динамические массивы одинакового типа и одинаковых размерностей. Для многомерных массивов количество элементов во всех измерениях кроме первого должно совпадать.