Совершение сделок
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое.
Открытие позиций #
Открытие позиции или вход в рынок — это первичная покупка или продажа определенного объема финансового инструмента. В торговой платформе это можно осуществить путем выставления рыночного ордера, в результате которого заключается сделка. Позиция также может быть открыта и при срабатывании отложенного ордера.
Выставление ордера и общие параметры #
Вызвать диалоговое окно составления ордера можно различными способами:
Рассмотрим общие параметры ордера:
Чтобы отправить ордер на покупку, нажмите кнопку Buy, для отправки ордера на продажу — кнопку Sell.
После отсылки приказа в окне будет показан результат его исполнения — успешное совершение торговой операции или отказ с описанием причины, почему она не была исполнена. Если в настройках платформы включена опция «Торговля одним кликом», то при успешном исполнении ордера окно торговли закрывается сразу без уведомления о результате исполнения.
Теперь рассмотрим особенности торговли при различных режимах исполнения. Он зависит от типа инструмента и от брокера.
Совершение сделки в режиме немедленного исполнения #
В этом режиме исполнение рыночного ордера осуществляется по цене, предложенной брокером. При отправке запроса на исполнение, платформа автоматически подставляет в ордер текущие цены. В случае, если брокер принимает цены, ордер будет исполнен.
Если за время обработки ордера цена инструмента изменилась на величину большую, чем указана в поле «Отклонение», то дилер (сервер) может не принять ордер и предложить новые цены исполнения. В таком случае в окне создания появится соответствующее сообщение:
Если вы согласны с новыми ценами, нажмите «Принять», тогда исполнение ордера произойдет по новым ценам. Если новая цена не устраивает, нажмите «Отклонить».
Новые цены будут действительны лишь несколько секунд. Если вы не примете решение за это время, в окне появится надпись «Requote», и после нажатия кнопки «ОК» вы вернетесь к исходному окну выставления ордера.
Отклонение — величина отклонения цены исполнения ордера от указанной цены, на которую согласен трейдер. Чем больше указанная величина, тем меньше вероятность получить новую цену исполнения (реквот) в ответ на запрос исполнения ордера. Если отклонение меньше или равно заданному параметру, происходит исполнение ордера по новой цене без дополнительного уведомления. В противном случае брокер возвращает новые цены, по которым может быть исполнен ордер.
Совершение сделки в режиме исполнения по запросу #
В этом режиме исполнение рыночного ордера осуществляется по цене, предварительно полученной от брокера. Перед отправкой рыночного ордера у брокера запрашиваются цены его исполнения. После их получения выполнение ордера по данной цене можно либо подтвердить, либо отклонить.
Параметры ордера могут быть изменены только до того, как были запрошены цены. После того, как был выполнен запрос, трейдер может только произвести выставление ордера с заранее выставленными параметрами.
Для получения цен нажмите кнопку «Запрос». После этого в окне появятся кнопки покупки («Buy») и продажи («Sell»). Предложенные после запроса котировки будут действительны всего несколько секунд. Если в течение этого времени вы не примете решение, кнопки «Buy» и «Sell» будут снова скрыты.
Совершение сделки в режиме исполнения по рынку #
В этом режиме исполнения рыночного ордера решение о цене исполнения принимает брокер без дополнительного согласования с трейдером. Отправка рыночного ордера в таком режиме подразумевает досрочное согласие с ценой, по которой он будет выполнен.
В параметре «Заполнение» трейдер может указать дополнительные правила исполнения ордера: «Все/Ничего» или «Все/Частично». Если данное поле неактивно, значит, возможность выбора заблокирована на сервере.
По нажатии кнопки «Sell by Market» или «Buy by Market» будет создан приказ брокеру на исполнение сделки по продаже или покупке, соответственно, по цене, определенной брокером.
Совершение сделки в режиме биржевого исполнения #
В параметре Заполнение трейдер может указать дополнительные правила исполнения ордера: «Все/Ничего» или «Все/Частично». Если данное поле неактивно, значит возможность выбора заблокирована на сервере.
При нажатии кнопки «Sell» или «Buy» будет создан приказ брокеру на исполнение сделки по продаже или покупке, соответственно.
Дополнительную информацию о торговле в режиме биржевого исполнения можно узнать в разделе «Стакан цен».
Управление позициями #
Важным аспектом торговли на финансовых рынках является грамотное управление позициями на счете. В торговой платформе есть все необходимое для этого.
Где отображаются текущие открытые позиции #
Список текущих открытых позиций отображается в окне «Инструменты» на вкладке «Торговля».
Список открытых позциий:
Список выставленных отложенных ордеров:
Состояние торгового счета:
Строка состояния счета подсвечивается красным цветом, если счет находится в состоянии Margin Call или Stop Out.
Здесь отображаются все параметры позиций: финансовый инструмент, тип, объем, текущая прибыли/убыток, а также другие параметры. Помимо этого, показывается текущее состояние торгового счета и общий финансовый итог по всем открытым позициям.
Суммарную информацию о состоянии активов по всем открытым позициям можно посмотреть на вкладке «Активы».
Название валюты или финансового инструмента.
Установка отложенных ордеров в MetaTrader 5
Установка отложенных ордеров в MetaTrader 5 MetaTrader 5 — та платформа, в которой собраны все возможности для успешного трейдинга. Это множество встроенных аналитических инструментов, тысячи дополнительных обновлений и несколько режимов исполнения ордеров для создания гибкой системы торговли. Настоящая статья познакомит с особенностями работы отложенных ордеров.
Ордер — любая торговая операция, выполненная по приказу трейдера. Достаточно удобным вариантом считаются отложенные ордера, которые позволяют осуществлять сделки при наступлении наиболее благоприятных условий. Причём брокер выполнит операцию даже при выключенном терминале. В платформе представлено шесть их видов.
Создание ордеров Buy Limit и Sell Limit, которые называются лимитными, основывается на предположении, что цена биржевого инструмента пройдёт свой максимальный или минимальный пик и сменит направление движения. Исполнение происходит по цене, не хуже указанной в ордере. При этом существует риск, что ордер так и не будет исполнен из-за несоблюдения условий. В случае сильного разрыва в уровнях реальной и указанной цен брокер вправе отклонить заявку.
Buy Stop и Sell Stop именуются стоп-ордерами и рассчитаны на то, что цена сохранит направление движения. Цена, обозначенная в ордере, будет лучше или равна цене исполнения. Такие сделки гарантированно совершаются. Возможно проскальзывание при условии, что котировка сыграет против трейдера.
Buy Stop Limit и Sell Stop Limit — это сочетание лимитных и стоп-ордеров. Когда цена на финансовый инструмент совпадает с обозначенным стоп-уровнем, автоматически отдаётся приказ на создание лимитного ордера. Такие заявки формируются с целью ограничения проскальзывания.
Для создания отложенных ордеров можно использовать несколько возможных вариантов:
После одного из перечисленных действий будет открыто диалоговое окно, где в типе ордера нужно выбрать «Отложенный». Также необходимо указать символ, по которому ожидается выполнение его действия. Далее заполняются остальные поля — вид ордера, объём исполнения, цена срабатывания. Здесь необходимо выставить уровень стоп-лосса, срок истечения действия ордера, цену Stop Limit и при необходимости тейк-профит. Есть возможность оставить краткий, до 31 символа, комментарий.
В случае неверного указания данных по ордеру кнопка «Установить» останется неактивной. При блокировке сервером возможности обозначения срока действия ордера поля «Истечение» и «Исполнение» тоже не будут активны.
Возможно создание отложенного ордера сразу на графике. Для этого необходимо вызвать контекстное меню, установив на требуемом уровне цены курсор мышки. Если выбранный уровень котировок будет выше текущего на рынке, программа предложит к выбору Sell Limit и Buy Stop, если ниже — то Buy Limit и Sell Stop.
После выполнения приказа на создание ордера откроется окно установки, в котором можно уточнить детали операции. Если трейдер использует возможность торговли в один клик, заявка будет создана сразу без уточнения дополнительных данных.
В ходе торговли может потребоваться изменить условия созданных отложенных ордеров. Один из способов — выбор пункта «Изменить и удалить» во вкладке «Торговля» контекстного меню. Откроется окно, где возможна смена данных во всех полях, кроме объёма, условий исполнения и комментария. Для сохранения новой информации нужно нажать кнопку «Изменить», которая будет неактивной в случае некорректного заполнения полей.
Второй вариант — внесение изменений на графике, используя мышь. Это становится возможным только при включённой функции «Показывать торговые уровни». Можно модифицировать отдельно стоп-лосс и тейк-профит, а также цену ордера и стоп-уровни:
После изменения уровней откроется модификационное окно для уточнения деталей. В случае торговли в один клик этого не произойдёт — изменения вступят в силу автоматически.
Ещё один способ — смена данных с помощью контекстного меню ордера на графике. Здесь можно выполнить следующие действия:
«Изменить» — вызов окна для модификации;
«Удалить» — открытие окна для удаления ордера; при торговле в один клик — непосредственное удаление ордера сразу;
«Трейлинг стоп» — открытие меню, позволяющего выбрать уровни трейлинг стопа.
В случае потери актуальности ордера он подлежит удалению. Для этого можно осуществить вызов окна модификации и нажать кнопку «Удалить» или убрать его на самом графике с помощью контекстного меню. При наступлении срока, указанного в «Истечении», ордер удаляется автоматически. Во вкладке «История» панели «Инструменты» такие ордера будут отображаться как отменённые.
Гибкость торговли и умение вовремя подстроиться под изменение рынка — залог успеха в деятельности трейдера. В этом поможет использование в MetaTrader отложенных ордеров, которые позволяют выстраивать слаженную стратегию работы и минимизировать проскальзывания.
Ордерa, позиции и сделки в MetaTrader 5
Торговые термины
Конечной целью трейдера является извлечение прибыли посредством торговых операций на финансовых рынках. В этой статье дается описание терминов и процессов торговой платформы MetaTarder 5, знание которых необходимо для правильного понимания работы торговых функций языка MQL5.
Действующие (отложенные) ордера, которые находятся в ожидании условий их исполнения или отмены, показываются в терминале в закладке «Торговля». Эти ордера можно модифицировать или отменять. Постановка, отмена и модификация ордеров производится с помощью функции OrderSend(). Если ордер был отменен или истекло время его действия, или ордер был исполнен, то он перемещается в историю ордеров. Исполненные и отмененные ордера показываются в терминале в закладке «История». Ордера из истории недоступны для модификации.
Сделки — результат выполнения ордера (приказа на совершение торговой операции). Каждая сделка базируется на одном конкретном ордере, но один ордер может порождать множество сделок. Например, приказ на покупку 10 лотов может быть исполнен посредством нескольких последовательных сделок при частичном исполнении. Сделки всегда находятся в истории торговли и не могут модифицироваться. В терминале сделки отображаются в закладке «История».

Объем позиции может увеличиваться в результате новой торговой операции в том же направлении. То есть объем длинной позиции будет увеличен после новой покупки (операции Buy) и уменьшится после продажи (операции Sell). Позиция считается закрытой, если в результате торговой операции объем обязательств стал равен нулю. Такая операция называется закрытием позиции.
Как терминал получает и хранит торговую информацию с сервера
Терминал хранит торговую историю в специальной собственной базе и получает только недостающую историю сделок и отработавших ордеров на торговом счете при каждом подключении к торговому серверу. Это сделано с целью экономии трафика. При закрытии клиентского терминала MetaTrader 5 или смене текущего активного счета вся история записывается на жесткий диск и считывается с него при следующем запуске терминала.
Все базы записываются на диск в зашифрованном виде, ключ шифра жестко привязан к компьютеру, на котором установлен терминал. Это защищает пользователя терминала от несанкционированного доступа к его данным в случае их копирования.
При подключении к счету терминал загружает сохраненную базу с историей счета и посылает торговому серверу запрос на синхронизацию собственной базы истории с историей данного счета на торговом сервере. В дальнейшем после удачного подключения к счету торговый сервер отсылает терминалу сообщения о происходящих торговых событиях, относящихся к этому счету.
Торговыми событиями считаются следующие изменения на счете:
При потере подключения к торговому серверу терминал периодически предпринимает попытки восстановить связь. После восстановления соединения с сервером терминал запрашивает все последние изменения в торговой истории для поддержания целостности данных в собственной базе истории.
Торговая история, показываемая терминалом в закладке «История», берется из базы истории терминала, и изменения периода показываемой в терминале истории могут только увеличивать диапазон истории, хранящейся в этой базе. Уменьшение периода отображаемой истории не приводит к физическому удалению истории из базы терминала.
Это означает, что установка более короткого интервала отображаемой истории не ведет к уменьшению глубины хранимой торговой истории. Но если указывается более широкий интервал для отображения в закладке «История», то такое действие может привести к запросу у торгового сервера дополнительной глубокой истории, если в собственной базе терминала запрашиваемых данных на этот период еще нет.
Общая схема взаимодействия терминала и торгового сервера MetaTrader 5 представлена на рисунке.
Клиентский терминал посылает запросы на синхронизацию собственной базы торговой истории при включении терминала, при восстановлении связи с сервером после сбоя подключения, при переключении с одного счета на другой, при непосредственном запросе недостающей торговой истории.
В свою очередь, торговый сервер самостоятельно без запросов от терминала посылает клиенту сообщения о торговых событиях, происходящих на счете: изменение состояния ордеров и позиций, проведение сделок на основании ордеров, начисление комиссий, ввод и вывод средств и так далее.
Доступ к торговой истории из MQL5-программы
В терминале может работать одновременно множество индикаторов, скриптов и экспертов, и все эти программы могут запрашивать необходимую им информацию о торговле: ордерах, сделках и позициях. Прямая работа из mql5-программы с базой данных терминала исключена из соображений общей стабильности, безопасности и производительности.
Аналогично организована работа с позициями, сделками и ордерами из истории. Общая схема получения торговой информации из программы на MQL5 представлена на рисунке.
Прежде чем данные о торговой истории будут доступны для обработки из mql5-программы, они должны быть запрошены из базы данных терминала. После запроса полученные данные будут помещены в собственный кэш mql5-программы.
Возможные последствия при неправильном использовании кэша:
Функции для работы с кэшем
Для каждого вида информации формируется независимый кэш. Данные об ордерах хранятся в кэше ордеров, данные о позициях хранятся в кэше позиций, данные о сделках и отработанных ордерах хранятся в соответствующих им экземплярах кэша истории.
Прежде чем обратиться за информацией из кэша, необходимо его заполнить.
Торговые функции можно разделить на две категории: функции заполнения кэша и функции получения информации из кэша.
Функции заполнения кэша
Для обработки торговой истории ее нужно предварительно получить и разместить в соответствующем кэше. Функции, которые формируют кэш, можно разделить на две подгруппы.
Функция заполнения кэша торговли (действующие ордера и позиции):
Функция заполнения кэша истории:
Отдельно стоит рассмотреть две функции, которые затрагивают доступную в кэше торговую историю в целом:
OrderSelect и OrderGetTicket
PositionSelect и PositionGetSymbol
HistoryOrderSelect( ticket ) выбирает в кэш исторический ордер из базы терминала по его тикету. Функция предназначена для использования в случае, когда заранее известен тикет нужного ордера.
При успешном выполнении кэш будет содержать один единственный ордер и функция HistoryOrdersTotal() вернет единицу. В противном случае кэш исторических ордеров будет пуст и функция HistoryOrdersTotal() вернет ноль.
HistoryDealSelect( ticket ) выбирает в кэш сделку из базы терминала по ее тикету. Функция предназначена для использования в случае, когда заранее известен тикет сделки.
При успешном выполнении кэш будет содержать одну сделку и функция HistoryDealsTotal() вернет единицу. В противном случае кэш сделок будет пуст и функция HistoryDealsTotal() вернет ноль.
Функции получения информации из кэша
Для получения информации о позиции ее необходимо предварительно выбрать и скопировать в кэш с помощью одной из двух функций: PositionGetSymbol или PositionSelect. Именно из кэша будут выдаваться значения свойств позиции при вызове соответствующих функций:
Тикет исторического ордера можно узнать функцией HistoryOrderGetTicket( index ) по его номеру в кэше исторических ордеров. Для гарантированного получения свежих данных об ордере рекомендуется вызывать функции заполнения кэша исторических ордеров.
Тикет сделки можно узнать функцией HistoryDealGetTicket( index ) по ее номеру в кэше сделок. Для гарантированного получения свежих данных о сделке рекомендуется вызывать функции заполнения кэша сделок.
Функции получения тикета из кеша истории
HistoryOrderGetTicket( index ) возвращает тикет исторического ордера по его номеру из кэша исторических ордеров (не из базы терминала!). Полученный тикет можно использовать в функции HistoryOrderSelect( ticket ), которая очистит кеш и заново заполнит его только одним ордером в случае успеха. Напомним, что возвращаемое из HistoryOrdersTotal() значение зависит от количества ордеров в кеше.
HistoryDealGetTicket( index ) возвращает тикет сделки по ее номеру из кэша сделок. Тикет сделки можно использовать в функции HistoryDealSelect( ticket ), которая очистит кеш и заново заполнит кеш только одной сделкой в случае успеха. Возвращаемое функцией HistoryDealsTotal() значение зависит от количества сделок в кеше.
Получение информации по действующим ордерам
Проверка текущих действующих ордеров является стандартной процедурой. Если требуется получить информацию о каком-то конкретном ордере, то зная его тикет, это можно сделать с помощью функции OrderSelect( ticket ).
В приведенном примере предполагается, что тикет ордера известен заранее, например, получен из глобальной переменной. В общем же случае информации о тикетах нет и тут поможет функция OrderGetTicket( index ), которая также выбирает один ордер и заносит его в кэш, но в качестве параметра требуется указать только номер ордера в списке текущих ордеров.
Общий алгоритм работы с ордерами (со сделками и позициями то же самое) следующий:
Получение информации по открытым позициям
Постоянное отслеживание открытых позиций является не только стандартной процедурой, но и безусловно должно быть реализовано в каждом эксперте. Для получения информации по конкретной позиции достаточно знать имя инструмента, по которому она открыта. Используйте для этого функцию PositionSelect(symbol ). Для тех случаев, когда советник работает только на одном символе (на символе графика, к которому он прикреплен), имя символа можно получить функцией Symbol() или из предопределенной переменной _Symbol.
В общем случае информацию о символе можно получить функцией PositionGetSymbol( index ), которая выбирает одну позицию и заносит ее в кэш. В качестве параметра необходимо указать номер позиции в списке открытых позиций. Лучше всего это сделать через перебор всех позиций в цикле.
Общий алгоритм работы с позициями :
Пример подобного алгоритма:
Правила работы с кэшем истории
Попытка обрабатывать всю торговую историю в большинстве случаев является неправильной. Когда количество обрабатываемых сделок/ордеров становится равным тысячам и десяткам тысяч, работа программы резко замедляется.
Для простой работы советника или индикатора в онлайне это также актуально. Неоптимальный код программы способен парализовать работу даже самого мощного компьютера.
Правильный алгоритм работы с торговой историей:
Пример кода по такому алгоритму:
Если торговая история не изменилась, то не требуется загружать заново в кеш торговую историю и расходовать ресурсы процессора. Это логично и не требует объяснений. Если же торговая история изменилась, то загружаем только необходимую ее часть и проходим по каждой сделке/ордеру только один раз. Избегаем повторные ненужные циклы.
Примеры правильной и неправильной работы с торговой историей приложены к статье в файлах WrongWorkWithHistory.mq5 и RightWorkWithHistory.mq5.
Получение информации по ордерам из истории
Работа с историческими ордерами почти ничем не отличается от работы с действующими ордерами за одним только исключением. Если количество действующих ордеров в кэше mql5-программе не может быть больше одного, то результат HistoryOrdersTotal() и количество исторических ордеров в кэше зависит от того, какой объем торговой истории был загружен функцией HistorySelect(start, end), HistorySelectByPosition() или HistoryOrderSelect().
Для примера приведен скрипт, который ищет последний ордер за последний день и выводит по нему информацию.
В более общих случаях требуется перебрать в цикле ордера из кеша и произвести по ним анализ. Общий алгоритм будет такой:
Пример подобного алгоритма:
Получение информации по сделкам из истории
Обработка сделок имеет те же самые особенности, что и работа с историческими ордерами. Количество сделок в торговой истории и результат выполнения HistoryDealsTotal() зависит от того, какой объем торговой истории был загружен в кэш функцией HistorySelect(start, end) или HistorySelectByPosition().
Для заполнения кэша только одной сделкой по ее тикету служит функция HistoryDealSelect( ticket ).
В более общих случаях требуется перебрать в цикле сделки из кеша и произвести по ним анализ. Общий алгоритм будет такой:
Пример подобного алгоритма для подсчета прибылей и убытков:
Получение в кэш истории по идентификатору позиции ( POSITION_IDENTIFIER )
Функция HistorySelectByPosition(position_ID) служит для того, чтобы избавить программиста от необходимости самостоятельно писать код для перебора всей торговой истории в поисках такой информации. Типичный алгоритм работы с этой функцией:
Заключение
Вся торговая подсистема платформы MetaTrader 5 хорошо продумана и проста для понимания. При этом обилие торговых функций позволяет решать каждую конкретную задачу наиболее эффективным образом.
Но даже несмотря на то, что специализированные торговые классы из Стандартной библиотеки позволяют не задумываться о многих тонкостях и писать программы на высоком уровне, не вдаваясь в реализацию, понимание основ позволит создавать более надежные и эффективные торговые эксперты.
Все приведенные примеры можно найти в прикрепленных к статье файлах.
















