Закрытие позиций в МТ5

Forester  

Здравствуйте, вопрос такой:

имеется анализ открытых позиций

при превышении ТП или СЛ посылается асинхронный ордер на сделку тем же объемом, но противоположного направления (по идее это закрытие открытой ранее сделки).

Пока запрос обработается на сервере, и информация терминала об открытых позициях изменится -  приходят несколько тиков (около 10)  и терминал по старой информации несколько раз посылает запрос на сделку вместо одной.

Какие есть варианты?

Отказаться от асинхронной обработки ордеров + не обрабатывать новые тики, пока не обработается текущий?

Или городить систему прихода ответов на onTrade? (Что значительно усложнит код.)

В МТ4 было проще - послал запрос на закрытие сделки по ее номеру и все! Хоть 10 раз. В противоположную позицию терминал не откроется, как сейчас у меня выходит на МТ5.

Получается еще одно преимущество МТ4, которое в МТ5 решили не включать. Можно и асинхронную работу использовать и без усложнения кода закрывать позиции.

Vasiliy Sokolov  
elibrarius:

Здравствуйте, вопрос такой:

имеется анализ открытых позиций

при превышении ТП или СЛ посылается асинхронный ордер на сделку тем же объемом, но противоположного направления (по идее это закрытие открытой ранее сделки).

Пока запрос обработается на сервере, и информация терминала об открытых позициях изменится -  приходят несколько тиков (около 10)  и терминал по старой информации несколько раз посылает запрос на сделку вместо одной.

Какие есть варианты?

Отказаться от асинхронной обработки ордеров + не обрабатывать новые тики, пока не обработается текущий?

Или городить систему прихода ответов на onTrade? (Что значительно усложнит код.)

В МТ4 было проще - послал запрос на закрытие сделки по ее номеру и все! Хоть 10 раз. В противоположную позицию терминал не откроется, как сейчас у меня выходит на МТ5.

Получается еще одно преимущество МТ4, которое в МТ5 решили не включать. Можно и асинхронную работу использовать и без усложнения кода закрывать позиции.

Огород не городите. Не было никогда в МТ4 асинхронных операций. 

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

Без асинхронного режима все также проста как в МТ4. Есть функция PositionSelect. Если она возвращает true, позиция существует и ее можно закрыть. Если false - позиции нет, и закрывать ее не нужно. Также класс CTrade Вам в помощь:

CTrade Trade;
if(Trade.PositionSelecet(Symbol()))
   Trade.PositionClose();

 Все.

Andrey Khatimlianskii  
Vasiliy Sokolov:

Без асинхронного режима все также проста как в МТ4. Есть функция PositionSelect. Если она возвращает true, позиция существует и ее можно закрыть. Если false - позиции нет, и закрывать ее не нужно. 

Ну, неправда же.

Если стоп сработает на этом же тике, то PositionClose может открыть встречную сделку. По крайней мере, так было раньше.

Vladislav Andruschenko  
Andrey Khatimlianskii:

Ну, неправда же.

Если стоп сработает на этом же тике, то PositionClose может открыть встречную сделку. По крайней мере, так было раньше.

так есть и сейчас на некоторых брокерах. например на Открытии.  там нужно заведомо ставить паузу после совершения операции. 
Andrey Khatimlianskii  
Vladislav Andruschenko:
так есть и сейчас на некоторых брокерах. например на Открытии.  там нужно заведомо ставить паузу после совершения операции. 
Не нужна пауза. Достаточно найти нужную сделку и посмотреть ее статус.
Vladislav Andruschenko  
Andrey Khatimlianskii:
Не нужна пауза. Достаточно найти нужную сделку и посмотреть ее статус.

Не буду сейчас спорить не могу найти свою тему. 

Но я сталкивался с такой проблемой только на 1 брокере. когда выставляя сделку - я не получал ее тикет, сделка есть но в истории ее  нет, соответственно эксперт проверял наличие сделки - сделки нет - он выставлял вторую.  

Возможно это уже исправили в последнем билде .

Был трабл с копиром для мт5. помогло лишь пауза!

кстати сейчас попробую   

хм... демку уже закрыли.... 

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