Дилемма с limit ордерами

 

Доброго времени суток!


Согласно документации MQL5, мы можем послать либо market, либо limit order в нескольких вариантах:

  • BUY STOP, SELL STOP — покупка или продажа при пробитии указанного уровня (хуже текущей цены);
  • BUY LIMIT, SELL LIMIT — покупка или продажа при достижении указанного уровня (лучше текущей цены);
  • BUY STOP LIMIT, SELL STOP LIMIT — установка ордера BUY LIMIT или SELL LIMIT при достижении указанной цены.

Допустим, есть абстрактный инструмент XXXYYY, текущий ask на который = 1.123, при этом нас устроило бы купить его и дороже, например, по цене 1.133. Слать market ордер в данном случае опасно, т.к. результат непредсказуем (очень вероятно, что итоговая цена будет намного хуже). Как правильно задать limit ордер в таком случае? Попытка сделать BUY_LIMIT будет отклонена, т.к. мы хотим цену, которая хуже текущей цены. Некорректно и делать BUY_STOP, так как нам надо сейчас исполнять, пока цена хорошая, а не когда она там станет хуже. BUY_STOP_LIMIT тут тоже не поможет. Как тогда лучше поступать?

P.S. Market ордер - это в данном случае TRADE_ACTION_DEAL и ORDER_TYPE_BUY, причём deviation в реквесте задаётся, но, видимо, брокер может игнорить этот параметр.

 
eternal_ego:

Доброго времени суток!


Согласно документации MQL5, мы можем послать либо market, либо limit order в нескольких вариантах:

  • BUY STOP, SELL STOP — покупка или продажа при пробитии указанного уровня (хуже текущей цены);
  • BUY LIMIT, SELL LIMIT — покупка или продажа при достижении указанного уровня (лучше текущей цены);
  • BUY STOP LIMIT, SELL STOP LIMIT — установка ордера BUY LIMIT или SELL LIMIT при достижении указанной цены.
Допустим, есть абстрактный инструмент XXXYYY, текущий ask на который = 1.123, при этом нас устроило бы купить его и дороже, например, по цене 1.133. Слать market ордер в данном случае опасно, т.к. результат непредсказуем (очень вероятно, что итоговая цена будет намного хуже). Как правильно задать limit ордер в таком случае? Попытка сделать BUY_LIMIT будет отклонена, т.к. мы хотим цену, которая хуже текущей цены. Некорректно и делать BUY_STOP, так как нам надо сейчас исполнять, пока цена хорошая, а не когда она там станет хуже. BUY_STOP_LIMIT тут тоже не поможет. Как тогда лучше поступать?

Что мешает сейчас послать приказ на открытие по рынку? Ведь вас устраивает проскальзывание на разницу между 1.123 и 1.133. Установите в торговом приказе эту величину проскальзывания (для пятизначных котировок это аж 1000 пунктов, для четырёхзначных - 100) и отсылайте приказ. Ордер будет исполнен при ухудшении или улучшении цены не более, чем на заданное количество пунктов проскальзывания. А может и сразу исполниться - по текущей цене.

 
Artyom Trishkin:

Что мешает сейчас послать приказ на открытие по рынку? Ведь вас устраивает проскальзывание на разницу между 1.123 и 1.133. Установите в торговом приказе эту величину проскальзывания (для пятизначных котировок это аж 1000 пунктов, для четырёхзначных - 100) и отсылайте приказ. Ордер будет исполнен при ухудшении или улучшении цены не более, чем на заданное количество пунктов проскальзывания. А может и сразу исполниться - по текущей цене.

Забыл уточнить (дописал в посте сейчас), что проскальзывание (в виде поля deviation) задаётся для рыночного ордера, но не срабатывает. Конкретный пример - была попытка купить газ, рыночная цена была 2.1880, достаточно было купить с проскальзыванием до 86 пунктов, но выполнилось в итоге по цене 2.2087

Точнее, может, оно-то и сработало на самом деле, просто произошёл скачок цен, и deviation был уже не от того значения, что видел скрипт советника.

 
eternal_ego:

Забыл уточнить (дописал в посте сейчас), что проскальзывание (в виде поля deviation) задаётся для рыночного ордера, но не срабатывает. Конкретный пример - была попытка купить газ, рыночная цена была 2.1880, достаточно было купить с проскальзыванием до 86 пунктов, но выполнилось в итоге по цене 2.2087

Точнее, может, оно-то и сработало на самом деле, просто произошёл скачок цен, и deviation был уже не от того значения, что видел скрипт советника.

У вас есть логи - смотрите их и проверяйте. Чудес-то не бывает.

 
Когда-то брокер А*****и делал возможность исполнения байлимитов выше цены и селллимитов ниже.
Возможно это до сих пор у них работает.
 
Такие настройки бывают

Запись размеров проскальзываний в комментарии к ордерам
  • По умолчанию настройка для каждого счета включена и в комментарии к ордерам записываются размеры проскальзываний.
  • Однако, некоторые советники используют комментарии к ордерам для определенных логических процедур и дополнительные записи в комментариях могут сделать работу советника некорректной.
  • Чтобы избежать этого, данная настройка позволяет отключить запись размеров проскальзываний в комментарии.
Частичное исполнение лимитных ордеров
  • Если опция включена, то лимитные ордера будут исполняться как Good-Til-Cancelled (GTC) ордера.  
    Это значит, что по заявленной в лимитном ордере цене будет исполнен тот объем, который имеется в данный момент на рынке - его может хватить как на полное, так и только на частичное исполнение ордера. При частичном исполнении, оставшийся объем будет исполнен по требуемой цене, как только на рынке вновь появится ликвидность по данной цене. GTC ордер будет оставаться в рынке до момента полного исполнения по заданной цене, либо до его отмены вручную трейдером.
  • Если опция выключена, то лимитные ордера будут исполняться как Fill-Or-Kill (FOK) ордера.  
    Это значит, что ордер будет либо исполнен сразу в полном объеме по указанной цене, либо, если ликвидности по данной цене в момент активации ордера на рынке будет недостаточно, то он вернется в систему и будет ждать новой активации.
  • Если по счету активирована настройка «Рыночное исполнение лимитных ордеров», то настройка «Частичное исполнение лимитных ордеров» на исполнение не влияет (в момент активации лимитного ордера, он будет исполнен как рыночный ордер).
Рыночное исполнение лимитных ордеров
  • Если опция включена, то в момент активации лимитного ордера, он будет исполнен как рыночный ордер (market order). Это значит, что ордер будет исполнен в полном объеме, но по текущим рыночным ценам (которые могут быть как лучше, так и хуже заявленной в ордере).  
    В данном случае лимитный ордер гарантирует исполнение, но не гарантирует цену (возможно проскальзывание не в пользу клиента).  
  • Если опция выключена, то ордер будет исполнен как лимитный ордер. В данном случае лимитный ордер гарантирует цену, но не гарантирует исполнение (проскальзывание не в пользу клиента исключено).
  • Изменение данной настройки не повлияет на уже выставленные ордера.
Cancel if done orders when there’s a gap
  • Если опция включена, то в случае, если и цена активации отложенного ордера, и цена его закрытия по Stop Loss / Take Profit попала в ГЭП, отложенный ордер будет отменен.
  • Если же опция выключена, то в описанной ситуации отложенный ордер отменен не будет.
 
Cancel stop orders when there’s a gap of more than N pips
  • Если опция включена (N pips > 0), то в случае, если разница в пунктах между заданной клиентом ценой активации стоп ордера* и первой активирующей ордер котировкой после ГЭПа равна или больше указанного клиентом в настройке количества допустимых пунктов (N pips) разницы, то стоп ордер* будет отменен.  
    Разница в пунктах (N pips) задается клиентом вручную для каждого счета.
  • Если же опция выключена (N pips = 0), то в описанной ситауции стоп ордер* исполнится.
  • Активация данной опции не гарантирует отсутствие проскальзывания более N пунктов, так как она может лишь отменить отправку ордера при ГЭПе больше N пунктов.
    Если условие активации выполнено и ордер отправлен на контрагента, то Rann FS уже не может контролировать фактическое исполнение, и проскальзывание может быть больше N пунктов.
  • * Под стоп ордером в данном случае подразумеваются только ордера Buy Stop и Sell Stop, на ордера Stop Loss данная опция не не распространяется
  Исполнение маркет и стоп ордеров как лимитных с проскальзыванием не более N пунктов (аналог стоп-лимитных ордеров)
  • Если опция включена (N pips > 0), то при открытии рыночного или стоп ордера*, на поставщика будет отправлен лимитный ордер с ценой, сдвинутой на указанную клиентом в настройке величину (N pips) в худшую сторону относительно текущей рыночной цены.  
    Текущей рыночной ценой в случае маркет ордера является лучшая цена в потоке котировок на сервере в момент получения ордера сервером, а в случае стоп ордера цена, указанная в стоп ордере.
    Фактически будет послан лимитный ордер, условие активации которого уже наступило.
    Лимитные ордера могут исполняться только с положительным проскальзыванием. Таким образом, теоретически возможное отрицательное проскальзывание исходного маркет ордера всегда ограничено значением в N пуктов, а положительное проскальзывание не ограничено.
    Это дает трейдеру способ контроля за рисками, невозможный при традиционном исполнении маркет-ордеров.
    Допустимая величина проскальзывания в пунктах (N pips) задается клиентом вручную для каждого счета. Допустимые значения - целые числа от 0 до 1000.
  • Если же опция выключена (N pips = 0), то рыночный ордер* исполнится как обычно по доступной рыночной цене.
  • При невозможности исполнить ордер по удовлетворяющей цене, на маркет ордер будет выдан «оффквот», стоп ордера будут удалены из системы неисполненными.  
    При невозможности исполнить ордер по удовлетворяющей цене, на маркет ордер будет выдан «оффквот», стоп ордера будут удалены из системы неисполненными.
    This option is only available for ECN accounts and does not apply on STP accounts.
    * Под рыночными ордерами в данном случае подразумеваются все ордера на открытие позиции, исполняемые как рыночные, а именно Market Order, Sell Stop и Buy Stop. Для ордеров Stop Loss, Take Profit, Sell Limit, Buy Limit и Stop Out описанная выше настройка неактуальна.
Активация стоп-ордеров по противоположной цене Если опция включена, то стоп-ордера будут активироваться и отправляться на исполнение по следующему принципу:
  • Buy Stop отправляется на исполнение, когда цена Bid пересечет цену ордера
  • Sell Stop отправляется на исполнение, когда цена Ask пересечет цену ордера
  • Stop Loss активируется, когда цена Ask (для Buy) / Bid (для Sell) пересечет уровень Stop Loss
    • * Под стоп ордером подразумеваются Buy Stop, Sell Stop, Stop Loss

Выделенное решит проблему.

ЗЫ "Активация стоп-ордеров по противоположной цене" - было бы очень полезно в Тестере для исследования пробойных ТС.
 
fxsaber:
Такие настройки бывают

Выделенное решит проблему.

ЗЫ "Активация стоп-ордеров по противоположной цене" - было бы очень полезно в Тестере для исследования пробойных ТС.

1. Как выделенное решит проблему, если это настройки сервера не со стороны клиента?

2. А г-н Дмитрий Раннев не против публикации этих настроек?

 

eternal_ego:

Доброго времени суток!


Согласно документации MQL5, мы можем послать либо market, либо limit order в нескольких вариантах:

  • BUY STOP, SELL STOP — покупка или продажа при пробитии указанного уровня (хуже текущей цены);
  • BUY LIMIT, SELL LIMIT — покупка или продажа при достижении указанного уровня (лучше текущей цены);
  • BUY STOP LIMIT, SELL STOP LIMIT — установка ордера BUY LIMIT или SELL LIMIT при достижении указанной цены.

Допустим, есть абстрактный инструмент XXXYYY, текущий ask на который = 1.123, при этом нас устроило бы купить его и дороже, например, по цене 1.133. Слать market ордер в данном случае опасно, т.к. результат непредсказуем (очень вероятно, что итоговая цена будет намного хуже). Как правильно задать limit ордер в таком случае? Попытка сделать BUY_LIMIT будет отклонена, т.к. мы хотим цену, которая хуже текущей цены. Некорректно и делать BUY_STOP, так как нам надо сейчас исполнять, пока цена хорошая, а не когда она там станет хуже. BUY_STOP_LIMIT тут тоже не поможет. Как тогда лучше поступать?

P.S. Market ордер - это в данном случае TRADE_ACTION_DEAL и ORDER_TYPE_BUY, причём deviation в реквесте задаётся, но, видимо, брокер может игнорить этот параметр.

На форекс кухнях забудьте про лимитные ордера, их там нет.

Хотя fxsaber утверждает, что такие дилеры существуют. ..

fxsaber если не сложно, мне в личку ссылку, prego

 
Да, к сожалению настройки со стороны сервера мы проверить не можем, и, разумеется, едва ли какой брокер расскажет, что у него как настроено :) Более того, там даже саппорт может не знать, что за опции заданы на сервере. Хотя поинтересоваться, безусловно, можно. Вот только является ли упомянутая опция штатной для МТ5 сервера?
 
Artyom Trishkin:

1. Как выделенное решит проблему, если это настройки сервера не со стороны клиента?

2. А г-н Дмитрий Раннев не против публикации этих настроек?

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

 

Это не та настройка. Нужна вот эта (но это пока только для MT4, так что газом так не торганешь):

Отправка лимитных ордеров в рынок по цене хуже текущей на N пунктов Включена (Целое число больше 0), выключена (0) Выключена (0)
  •  Если опция включена (N pips > 0), то при активации лимитного ордера*, на поставщика будет отправлен лимитный ордер с ценой, сдвинутой на указанную клиентом в настройке величину (N pips) в худшую сторону относительно текущей рыночной цены. Фактически будет послан лимитный ордер, условие активации которого уже наступило. Настройка позволяет трейдеру обойти ограничение МТ на выставление лимитных ордеров только лучше текущей цены. Допустимая величина проскальзывания в пунктах (N pips) задается клиентом вручную для каждого счета.

  •  Если же опция выключена (N pips = 0), то лимитный ордер* отправится как стандартный. 

* Под лимитными в данном случае подразумеваются не только Sell Limit и Buy Limit, но и Take Profit (который сразу же сдивгается на заданное количество пунктов).

Примечение! Например, при настройке N=25 для того, чтобы выставить лимитный ордер на покупку по текущей рыночной цене, вам фактически надо его выставить по текущей цене минус 25. Таким образом трейдер сможет сам решать (в пределах выставленного значения), выставлять лимитные ордера хуже рынка или лучше рынка.

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