06.03.2023

Создаем Советник, торгующий отложенными ордерами MQL4

Оператор for используется для циклического прохождения через блок кода заданное количество раз. Мы объявляем целочисленную переменную для использования в качестве счетчика и присваиваем ей начальное значение. Далее мы указываем условие, которое заставит цикл работать. Мы также указываем выражение, с помощью которого увеличивается значение счетчика. Функция OrderSend() идентична нашему более раннему примеру, за исключением того, что мы используем значение 0 для параметров стоп-лосса и тейк-профита.

  • Нам необходимо создать две переменные для хранения первого (ближайшего) значения индикатора (zz1) и следующего за ним (zz2), на котором и будет выставляться отложка.
  • Если стоп-лосс текущего ордера равен 0 (без стоп-лосса), то при условии выполнения остальных условий трейлинг-стоп будет размещен.
  • При превышении этого лимита новый ордер открыт не будет (отложенный ордер не будет установлен), и торговый сервер вернет ошибку 148 (ERR_TRADE_TOO_MANY_ORDERS).
  • В этом случае мы сделаем паузу на 3 секунды и обновим данные переменных.
  • Эта проверка полезна для того случая, если ранее установленный (другой программой или вручную) стоп-приказ находился близко к нулевой цене, например, на 1 пункт выше нуля.

Все другие функции не формируют торговых приказов, но их применение очень часто бывает востребованным. Например, в ряде случаев ордера требуется закрыть в порядке некоторого приоритета. Для этого в программе необходимо проанализировать характеристики каждого из ордеров, а именно, - тип ордера, количество лотов, положение стоп-приказов и т.д. Рассмотрим некоторые функции, позволяющие получить информацию об ордере. Здесь необходимо отметить недостаток подобных небольших программ - как скриптов, так и экспертов. Представленная программа modifyorderprice.mq4 очень ограничена в выборе действий.

Рыночный ордер

На графике не отражена история цены по Ask, но она подразумевается и может быть легко посчитана для любого момента времени. Как и для рыночного ордера тут используется торговая функция OrderSend. Рассмотрим небольшое отличие в ее заполнение для нашего случая. Для того, чтобы мы вообще смогли рассматривать возможность открытия ордера, нам нужно знать, что значение Зиг Зига для обоих переменных больше нуля, а также функция OrderExist() вернет результат false.

Для этого переменным Hedg_Buy и Hedg_Sell присваивается значение -1. Алгоритм блока обработки ордеров в целом сохранён (см. код closeby.mq4). В цикле перебора ордеров for, а именно в блоке 3-4, так же, как и в предыдущих программах, производится отсев "не наших" ордеров, в данном случае - открытых по другому финансовому инструменту, а также отложенных ордеров. Если код ошибки не обрабатывается в первом операторе switch, то эта ошибка считается непреодолимой. В этом случае управление передаётся второму оператору switch, смысл исполнения которого сводится к информированию пользователя о возникновении той или иной критической ошибки.

Может использоваться как определяемый пользователем идентификатор ордера. В некоторых случаях это - единственная информация, по которой можно судить о принадлежности ордера к той или иной открывшей его программе. Параметр устанавливается пользователем, может совпадать или не совпадать со значением этого же параметра других ордеров. Результат встречного закрытия ордеров с помощью функции OrderCloseBy().

  • В дальнейшем исполняется оператор break, прерывающий исполнение цикла while.
  • В то же время, стоимость 1 пункта в валюте депозита по финансовому инструменту не зависит от предоставленного плеча.
  • При успешном изменении отложенного ордера в окне "Терминал — Торговля" произойдет изменение значений соответствующих полей.
  • Если произошла ошибка, возвращаемое значение будет ложным.
  • Торговые приказы для удаления отложенных ордеров формируются с помощью функции OrderDelete( ).

Ордер исполнится (преобразуется в рыночный ордер Sell), если цена Bid достигнет или окажется ниже цены, заявленной в ордере. BuyStop - отложенный ордер на покупку активов по финансовому инструменту по цене, превышающей текущую цену. Ордер що таке forex исполнится (преобразуется в рыночный ордер Buy), если цена Ask достигнет или окажется выше цены, заявленной в ордере. SellLimit - отложенный ордер на продажу активов по финансовому инструменту по цене, превышающей текущую цену.

Закрытие рыночных ордеров

Поскольку пул ордеров содержит все открытые ордера, в том числе размещенные другими советниками, нам необходимо определить, какие ордера были выставлены нашим советником. Сначала мы проверяем OrderSymbol() выбранного порядка и проверяем, соответствует ли он аргументу argSymbol. В примере, который вы увидите, мы установим стоп-лосс и тейк-профит для каждого открытого ордера. Мы будем использовать переменную NewPendingPrice для представления новой цены ордера.

Выставление отложенных ордеров

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

Сообщения, полученные при исполнении скрипта closeby.mq4. Размеры встречных ордеров не обязательно должны совпадать. В случае несовпадения размеров ордеров торговая операция выполняется в размере меньшего объема одного из ордеров. Функция удаляет основные ошибки начинающих трейдеров на форекс ранее установленный отложенный ордер. Сообщения, полученные в результате успешного исполнения скрипта closeorder.mq4. Практический результат, полученный после запуска скрипта в заданных условиях (см. рис. 90 и 91), представлен ниже.

0 Программируем простой MQL4 советник по системе «Монетка»

Нулевое значение означает, что стоп-лосс или тейк-профит не размещаются вместе с ордером. Затем мы используем функцию OrderSelect(), чтобы получить информацию о только что размещенном ордере. Мы будем использовать функции OrderOpenPrice(), OrderTakeProfit(), OrderStopLoss() и опционально функции OrderExpiration() при передаче значений в функцию OrderModify(). Наконец, мы будем использовать функцию OrderModify(), чтобы добавить стоп-лосс и тейк-профит.

Удаляет все отложенные ордера

Предположим, что при первом исполнении (на быстром рынке) это значение установлено на сервере равным 20 пунктов. При составлении программ очень важно также учитывать принцип формирования свободных средств. Cвободные средства - эта та сумма денежных средств, которая остаётся свободной для совершения торговых операций. Тип операций может быть указан в виде предопределённой константы или её значения и в соответствии с типом торговой операции. (обратите внимание, здесь и далее для справки представляется заголовок функции, а не пример использования вызова функции в программе). События, произошедшие при исполнении скрипта closeby.mq4.

Блок 6-10 представляет обработку ошибок, он полностью аналогичен рассмотренным ранее (в этом и предыдущем параграфах). Формирование торгового приказа для встречного закрытия ордеров осуществляется в блоке 7-8 с помощью функции OrderCloseBy(). В случае неудачи, в зависимости от кода ошибки, управление передаётся либо на повторение попытки исполнения торговой операции (для тех же тикетов) либо оператору return, в результате чего скрипт заканчивает работу. Ошибка 145 может возникнуть в том случае, если отложенный ордер (в общем случае и стоп-приказ рыночного ордера) находится слишком близко к рыночной цене. Эта ошибка не возникает, если торговля ведётся на спокойном рынке в размеренном темпе. Если же на рынке происходят резкие изменения цены, брокер может решить, что некоторый ордер в ближайшее время будет открыт, и не позволит его удалить (или модифицировать).

Разумные ограничения

Если OrderOpenPrice () не равен OrderStopLoss(), то мы можем продолжить. Давайте улучшим наш трейлинг-стоп, добавив минимальный уровень прибыли. В приведенном выше примере трейлинг-стоп сработает сразу.

Аналогичная ситуация (недополучение прибыли по ордеру) может сложиться и для ордера SellStop в случае, если цена скачкообразно понижается. Если же в разрыв цен попадает отложенный ордер BuyLimit или SellLimit, то соответствующий рыночный может быть открыт по цене лучшей, чем цена, заявленная в отложенном ордере. В рассмотренном примере все ордера были установлены с нулевыми стоп-приказами (что означает их отсутствие).

ТОРГОВІ МАРКИ ALUMETA

ТОВ "БРАЗ" - це інноваційне направлення замкнутого циклу з виробництва алюмінієвих виробів, яке входить до складу груп компаній ALUMETA Group.
Braz Construction - інжинірингове направлення, яке розробляє комплексні та високотехнологічні фасадні рішення для офісних і житлових просторів різної складності і конфігурації.
Компанія Braz Line - лідер на українському ринку в сегменті проектування, виробництва і дистрибуції виробів з алюмінієвого профілю, будівельних інструментів, декору та інших виробів.