Как выяснить тикет оставшегося ордера? - страница 2

 

Советник открывает ордер, выставляет ТП и СЛ

Запоминает тикет.

Потом если идет в прибыль закрывает половину позиции

Потом она закроется.

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

 
Alexey Viktorov:

1. В комментарии ордера пишется тикет ордера с остатком объёма.

2. Выбор ордера по тикету не зависит от того закрыт он или нет, поэтому MODE_HISTORY писать необязательно.

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

Ищите в истории закрытый ордер с комментарием "to #тикет нового" -  в нём комментарий from#тикет частично закрытого
 
Artyom Trishkin:
Ищите в истории закрытый ордер с комментарием "to #тикет нового" -  в нём комментарий from#тикет частично закрытого

Точно. ПРи частичном закрытии меняется тикет. Спасибо. 

Получается можно искать ордер с комментарием from#___. И брать его тикет 

 

Написал такую функцию, вроде бы выдает нужный тикет )

int get_ticket_half(int tick)

{

for(int i = OrdersTotal()-1; i>=0; i--)

   {

   if(!OrderSelect(i,SELECT_BY_POS))continue;

   if(StringSubstr(OrderComment(),0,StringLen("from #"))=="from #")

      if(StringSubstr(OrderComment(),StringLen("from #"))==tick)return(OrderTicket());

   }

return(0);

}


 

так же и тп/сл можно определять, в зависимости от добавочного комментария [tp] или [sl]

и думаю лучше использовать StringFind 

 
Maksim Garkin:

Здравствуйте, товарищи! 

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

Советник при некоторой прибыли закрывает половину объема ордера. Потом два варианта. Либо по стоплоссу, либо по тейку.

пишу код

if(OrderSelect(tickett,SELECT_BY_TICKET,MODE_HISTORY) && OrderCloseTime()>0)

      {

      if(OrderClosePrice()==  OrderStopLoss()) Print(1);

      if(OrderClosePrice()==OrderTakeProfit()) Print(2);

      }

 Если по стоплоссу находит, Профит - нет. Как это сделать правильно?

Я почитал бы регламент.