Закрытие позиции при помощи OrderClose - страница 2

 
Istrrebitel:
а как же тогда выбирать конкретный ордер из 2 открытых селов или баев?


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


И я обычно всегда проверяю ордера по магику, принадлежат они советнику или нет. А  потом уже все остальные манипуляции.

 
Istrrebitel:
пробовал закрывать пол позиции функцией OrderClose но тогда теряется ордер (тикет присваеватся другой как при открытии нового ордера)...


Я вам написал выше.

Конкретно:

Перебирайте ордера при каждой иннервации программы.

 
Евгений:


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

Также и с sell ордерами. 

Проблема в том что для 2-х ордеров (неважно селл или бай) разные цены закрытия...
 
Alekseu Fedotov:


Я вам написал выше.

Конкретно:

Перебирайте ордера при каждой иннервации программы.


Я вообще выношу функции открытия, закрытия имодефикации ордеров за пределы основного цикла программы.  И вызываю их когда нужно.

 
Евгений:


Я вообще выношу функции открытия, закрытия имодефикации ордеров за пределы основного цикла программы.  И вызываю их когда нужно.


Это ++!

Но в коде этого не видно.

 
Евгений:


Я вообще выношу функции открытия, закрытия имодефикации ордеров за пределы основного цикла программы.  И вызываю их когда нужно.

А если всем ордерам присвоить разние магики, и выбирать по магику - так же должно сработать? или магики тоже могут не сохранится ?(врятли)
 
Istrrebitel:
А если всем ордерам присвоить разние магики, и выбирать по магику - так же должно сработать? или магики тоже могут не сохранится ?(врятли)
можно.
 
ок, приступаю) Всем спасибо, возможно еще вернусь с новыми вопросами)))
 
Istrrebitel:
ок, приступаю) Всем спасибо, возможно еще вернусь с новыми вопросами)))

Удачи!
 

Ответ на ваш вопрос: в чем причина не закрытия ордера, даст обработка ошибки функции OrderClose.

if (!OrderSelect(ticket, SELECT_BY_TICKET))
   return;

if (!OrderClose(ticket, OrderLots(), (OrderType())? Ask: Bid, Slippage) 
   Print("OrderClose error, ticket: ", ticket, " error: ", GetLastError());

Ну или загляните в журнал, там тоже должна быть ошибка закрытия.