Надежный код для закрытия всех ордеров

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

если МТ4, то в библиотеке @fxsaber я выкладывал свои коды для открытия/закрытия ордеров https://www.mql5.com/ru/code/24829

файл TradePanel_C#.mqh , это переработанные на мой вкус библиотеки И.Ким, давно пользуюсь, особых проблем не замечал

TradePanel_Csharp
TradePanel_Csharp
  • www.mql5.com
Торговая панель, которая работает и в Визуализаторе Тестера.Таблица текущих ордеров/позиций.Таблица истории торгов (корректно работает на Хедж-счетах). Использование Ручная торговля в Тестере или вмешивание в работу советника (например, с целью проверки устойчивости ко внешним факторам).Ручная торговля в Терминале на демо/реальных...
 
Igor Makanu:

если МТ4, то в библиотеке @fxsaber я выкладывал свои коды для открытия/закрытия ордеров https://www.mql5.com/ru/code/24829

файл TradePanel_C#.mqh , это переработанные на мой вкус библиотеки И.Ким, давно пользуюсь, особых проблем не замечал

Так там же МТ5...

Вот мой код:

bool AllOrderClose()
  {
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(!OrderSelect(i,SELECT_BY_POS))
        {
         Print("Orders not found");
        }
      if(OrderSymbol()!=Symbol()) continue;
      if(OrderType()==OP_SELL && OrderMagicNumber()==Magic)
        {
         if(OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,clrLavender))
           {
            PlaySound("CoinsDrop2.wav");
           }
        }
      if(OrderType()==OP_BUY && OrderMagicNumber()==Magic)
        {
         if(OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,clrLavender))
           {
            PlaySound("CoinsDrop2.wav");
           }
        }
     }
   return (true);
  }

в большинстве случаев работает (в тестере 100%), но на реале бывает что пропускает ордера (не все закрывает)... думаю это связано с задержкой исполнения, возможно достаточно просто Slippage увеличить? как-то не хочется на реале тестировать... а может стоит цены закрытия нормализовать?... но тогда бы была ошибка по типу неправильная цена или еще что-то в этом роде

 
Maksim Neimerik:

Так там же МТ5...

там чистый МТ4 !

 
Maksim Neimerik:
Привет! Кто не пожалеет и поделится своим кодом для закрытия ВСЕХ сделок? Я свой написал, но он, как оказалось, иногда не делает то что от него требуется...

Как-то так:

void AllOrderClose()
  {
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(!OrderSelect(i,SELECT_BY_POS)) continue;
      if(OrderMagicNumber()!=Magic) continue;
      if(OrderSymbol()!=Symbol()) continue;

      if(OrderType()==OP_SELL)
        {
         RefreshRates();
         if(OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,clrLavender)) PlaySound("CoinsDrop2.wav");
         else i++;
        }
      if(OrderType()==OP_BUY)
        {
         RefreshRates();
         if(OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,clrLavender)) PlaySound("CoinsDrop2.wav");
         else i++;
        }
     }
   return;
  }
 
Aleksey Lebedev:

Как-то так:

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

в смысле если сделка не закрыта переменная i никогда не будет 0...

 
да. И RefreshRates нужен, в реале первый ордер может закрываться секунд несколько.
 
Aleksey Lebedev:
да. И RefreshRates нужен, в реале первый ордер может закрываться секунд несколько.
Как говорится:"Все гениальное - просто!")) Спасибо, буду тестить...
Причина обращения: