CloseAllOrders_v4

Author: Vladimir Khlistov
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself
Miscellaneous
It opens Message Boxes to the userIt issuies visual alerts to the screen
10 Views
0 Downloads
0 Favorites
CloseAllOrders_v4
//+------------------------------------------------------------------+
#property copyright "Vladimir Khlistov"
#property link      "http://cmillion.narod.ru"
#property show_inputs
#include <WinUser32.mqh>
//+------------------------------------------------------------------+
extern int   Magic       = 0;   //çàêðûâàòü òîëüêî ñäåëêè ñ ìàãèêîì 0-îòêðûòûå âðó÷íóþ
extern bool  MagicAll    = true;//åñëè true - çàêðûâàòü âñå
extern int   Profit      = 0;   //çàêðûâàòü òîëüêî ñäåëêè ñ ïðîôèòîì áîëüøå Profit
extern int   TipOrder    = 0;   //(0) - âñå îðäåðà   (1) - Buy     (-1) - Sell
extern bool  SymbolAll   = true;//åñëè true - âñå âàëþòíûå ïàðû   false - òîëüêî òåêóùèå
int   slippage    = 5;
int nn;
//+------------------------------------------------------------------+
int start()
{  
   if (Digits==5 || Digits==3) slippage=30;
   bool error=true;
   int Îøèáêà,DIGITS;
   string txt;
   double ASK,BID,POINT;
   if (!MagicAll)  txt=StringConcatenate(txt,"Cêðèïò çàêðûòèÿ îðäåðîâ ñ Magic=",Magic);
   else  txt=StringConcatenate(txt,"Cêðèïò çàêðûòèÿ âñåõ îðäåðîâ");
   Comment("");
   int ret=MessageBox("Çàêðûòü âñå îðäåðà (Äà)   Çàêðûòü òîëüêî ïðîôèòíûå (Íåò)",
       txt, MB_YESNOCANCEL|MB_TOPMOST);
   if (ret==IDCANCEL) return;
   while(true)
   {
      for (int j = OrdersTotal()-1; j >= 0; j--)
      {
         if (OrderSelect(j, SELECT_BY_POS))
         {
            if ((OrderSymbol() == Symbol()||SymbolAll) && (OrderMagicNumber() == Magic || MagicAll))
            {
               DIGITS = MarketInfo(OrderSymbol(),MODE_DIGITS);
               ASK = NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),DIGITS);
               BID = NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),DIGITS);
               POINT = MarketInfo(OrderSymbol(),MODE_POINT);
               if (OrderType()==OP_BUY && (TipOrder == 1||TipOrder ==0)) 
               {
                  if (ret==IDNO && Profit > (BID-OrderOpenPrice())/POINT) continue;
                  error=OrderClose(OrderTicket(),OrderLots(),BID,slippage,Red);
                  if (error) Alert("Çàêðûò îðäåð N ",OrderTicket(),"  ïðèáûëü ",OrderProfit(),
                                     "     ",TimeToStr(TimeCurrent(),TIME_SECONDS));
               }
               if (OrderType()==OP_SELL && (TipOrder ==-1||TipOrder ==0)) 
               {
                  if (ret==IDNO && Profit > (OrderOpenPrice()-ASK)/POINT) continue;
                  error=OrderClose(OrderTicket(),OrderLots(),ASK,slippage,Red);
                  if (error) Alert("Çàêðûò îðäåð N ",OrderTicket(),"  ïðèáûëü ",OrderProfit(),
                                     "     ",TimeToStr(TimeCurrent(),TIME_SECONDS));
               }
               
               if (!error) 
               {
                  Îøèáêà = GetLastError();
                  if (Îøèáêà<2) continue;
                  if (Îøèáêà==129) 
                  {  Comment("Íåïðàâèëüíàÿ öåíà ",TimeToStr(TimeCurrent(),TIME_SECONDS));
                     Sleep(5000);
                     RefreshRates();
                     continue;
                  }
                  if (Îøèáêà==146) 
                  {
                     int ret1=MessageBox("Ïîäñèñòåìà òîðãîâëè çàíÿòà"," ", 
                         MB_RETRYCANCEL|MB_TOPMOST|MB_ICONWARNING);
                     if (ret1==IDCANCEL) return;
                     j++;
                     if (IsTradeContextBusy()) Sleep(2000);
                     continue;
                  }
                  Comment("Îøèáêà ",Îøèáêà," çàêðûòèÿ îðäåðà N ",OrderTicket(),
                          "     ",TimeToStr(TimeCurrent(),TIME_SECONDS));
               }
            }
         }
      }
      int n=0;
      for (j = 0; j < OrdersTotal(); j++)
      {
         if (OrderSelect(j, SELECT_BY_POS))
         {
            if ((OrderSymbol() == Symbol()||SymbolAll) && (OrderMagicNumber() == Magic || MagicAll))
            {
               DIGITS = MarketInfo(OrderSymbol(),MODE_DIGITS);
               ASK = NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),DIGITS);
               BID = NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),DIGITS);
               POINT = MarketInfo(OrderSymbol(),MODE_POINT);
               if (OrderType()==OP_BUY  && (TipOrder == 1||TipOrder ==0))
               {
                  if (ret==IDNO && Profit > (BID-OrderOpenPrice())/POINT) continue;
                  n++;
               }
               if (OrderType()==OP_SELL && (TipOrder ==-1||TipOrder ==0))
               {
                  if (ret==IDNO && Profit > (OrderOpenPrice()-ASK)/POINT) continue;
                  n++;
               }
            }
         }  
      }
      if (n==0) break;
      nn++;
      if (nn>10) {Comment("Íå óäàëîñü çàêðûòü âñå ñäåëêè, îñòàëîñü åùå ",n);break;}
      Sleep(1000);
      RefreshRates();
   }
   return(0);
}
//+------------------------------------------------------------------+

Comments