Продвинутое размещение ордеров и управление ордерами в MQL4

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

Функция возвращает TRUE при успешном исполненииторговой операции. Возвращает FALSE при неудачном завершении торговой операции. Торговые приказы для закрытия рыночных ордеров формируются с альпари форекс отзывы помощью функции OrderClose().

Программы для удаления приказов

Нужно заметить, что такая конструкция тоже не спасает от возможного конфликта,т.к. Ордер может пропасть (быть закрытым) в процессе обработки его параметров.Однако такое решение оказывается наиболее эффективным в случае, если на момент выбора ордера его уже нет. В теле оператора if выполняется анализ параметроввыбранного ордера. При исполнении, например, функций OrderOpenPrice(), OrderTicket(),OrderType() и других подобных каждая из них будет возвращать значение некоторойхарактеристики ордера, выбранного в результате исполнения функции OrderSelect().

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

Очевидно, что прибыль по первому ордеру составляет 108 пунктов, а по второму 8.Несмотря на то, что первый ордер открыт на меньшее количество лотов, прибыль унего больше, чем у второго, а именно, у первого $540, а у второго $80. На первыйвзгляд может показаться, что сначала нужно закрыть первый ордер, т.к. Для принятия правильного решениянеобходимо рассмотреть возможный сценарий развития событий. Указанное правило является всеобщим для всех участников рынка и не может быть изменено по воле разработчиков торговой платформы или на основе договорённости между брокером и трейдером. Это значит, например, что открытие рыночного ордера осуществляется только по текущей рыночной цене и не может быть выполнено по любой другой цене. Порядок расчёта правильных цен для различных торговых операций рассматривается ниже.

Задать размер лота можно так же просто, как объявить внешнюю переменную или использовать фиксированный размера лота для каждого ордера. Мы рассмотрим более сложный метод, который вычисляет размер лота на основе максимальной суммы, которую вы готовы потерять за сделку. Сначала мы получаем информацию об ордере, используя OrderSelect(). Таким образом, мы можем передать неизменный стоп-лосс и зафиксировать цены в функции OrderModify().

Закрытие и удаление ордеров

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

Затем мы рассчитываем уровень стопа и цены верхнего и нижнего уровня стопа. Затем мы рассчитываем наш стоп-лосс и тейк-профит, проверяем их и, наконец, модифицируем ордер с помощью OrderModify(). Уровень стопа — это количество пунктов от текущей цены Bid или Ask, на которое могут быть выставлены стопы и отложенные ордера. Для большинства брокеров уровень стопа составляет примерно 3-4 пункта. У ECN-брокеров обычно очень узкие уровни стопов, в то время как у других брокеров, таких как Alpari, более широкие уровни стопов (не менее 8 пунктов). Стоп-лосс, тейк-профит и цены отложенного ордера должны находиться на минимальном расстоянии от цен Bid и Ask.

Bid – меньшая из цен в двухсторонней котировке по финансовому инструменту, предлагаемаяброкером. StringConcatenate() — это MQL-функция, которая позволяет создавать сложные строки с использованием переменных и констант. Каждый строковый элемент, который должен быть соединен вместе, разделен запятой. Попробуйте ввести приведенные выше примеры в MetaEditor, чтобы просмотреть его с подсветкой синтаксиса. Мы проверяем возможные ошибки, проверяя вывод таких функций, как OrderSend(), OrderModify() и OrderClose().

Если цена стоп-лосс или тейк-профит недействительна, мы автоматически настроим ее так, чтобы она находилась в нескольких пунктах за пределами уровня стопа. Функцию OrderModify() также можно использовать для изменения цены отложенного ордера. Если цена отложенного ордера уже была достигнута и ордер был исполнен, он больше не является отложенным ордером и его нельзя изменить. Если мы не изменяем определенный параметр, мы должны передать исходное значение в функцию OrderModify(). Например, если мы изменяем только стоп-лосс для отложенного ордера, мы должны извлечь текущую цену ордера и тейк-профит с помощью OrderSelect() и передать эти значения в функцию OrderModify(). Теперь необходимонайти ордер (и определить его характеристики), который расположен ближе другихк этому месту.

Если цена стоп-ордера или отложенного ордера слишком близка к текущей цене, возникнет ошибка, и ордер не будет размещен. Это одна из самых распространенных ошибок, и ее легко можно предотвратить, если трейдер будет устанавливать свои стопы и отложенные ордера на достаточном расстоянии от цены. Функция возвращает значение заявленной цены закрытия позиции при достижении уровняприбыльности (take profit) для текущего выбранного ордера.

Торговые функции

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

Для OrderModify() мы указываем тикет ордера, новую цену, сохраненную в NewPendingPrice, и неизменные значения стоп-лосса и тейк-профита, представленные OrderStopLoss() и OrderTakeProfit(). Мы используем оператор if, чтобы убедиться, что номер BuyTicket действителен, то есть больше нуля. Если это так, мы вызываем функцию OrderSelect(), используя BuyTicket. Мы извлекаем цену открытия для ордера, используя OrderOpenPrice(), и назначаем ее переменной OpenPrice.

Проверка размера лота

Если наша цена Ask составляет 1,4650, а StopLevel равен 0,0003 пункта, как рассчитано выше, минимальная цена уровня стопа будет 1,4653. Если мы размещаем тейк-профит на покупку с этим ордером, то он должен быть выше этой цены. Следующий код рассчитывает минимально допустимую цену для тейк-профита на покупку, стоп-лосс на продажу, стоп-ордер на покупку или лимитный ордер на продажу. Мы будем использовать значение StopLevel, которое мы рассчитали выше. Обратите внимание, что мы используем предопределенную переменную Point вместо функции PipPoint(), которую мы создали ранее. Это потому, что нам нужно умножить уровень стопа на фактическое значение Point.

Функция OrderProfit()

Функция возвращает общее количество открытых и отложенных ордеров. Отложенные ордера устанавливаются ниже или выше текущей цены. Рыночный ордер Sell со стоп-приказами, максимально приближенными к рыночной цене. Двухсторонняя котировка – связанная пара рыночных цен, предлагаемых брокером для осуществления покупки и продажиактивов по финансовому инструменту в текущий момент. Прежде всего, необходимо указать на принцип, используемый брокерскими компаниямидля формирования цен по финансовым инструментам.

Вашият коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *