В случае установки отложенного ордера параметрне обрабатывается. Рассмотрим некоторые особенности программного кода. Легко заметить, что формированиеторгового приказа осуществляется в блоке 6-7. В предшествующем блоке 3-4 вычисляетсяколичество лотов. Учитывается вариант, при котором выделенных свободных средствне хватит для открытия ордера даже на минимальное количество лотов.

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

  1. К моменту окончания последней итерациицикла for известны номера ордеров с максимальным количеством лотов, открытых вразных направлениях.
  2. Это значит, например, что открытие рыночного ордера осуществляется только по текущей рыночной цене и не может быть выполнено по любой другой цене.
  3. Для получения информациио причине отклонения торгового приказа необходимо использовать функцию GetLastError()(в дальнейшем изложении мы рассмотрим несколько наиболее распространённых ошибок).
  4. В последующих событиях с помощью представленного скрипта были закрыты и два другихрыночных ордера.
  5. Если же в разрыв цен попадает отложенный ордерBuyLimit или SellLimit, то соответствующий рыночный может быть открыт по цене лучшей,чем цена, заявленная в отложенном ордере.

Arrow_color – цвет стрелок модификации StopLoss и/или TakeProfit на графике. Если параметротсутствует traders union обзор или его значение равно CLR_NONE, то стрелки на графике не отображаются.

Типы и характеристики ордеров

Если запрашиваемой цены открытия не было в ценовом потоке, либо запрашиваемая цена не нормализована в соответствии с количеством знаков после десятичной точки, то будет сгенерирована ошибка 129 (ERR_INVALID_PRICE). Если запрашиваемая цена открытия сильно устарела, то независимо от значения параметра slippage будет сгенерирована ошибка 138 (ERR_REQUOTE). Если же запрашиваемая цена устарела, но еще присутствует в ценовом потоке, то ордер открывается по текущей цене и только в том случае, если текущая цена попадает в диапазон price+-slippage. При расчёте правильных цен необходимо учитывать также ограничения, накладываемые поставщиком услуг (дилинговым центром). К таким ограничениям относятся минимальная дистанция и дистанция заморозки. Сущность этих ограничений состоит в том, чтобы предоставить брокеру возможность подготовиться к исполнению новых торговых операций, будьто преобразование отложенного ордера в рыночный или закрытие ордера в результатеисполнения стоп-приказа.

Очевидно, что если в терминале есть встречные ордера, которые необходимо закрыть,то, имея ввиду экономическую выгоду, следует использовать функцию OrderCloseBy(),а не OrderClose(). Размеры встречных ордеров не обязательно должны совпадать. В случае несовпаденияразмеров ордеров торговая операция выполняется в размере меньшего объема одногоиз ордеров.

Наконец, мы вызываем функцию OrderModify(), чтобы добавить наш стоп-лосс и зафиксировать прибыль в ордере. Сначала мы проверяем, чтобы переменные BuyStopLoss или BuyTakeProfit отличались от нуля. Если мы попытаемся изменить порядок с неизменными значениями, мы получим код ошибки 1 из функции OrderModify(). Мы используем оператор if, чтобы убедиться, что тикет BuyTicket действителен, то есть больше нуля. Если это так, мы вызываем функцию OrderSelect(), используя тикет BuyTicket.

Характеристики ордеров и правила проведения торговых операций

Открытие ордера – это уже свершившеесясобытие. Соответственно, не существует и программно реализуемого способа, с помощьюкоторого можно было бы это выполнить. Единственное, что можно сделать с рыночнымордером, – это закрыть его.

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

Функция возвращает номер тикета (ticket – уникальный порядковыйномер ордера), который назначен ордеру торговым сервером или -1 в случае, еслиторговый приказ был отклонён севером или клиентским терминалом. Для получения информациио причине отклонения торгового приказа необходимо использовать функцию GetLastError()(в дальнейшем изложении мы рассмотрим несколько наиболее распространённых ошибок). Если торговая операция завершилась успешно, то оператор break в блоке 6-7 заканчиваетисполнение цикла while, что приводит к окончанию текущей итерации цикла перебораордеров for (и на следующей итерации начинается обработка очередного ордера). Еслиже торговая операция закончилась неудачей, то производится обработка ошибок. Вслучае, когда ошибка оказывается не критической, попытка повторить торговую операциюповторяется.

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