Справка по MetaTrader 5Торговые операцииДля продвинутых пользователейПользовательские финансовые инструменты

Пользовательские финансовые инструменты

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

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

Как создать и настроить пользовательский инструмент

Откройте окно управления символами через контекстное меню "Обзора рынка" и нажмите "Создать символ":

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

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

  • Базис — имя базового актива для производного инструмента. Например, для фьючерсных контрактов на золото базовым активом является золото.
  • Страница — адрес интернет страницы с информацией по символу. Он будет отображаться в виде ссылки при просмотре свойств символа в "Обзоре рынка".
  • Построение графиков — по какой цене строятся графики символа: Bid или Last.
  • Фон — цвет фона инструмента в "Обзоре рынка".
  • Рассчитывать хеджированную маржу по наибольшей стороне — этот режим используется только на хеджинговых счетах, где возможны разнонаправленные позиции по одному инструменту. По инструменту рассчитывается маржа по короткой стороне (все позиции и отложенные ордера на продажу) и по длинной стороне (все позиции и отложенные ордера на покупку). В качестве итогового значения маржи по символу используется наибольшее из двух значений.
  • Использовать ограничение по времени — если установить для этого параметра значение "Да", вы сможете указать день начала и окончания торгов по инструменту (период обращения).

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

Торговые и котировочные сессиии пользовательского инструмента

Установите сессии при помощи рычажков. Советники не смогут торговать в тестере стратегий вне торговых сессий.

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

  • Вы можете быстро настроить собственный инструмент — скопируйте параметры из любого схожего инструмента, а затем измените то, что вам нужно. Для этого выберите имеющийся инструмент в поле "Скопировать из".
  • Имя пользовательского символа не должно пересекаться с именами символов, транслируемых брокерами. Если вы подключитесь к серверу, и на нем окажется символ, совпадающий с пользовательским, то пользовательский символ будет удален.
  • Имя и описание символа задается только латинскими буквами без знаков препинания, пробелов и спецсимволов (допускаются ".", "_", "&" и "#"). Не рекомендуется использовать в названии символы <, >, :, ", /, |, ?, *.
  • Минутная и тиковая история пользовательского инструмента автоматически удаляется при изменении следующих параметров в его спецификации: формула (для синтетических инструментов), цена и размер тика, построение графиков, точность и размер пункта. Ценовые данные удаляются в том числе и при изменении указанных параметров через MQL5-программы. Будьте внимательны, настраивайте все параметры инструмента перед импортом истории.

Импорт и экспорт пользовательских инструментов #

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

Вы также можете экспортировать и импортировать целые группы символов:

Экспорт и импорт настроек группы пользовательских финансовых инструментов

Настройки экспортируются в текстовые файлы формата JSON:

{
"ConfigSymbols" : [
{
"Symbol" : "EURUSD_cust",
"Path" : "Custom\\Forex\\EURUSD_cust",
"ISIN" : "",
"Description" : "Euro vs US Dollar",
....

Управление пользовательскими символами #

Все пользовательские символы отображаются в отдельной группе Custom. Чтобы изменить или удалить символ, воспользуйтесь контекстным меню в списке:

Создание, редактирование и удаления пользовательских инструментов

Импорт ценовой истории #

Вы можете импортировать ценовые данные в собственный символ из любого текстового файла, а также из файлов истории MetaTrader (HST). Выберите символ, а затем перейдите на вкладку "Бары" или "Тики".

Импорт ценовой истории в пользовательский инструмент

В диалоге импорта укажите путь к файлу с данными и задайте настройки:

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

Файл с минутными барами должен иметь формат: Дата Время Open High Low Close ТиковыйОбъем Объем Спред. Например:

<DATE>        <TIME>      <OPEN>     <HIGH>     <LOW>      <CLOSE> <TICKVOL><VOL>    <SPREAD>
2016.06.27    00:01:00    1.10024    1.10136    1.10024    1.10070    18    54000000    44
2016.06.27    00:02:00    1.10070    1.10165    1.10070    1.10165    32    55575000    46
2016.06.27    00:03:00    1.10166    1.10166    1.10136    1.10163    13    13000000    46
2016.06.27    00:04:00    1.10163    1.10204    1.10155    1.10160    23    51000000    41

Файл с тиками должен иметь формат: Дата Время Bid Ask Last Volume. Например:

<DATE>          <TIME>          <BID>   <ASK>   <LAST>  <VOLUME>
2017.07.03      00:03:47.212    1.14175 1.14210 0.00000 0
2017.07.03      00:03:47.212    1.14168 1.14206 0.00000 0
2017.07.03      00:03:47.717    1.14175 1.14206 0.00000 0
2017.07.03      00:03:54.241    1.14175 1.14205 0.00000 0
2017.07.03      00:03:57.982    1.14165 1.14201 0.00000 0
2017.07.03      00:04:07.795    1.14175 1.14201 0.00000 0
2017.07.03      00:04:55.432    1.14164 1.14200 0.00000 0
2017.07.03      00:14:33.743    1.14173 1.14203 0.00000 0
2017.07.03      00:14:33.743    1.14173 1.14201 0.00000 0
2017.07.03      00:16:44.901    1.14174 1.14195 0.00000 0

Флаги тиков передавать не нужно, терминал рассчитает их самостоятельно при импорте.

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

  • В торговой платформе ценовая история хранится в виде минутных баров. Все остальные таймфреймы создаются на их основе. При импорте вы можете использовать данные и с более высоких таймфреймов, но следует учитывать, что графики более низких таймфреймов при этом будут иметь пропуски. Например, при импорте часовых данных на минутном графике вы увидите по одному бару на каждый час.
  • При импорте происходит полная замена временного интервала данными из указанного файла. Например, если в файле находятся данные с 2016.01.01 00:00:00 по 2016.06.01 00:00:00 и в истории пользовательского символа уже есть какие-то данные на этом интервале, они будут полностью заменены новыми (даже если импортируемых данных меньше, чем было).
  • При импорте баров наличие дублирующихся записей в импортируемом файле (баров с одним и тем же временем) будет считаться ошибкой. В платформе одной минуте может соответствовать только один бар. При импорте тиков наличие тиков с полностью одинаковыми параметрами допускается.
  • Если для какого-либо показателя в строке значение меньше или равно нулю, это значение не импортируется.
  • При импорте пользователь должен самостоятельно обеспечить правильный порядок тиков в файле: от более ранних к более поздним.

Ценовые данные пользовательских символов сохраняются в отдельном каталоге Custom (вне каталогов данных конкретных торговых серверов):

C:\Users\[windows account]\AppData\Roaming\MetaQuotes\Terminal\[instance id]\bases\Custom

Редактирование ценовой истории #

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

  • Чтобы изменить значение, дважды нажмите на него.
  • Для добавления или удаления записей, воспользуйтесь контекстным меню
  • Чтобы удалить сразу несколько баров/тиков, выделите их мышью, удерживая клавишу Shift или Ctrl+Shift.

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

Ручное изменение минутных баров и тиковых данных

Для удобства измененные записи подсвечиваются:

  • красный фон — некорректная запись (например, максимальная цена меньше минимальной)
  • зеленый фон — корректная измененная запись
  • серый фон — удаленная запись
  • желтый фон — добавленная запись
  • При добавлении нового бара в колонку "Дата" автоматически подставляется первая незанятая дата/время из текущей выборки данных.
  • Платформа не позволяет создавать бары с одинаковой датой/временем. Одной минуте может соответствовать только один бар.

Для сохранения изменений нажмите "Применить изменения" в нижней части окна.

Использование собственных финансовых инструментов

Использование собственных символов практически не отличается от тех, что предоставляет брокер. Они также показываются в окне "Обзор рынка", по ним можно открывать графики, на которые можно накладывать индикаторы и аналитические объекты.

Ценовой график пользовательского инструмента с техническими индикаторами

Тестирование на собственных финансовых инструментах

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

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

При расчете маржи и прибыли по сделкам, совершаемым при тестировании, тестер стратегий при необходимости автоматически использует доступные на счете кросс-курсы. Например, если валюта прибыли инструмента — EUR, а валюта счета — USD, тестер будет конвертировать ее по соответствующим курсам пары EURUSD.

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

Например, мы создали собственный символ AUDCAD.custom с типом расчета маржи Forex, и валюта нашего счета — USD. Тогда на основе имени форексного инструмента тестер ищет необходимые символы в следующем порядке:

  1. сначала ищутся символы вида AUDUSD.custom (для расчета маржи) и USDCAD.custom (для расчета прибыли по сделкам)
  2. затем, если какого-то из этих инструментов нет, ищется первый символ, который соответствует по имени необходимым валютным парам — AUDUSD и USDCAD соответственно. Например, найдены AUDUSD.b и USDCAD.b — значит, именно курсы этих инструментов будут использоваться при расчетах маржи и прибыли.

Для инструментов с остальными типами расчета маржи (Futures, Stock Exchange) необходимо наличие валютной пары для пересчета валюты инструмента в валюту депозита. Например, мы создали собственный символ с валютой прибыли и валютой маржи, выраженными в британских фунтах (GBP), а валютой депозита является швейцарский франк (CHF). Тогда поиск инструментов для тестирования ведется в следующем порядке:

  1. Проверяется наличие торгового инструмента, соответствующего валютной паре GBPCHF (GBP vs CHF).
  2. Если он отсутствует, то ищется первый торговый инструмент, который соответствует по имени валютной паре GBPCHF, например GBPCHF.b или GBPCHF.def.
  • При тестировании на собственных инструментах убедитесь, что на счете есть все необходимые валютные пары для расчетов. В ином случае, расчет финансовых результатов и залоговых требований при тестировании будет невозможен.
  • Использование MQL5 Cloud Network для оптимизации на собственных символах не разрешено. Это связано с тем, что на компьютерах разных трейдеров могут находиться пользовательские символы с одинаковыми именами, но разными ценовыми историями. Что может привести не только к расхождению результатов тестирования между отдельными агентами сети, но и массовым перезакачкам и синхронизации исторических данных, создавая избыточный интернет-трафик. Использование агентов локальной сети и удаленных агентов допускается.

Синтетические инструменты с котировками в реальном времени #

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

Как это происходит

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

Например, вы можете создать инструмент, который будет показывать индекс доллара (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)

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

Синтетический инструмент в Обзоре рынка и его график

Создайте новый пользовательский инструмент, откройте его спецификацию и укажите формулу:

Спецификация инструмента с формулой

Расчет тиков и минутных баров синтетического инструмента начнется при его добавлении в "Обзор рынка". При этом в "Обзор рынка" сразу же автоматически добавляются все символы, необходимые для его расчета. В журнал платформы будет добавлена запись о начале расчета: Synthetic Symbol USDX: processing started.

  • Расчет синтетического инструмента прекращается при его скрытии из "Обзора рынка".
  • Символы, которые в настоящий момент используются для расчета синтетических инструментов, невозможно скрыть из "Обзора рынка".

Расчет котировок в реальном времени #

Каждые 100 мс (десять раз в секунду) проверяется, изменилась ли цена хотя бы одного из инструментов, участвующих в формуле. Если да, происходит расчет цены синтетического инструмента и генерируется тик. Расчет осуществляется параллельно в трех потоках для цен Bid, Ask и Last. Например, если в формуле указан EURUSD*GBPUSD, расчет цен синтетического инструмента будет следующим:

  • Bid — bid(EURUSD)*bid(GBPUSD)
  • Ask — ask(EURUSD)*ask(GBPUSD)
  • Last — last(EURUSD)*last(GBPUSD)

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

Построение истории минутных баров #

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

Как только трейдер добавляет синтетический инструмент в Обзор рынка, платформа проверяет, есть ли для него рассчитанная минутная история. Если нет, она будет создана для последних 60 дней — это около 50 000 баров. Если в настройках платформы в параметре макс. баров в окне указана меньшая величина, то будет использовано именно это ограничение. Если часть баров за этот период уже построена, то платформа досоздаст новые бары.

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

  • EURUSD с историей до 2009.01.01
  • USDJPY с историей до 2012.06.01
  • EURJPY с историей до 2014.06.01

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

История минутных баров синтетического инструмента рассчитываются на основе минутных баров (не тиков) инструментов, входящих в его формулу. Например, чтобы посчитать цену Open минутного бара синтетического инструмента, платформа берет цены Opеn инструментов, входящих в его формулу. Аналогично производится расчет для цен High, Low и Close.

Если для какого-либо инструмента из формулы отсутствует нужный минутный бар, платформа возьмет для расчета цену Close предыдущего бара. Например, используются три инструмента: EURUSD, USDJPY и GBPUSD. Если при расчете бара, соответствующего минуте 12:00, для инструмента USDJPY такого минутного бара не окажется при расчете будут использованы следующие цены:

  • Для Open — EURUSD Open 12:00, USDJPY Close 11:59, GBPUSD Open 12:00
  • Для High — EURUSD High 12:00, USDJPY Close 11:59, GBPUSD High 12:00
  • Для Low — EURUSD Low 12:00, USDJPY Close 11:59, GBPUSD Low 12:00
  • Для Close — EURUSD Close 12:00, USDJPY Close 11:59, GBPUSD Close 12:00

Если минутный бар отсутствует у всех инструментов из формулы, соответствующий минутный бар синтетического инструмента не будет рассчитан.

Построение новых минутных баров

Все новые бары (текущий и последующие) синтетического инструмента создаются на основе генерируемых тиков. Цена, по которой строятся бары, зависит от параметра "Построение графиков" в спецификации:

Режим построения графика синтетического инструмента

Какие операции можно использовать в формуле инструмента

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

  • Имя символа — в зависимости от того, какая цена синтетического инструмента рассчитывается, в формуле будет использована цена Bid, Ask или Last указанного инструмента. Например, если указать EURUSD*GBPUSD, то Вid будет рассчитываться как bid(EURUSD)*bid(GBPUSD), а цена Ask — как ask(EURUSD)*ask(GBPUSD).
  • bid(имя символа) — для расчета цены Bid синтетического инструмента будет принудительно использоваться цена Bid указанного символа. Фактически этот вариант соответствует предыдущему (без указания типа цены).
  • ask(имя символа) — для расчета цены Bid синтетического инструмента будет принудительно использоваться цена Ask указанного символа. Для расчета цены Ask наоборот будет использоваться цена Bid указанного инструмента. Для расчета цены Last будет использоваться цена Last указанного инструмента. Например, если указать ask(EURUSD)*GBPUSD, расчет будет следующим:
  • Вid = ask(EURUSD)*bid(GBPUSD)
  • Ask = bid(EURUSD)*ask(GBPUSD)
  • Last = last(EURUSD)*last(GBPUSD)
  • last(имя символа) — цена Last указанного символа будет использоваться при расчетах всех цен синтетического инструмента (Bid, Ask и Last). Например, если указать last(EURUSD)*GBPUSD, расчет будет следующим:
  • Вid = last(EURUSD)*bid(GBPUSD)
  • Ask = last(EURUSD)*ask(GBPUSD)
  • Last = last(EURUSD)*last(GBPUSD)
  • volume(имя символа) — в формуле будет использован объем тика указанного инструмента. Убедитесь, что информация об объемах транслируется для указанного инструмента.
  • point(имя символа) — в формулу будет подставлен размер минимального изменения цены указанного инструмента.
  • digits(имя символа) — в формулу будет подставлено количество знаков после запятой в цене указанного инструмента.

Если символ имеет сложное название (содержит дефисы, точки и т.п.), оно должно быть заключено в кавычки. Например, "RTS-6.17".

В формуле можно использовать арифметические операции: сложение (+), вычитание (-), умножение (*), деление (/) и остаток от деления (%). Например, EURUSD+GBPUSD означает, что цена рассчитываться как сумма цен EURUSD и GBPUSD. Также в формуле можно использовать унарный минус для смены знака, например: -10*EURUSD.

Для арифметических операций существует приоритет их выполнения:

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

Также в формуле можно использовать константы:

  • Числовые (целочисленные и вещественные с точкой). Например, EURUSD*2+GBPUSD*0.7.
  • Свойства символа _Digits и _Point. Они подставляют в формулу свойства пользовательского символа из спецификации. _Digits — количество знаков после запятой в цене инструмента, _Point — размер минимального изменения цены инструмента.

Также в формуле можно использовать все математические функции, поддерживаемые в MQL5, кроме MathSrand, MathRand и MathIsValidNuber:

Функция

Описание

fabs(число)

Возвращает абсолютное значение (значение по модулю) переданного ей числа.

acos(число)

Возвращает значение арккосинуса числа в радианах

asin(число)

Возвращает значение арксинуса числа в радианах

atan(число)

Возвращает арктангенс числа в радианах

ceil(число)

Возвращает ближайшее сверху целое числовое значение

cos(число)

Возвращает косинус числа

exp(число)

Возвращает экспоненту числа

floor(число)

Возвращает ближайшее снизу целое числовое значение

log(число)

Возвращает натуральный логарифм

log10(число)

Возвращает логарифм числа по основанию 10

fmax(число1, число2)

Возвращает максимальное из двух числовых значений

fmin(число1, число2)

Возвращает минимальное из двух числовых значений

fmod(делимое, делитель)

Возвращает вещественный остаток от деления двух чисел

pow(основание, степень)

Возводит основание в указанную степень

round(число)

Округляет число до ближайшего целого

sin(число)

Возвращает синус числа

sqrt(число)

Возвращает квадратный корень

tan(число)

Возвращает тангенс числа

expm1(число)

Возвращает значение выражения exp(число)-1

log1p(число)

Возвращает значение выражения log(1+число)

acosh(число)

Возвращает значение гиперболического арккосинуса

asinh(число)

Возвращает значение гиперболического арксинуса

atanh(число)

Возвращает значение гиперболического арктангенса

cosh(число)

Возвращает гиперболический косинус

sinh(число)

Возвращает гиперболический синус

tanh(число)

Возвращает гиперболический тангенс