Закрытие перекрытых ордеров в эксперте?

 
В MT4 есть функция закрытие перекрытых ордеров. Если не ошибаюсь это выглядит примерно так: один ордер закрываеться с потерей спреда, а другой противоположно направленный с одинаковым количеством лотов, закраваеться без потери спреда. Можно ли в эксперте прописать такой способ? В описаниях MQL поискал, вроде не чего подобного нет.  Может ктото уже сталкивался уже с этим, если не трудно подскажите пожалуйста.
 
conys:

Смотрите функцию
bool OrderCloseBy( int ticket, int opposite, color Color=CLR_NONE)
 
Valmars:
bool OrderCloseBy( int ticket, int opposite, color Color=CLR_NONE)

Извените, мне аж стыдно стало. Честно говорю не видел... Спасибо. :)
 

А мне нет.

Есть у кого функция закрытия всех перекрытых ордеров? 

 
eevviill:

А мне нет.

Есть у кого функция закрытия всех перекрытых ордеров? 

Вроде в базе должно быть! Правда, раньше в 4-ке видел.
 
Поиск рулит! См. Решетов ещё в 2008 году выложил: https://www.mql5.com/ru/forum/112224/page2#116139 Удачи! 
 
borilunad:
Поиск рулит! См. Решетов ещё в 2008 году выложил: https://www.mql5.com/ru/forum/112224/page2#116139 Удачи! 

Да это вообще эврика!

 int total = OrdersTotal();
   int buycad = -1;
   int sellcad = -1;
   int buychf = -1;
   int sellchf = -1;
   int buyjpy = -1;
   int selljpy = -1;
   for (int i = 0; i < total; i++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() == "USDCAD") {
         if (OrderType() == OP_BUY) {
            buycad = OrderTicket();
         } else {
            sellcad = OrderTicket();
         }
      }
      if (OrderSymbol() == "USDCHF") {
         if (OrderType() == OP_BUY) {
            buychf = OrderTicket();
         } else {
            sellchf = OrderTicket();
         }
      }
      if (OrderSymbol() == "USDJPY") {
         if (OrderType() == OP_BUY) {
            buyjpy = OrderTicket();
         } else {
            selljpy = OrderTicket();
         }
      }
   }
   
   if ((buycad >= 0) && (sellcad >= 0)) {
      OrderCloseBy(buycad, sellcad, Green);
      Sleep(30000);
   }
   if ((buychf >= 0) && (sellchf >= 0)) {
      OrderCloseBy(buychf, sellchf, Green);
      Sleep(30000);
   }
   if ((buyjpy >= 0) && (selljpy >= 0)) {
      OrderCloseBy(buyjpy, selljpy, Green);
      Sleep(30000);
   }
 

Накатал свою функцию. 

////////////////////////////////////////////////////////////////////////////////
void Close_all_by()
{
int cur_ticket;


for(int i=OrdersTotal()-1; i>=0; i--)
 {
 if(OrderSelect(i, SELECT_BY_POS))
 {
 if(OrderMagicNumber()==Magic)
 {
 if(OrderSymbol()==Symbol())
 {
 //BUY
 if(OrderType()==OP_BUY)
 {
 cur_ticket=OrderTicket();
 for(int y=i-1; y>=0; y--)
 {
 if(OrderSelect(y, SELECT_BY_POS))
 {
 if(OrderMagicNumber()==Magic)
 {
 if(OrderSymbol()==Symbol())
 {
 if(OrderType()==OP_SELL)
 {
 i++;
 if(OrderCloseBy(OrderTicket(),cur_ticket)) break;
 }
 }
 }
 } 
 }
 }//end if buy
 else
 //SELL
 if(OrderType()==OP_SELL)
 {
 cur_ticket=OrderTicket();
 for(int y2=i-1; y2>=0; y2--)
 {
 if(OrderSelect(y2, SELECT_BY_POS))
 {
 if(OrderMagicNumber()==Magic)
 {
 if(OrderSymbol()==Symbol())
 {
 if(OrderType()==OP_BUY)
 {
 i++;
 if(OrderCloseBy(OrderTicket(),cur_ticket)) break;
 }
 }
 }
 } 
 }
 }//end if sell
 }
 }
 }
 }
 

}
 
eevviill:

Накатал свою функцию. 

 

По мотивам вашей накатал такую

int orderticket( int ordertype)
{
   int i, answer = -1;
   for ( i = OrdersTotal() - 1; i >= 0; i--)
      if ( OrderSelect( i, SELECT_BY_POS) )
         if ( OrderMagicNumber()==Magic 
            && OrderSymbol()==Symbol()
            && OrderType()== ordertype )
         {  answer = OrderTicket();
            break;
         }
   return( answer );
}
////////////////////////////////////////////////////////////////////////////////
void Close_all_by()
{
   int BuyTicket, SellTicket;
   
   while ( true )
   {
      BuyTicket = orderticket( OP_BUY );
      if ( BuyTicket < 0 ) break; // кончились ордера на покупку
      SellTicket = orderticket( OP_SELL );
      if ( SellTicket < 0 ) break; //кончились ордера на продажу
      // существуют перекрытые ордера
      OrderCloseBy( BuyTicket, SellTicket);
   }
}
Причина обращения: