Закрытие ордеров совом по разным инструментам

 

Просьба не ругаться если эта тема уже была, по крайней мере я ее не нашел.

Надо закрыть два ордера - один на GBPUSD, второй на EURUSD. Советник закрывает только тот ордер в котором окне он находится, а второй ни в какую. Профит считает по обоим ордерам нормально. Если оба ордера находятся в том же окне что и советник, он их закрывает без проблем. Может еще библиотеку надо или еще чего чтоб сов работал по нескольким парам.

 
Camnoce6e:

Просьба не ругаться если эта тема уже была, по крайней мере я ее не нашел.

Надо закрыть два ордера - один на GBPUSD, второй на EURUSD. Советник закрывает только тот ордер в котором окне он находится, а второй ни в какую. Профит считает по обоим ордерам нормально. Если оба ордера находятся в том же окне что и советник, он их закрывает без проблем. Может еще библиотеку надо или еще чего чтоб сов работал по нескольким парам.


Ну а советник-то где? Мы должны угадать почему он у вас что-то не закрывает?
 
Уберите условие Symbol() из функции выбора ордера для закрытия. Должно помочь... хотя удалённо сложно что-то сказать. Могу подправить, если не получится.
 
уберите фильтр по символу.
 
FAQ:
уберите фильтр по символу.

Если вспомнить
bool OrderClose( int ticket, double lots, double price, int slippage, color Color=CLR_NONE)
то этого может оказаться мало..
 

Мне всё это напоминает https://www.mql5.com/ru/forum/133408

XD

 

Вот код функции закрытия

void closeBuySell()
{
if(RRzakBSP==1)
{for (cnt=OrdersTotal()-1;cnt>=0;cnt--)
{OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES);
if (OrderType() == OP_BUY && OrderTicket()==TicketBuy)
{TicketBuy2=OrderTicket();
while(TicketBuy==TicketBuy2)
{RefreshRates();
OrderClose(OrderTicket(),ZakLotBuy,NormalizeDouble(Bid,Digits),0,Lime);
OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES); TicketBuy2=OrderTicket();
}}
if (OrderType() == OP_SELL && OrderTicket()==TicketSell)
{TicketSell2=OrderTicket();
while(TicketSell==TicketSell2)
{RefreshRates();
OrderClose(OrderTicket(),ZakLotSell,NormalizeDouble(Ask,Digits),0,Lime);
OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES); TicketSell2=OrderTicket();
}}}}}

TicketBuy и TicketSell задаются прямо в сове.

 
Camnoce6e:

Вот код функции закрытия

void closeBuySell()
{
if(RRzakBSP==1)
{for (cnt=OrdersTotal()-1;cnt>=0;cnt--)
{OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES);
if (OrderType() == OP_BUY && OrderTicket()==TicketBuy)
{TicketBuy2=OrderTicket();
while(TicketBuy==TicketBuy2)
{RefreshRates();
OrderClose(OrderTicket(),ZakLotBuy,NormalizeDouble(Bid,Digits),0,Lime);
OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES); TicketBuy2=OrderTicket();
}}
if (OrderType() == OP_SELL && OrderTicket()==TicketSell)
{TicketSell2=OrderTicket();
while(TicketSell==TicketSell2)
{RefreshRates();
OrderClose(OrderTicket(),ZakLotSell,NormalizeDouble(Ask,Digits),0,Lime);
OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES); TicketSell2=OrderTicket();
}}}}}

TicketBuy и TicketSell задаются прямо в сове.

ага, и ни чё что будет закрывать по ценам текущего инструмента
 
      int tot1=OrdersTotal();
      for(int i1=totl-1;i1>=0;i1--)//проверяем соответствие нашего списка с таблицей ордеров
      {
         if(OrderSelect(i1,SELECT_BY_POS))//закроет все ордера
         //если ордер в списке есть, а в таблице его не обнаружено необходимо его удалить
         {
            //закрываем позицию
            if(OrderType()==OP_BUY)
            {
               RefreshRates();
               OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS)),Slippage);
               continue;
            }
            if(OrderType()==OP_SELL)
            {
               RefreshRates();
               OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),Slippage);
               continue;
            }
         }
      }
 
Camnoce6e:

Вот код функции закрытия

OrderClose(OrderTicket(),ZakLotBuy,NormalizeDouble(Bid,Digits),0,Lime);


OrderClose(OrderTicket(),ZakLotSell,NormalizeDouble(Ask,Digits),0,Lime);


  1. Научитесь для начала пользоваться SRC для вставки кода, чтобы людям зрение не портить (комбинация клавиш Ctrl+Alt+M)
  2. Для чайников есть специальная ветка https://www.mql5.com/ru/forum/138609
  3. Аsk и Bid для любого инструмента после OrderSelect() можно получить через MarketInfo(OrderSymbol(), MODE_ASK) и MarketInfo(OrderSymbol(), MODE_BID)
 
Всем СПАСИБО. Разобрался, все заработало. И не судите вы уж новичков, то что для вас очевидно, для новичка огромная проблема.
Причина обращения: