Совпадение SL открытой позиции с отложенным ордером

 

Ситуация следующая. В результате работы эксперта стоп-лосс открытой позиции совпал с  ценой срабатывания (Entry price) противоположно направленного отложенного ордера. Т.е. 

PositionGetDouble(POSITION_SL)==OrderGetDouble(ORDER_PRICE_OPEN)

Вопрос такой: по каким правилам торговый сервер обрабатывает такую ситуацию? Что именно происходит при достижении ценой указанного уровня: срабытывает ли сначала стоп-лосс открытой позиции (т.е. происходит закрытие позиции), и только после этого открывается противоположная позиция по отложенному ордеру? Или же сначала срабатывает отложенный ордер (например, уменьшающий объём открытой позиции), и только после этого торговый сервер обрабатывает стоп-лосс открытой позиции?

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
В МТ4 сначла стоплосс обрабатывался, потом отложенный ордер. Здесь, наверно, так же будет.
 
Integer:
В МТ4 сначала стоплосс обрабатывался, потом отложенный ордер. Здесь, наверно, так же будет.

Хотелось бы знать точно, а то как бы не перемудрить с кодом.

Я уже в указанной ситуации сдвигаю SL в худшую сторону, чтобы с помощью отложенного отдера успеть "перевернуться" без проблем. Но теперь вот сомневаюсь: зачем я это написал, если даже не знаю чётких правил обработки торговым сервером указанной ситуации.

 

Скорее всего при автоматической обработке сначала отработает стоплосс, а потом откроется отложенник.

Но на практике все может произойти в любой последовательности: при ручном исполнении или интеграции со стороной исполнения никто не гарантирует четкой последовательности. Особенно если это заявки с разными объемами.

Еще момент: если первым сработает отложенник, то он заменит SL/TP у ранее открытой позиции. То есть, стоплосс у открытой позиции уже не должен сработать. Но в реальности можно получить ситуацию, когда два ордера будут одновременно (а это так и есть) отправлены на исполнение в шлюз исполнения (на биржу или другого брокера) и оба исполнятся. Причем могут исполниться по разным ценам.

 

Суперполезная информация к размышлению! Спасибо всем!
 

У меня вот тоже вопрос в связи с этим, допустим в МТ5 я продал евробакс 1 лотом, цена поша не в мою сторону стоп лосс стоит выше чем отложка на бай. т.е. между ценой продажи и стопом стоит отложка на бай на 1 лот, получается что при достижени отложки (1 лот на покупку) сделки просто "схлопнуться" и все, никаких сделок не будет? Я все правильно понял? И учитывается ли данное явление в тестере и при оптимизации?

 
marker:

У меня вот тоже вопрос в связи с этим, допустим в МТ5 я продал евробакс 1 лотом, цена поша не в мою сторону стоп лосс стоит выше чем отложка на бай. т.е. между ценой продажи и стопом стоит отложка на бай на 1 лот, получается что при достижени отложки (1 лот на покупку) сделки просто "схлопнутся" и все, никаких сделок не будет? Я все правильно понял?

Да, если в Вашем случае

PositionGetDouble(POSITION_SL)>OrderGetDouble(ORDER_PRICE_OPEN)
PositionGetDouble(POSITION_VOLUME)==OrderGetDouble(ORDER_VOLUME_INITIAL)

то позиция на продажу закроется раньше, чем сработаёт её SL. При этом позиция закроется полностью (не будет ни "старой", ни "новой" позиции). Для того, чтобы в рассматриваемом случае открылась позиция на покупку, необходимо, чтобы PositionGetDouble(POSITION_VOLUME)<OrderGetDouble(ORDER_VOLUME_INITIAL). В частности, если стратегия требует открытия новой позиции в противоположном направлении (с тем же объёмом), то при выставлении отложенного ордера достаточно выполнить условие OrderGetDouble(ORDER_VOLUME_INITIAL)==2*PositionGetDouble(POSITION_VOLUME).

marker:

 И учитывается ли данное явление в тестере и при оптимизации?

 Тестер всего лишь обрабатывает алгоритм, заложенный в эксперте. Если алгоритм предусматривает выставление отложенного ордера, который должен сработать раньше, чем стоп-лосс у противоположно направленной позиции, то тестер обработает именно эту ситуацию, а результат обработки будет зависеть от используемых объёмов.

 
Yedelkin:

Да, если в Вашем случае

то позиция на продажу закроется раньше, чем сработаёт её SL. При этом позиция закроется полностью (не будет ни "старой", ни "новой" позиции). Для того, чтобы в рассматриваемом случае открылась позиция на покупку, необходимо, чтобы PositionGetDouble(POSITION_VOLUME)<OrderGetDouble(ORDER_VOLUME_INITIAL). В частности, если стратегия требует открытия новой позиции в противоположном направлении (с тем же объёмом), то при выставлении отложенного ордера достаточно выполнить условие OrderGetDouble(ORDER_VOLUME_INITIAL)==2*PositionGetDouble(POSITION_VOLUME).

 Тестер всего лишь обрабатывает алгоритм, заложенный в эксперте. Если алгоритм предусматривает выставление отложенного ордера, который должен сработать раньше, чем стоп-лосс у противоположно направленной позиции, то тестер обработает именно эту ситуацию, а результат обработки будет зависеть от используемых объёмов.

Я конечно не кодер, но вроде все понял, значит тестер работает корректно. Спасибо за пояснения. 

 
marker:

Я конечно не кодер...

Сорри за некоторую формальность изложения, просто вопрос был задан в категории "Эксперты", - я и посчитал, что так будет нагляднее. Будут вопросы - задавайте, кто сможет - поможет.

Добавлю насчёт тестера. Для него предполагается несколько режимов  торговли: от обычного до агрессивного. Пока что предусмотрено два режима: "Обычный" и "Произвольная задержка". Поэтому приходится учитывать, что тестер обрабатывает различные ситуации с учётом выбранного режима  торговли. Соответственно, при выборе различных режимов результаты обработки будут также зависеть от того, насколько алгоритм эксперта приспособлен к режимам, имитирующим различные рыночные условия. 

 
Yedelkin:

Ситуация следующая. В результате работы эксперта стоп-лосс открытой позиции совпал с  ценой срабатывания (Entry price) противоположно направленного отложенного ордера. Т.е. 

Вопрос такой: по каким правилам торговый сервер обрабатывает такую ситуацию? Что именно происходит при достижении ценой указанного уровня: срабытывает ли сначала стоп-лосс открытой позиции (т.е. происходит закрытие позиции), и только после этого открывается противоположная позиция по отложенному ордеру? Или же сначала срабатывает отложенный ордер (например, уменьшающий объём открытой позиции), и только после этого торговый сервер обрабатывает стоп-лосс открытой позиции?

Мне кажется, в этом случае нужно просто убрать СЛ и оперировать только объемом ордера: если надо закрыть позицию (сэмулировать СЛ) - объем должен быть равен объему позиции, а если надо перевернуться - объем должен быть больше.


Вообще, штатные СЛ/ТП мне кажутся очень далекими от реалий использования советников.

Для ручной торговли - да, пользоваться можно, но при включении любого торгующего советника (в дополнение к ручной торговле или другому советнику) эти стопы больше мешают, чем помогают...

 
Yedelkin:

Сорри за некоторую формальность изложения, просто вопрос был задан в категории "Эксперты", - я и посчитал, что так будет нагляднее. Будут вопросы - задавайте, кто сможет - поможет.

Добавлю насчёт тестера. Для него предполагается несколько режимов  торговли: от обычного до агрессивного. Пока что предусмотрено два режима: "Обычный" и "Произвольная задержка". Поэтому приходится учитывать, что тестер обрабатывает различные ситуации с учётом выбранного режима  торговли. Соответственно, при выборе различных режимов результаты обработки будут также зависеть от того, насколько алгоритм эксперта приспособлен к режимам, имитирующим различные рыночные условия. 

 

Спасибо, я вот тож когда в тестере ковырялся, нашел там "Произвольная задержка"- штука полезная (приближает к реалиям рынка, как я понял), вот только как она работает и на основе чего эта задержка расчитывается, как то так что ли.

Причина обращения: