Orders Execution
Checks for the total of open ordersIt Closes Orders by itself
0 Views
0 Downloads
0 Favorites
cm CloseBy
ÿþ//+------------------------------------------------------------------+

//|                                                   cm CloseBy.mq4 |

//|                             Copyright © 2018, http://cmillion.ru |

//|                                                cmillion@narod.ru |

//+------------------------------------------------------------------+

#property copyright "Copyright © 2018, http://cmillion.ru"

#property link      "cmillion@narod.ru"

#property version   "1.00"

#property strict

#property show_inputs

int  slippage = 100;

extern bool CloseAll = false;

//+------------------------------------------------------------------+

void OnStart()

  {

   double AB=AccountBalance();

   bool error=true;

   int b=0,s=0,TicketApponent=0,Ticket,OT,j,LaslApp=-1;

   double pr=0;

   int schby=0;

   while(!IsStopped())

     {

      if(schby>10) break;

      TicketApponent=0;

      for(j=OrdersTotal()-1; j>=0; j--)

        {

         if(OrderSelect(j,SELECT_BY_POS))

           {

            if(OrderSymbol()==Symbol())

              {

               OT=OrderType();

               Ticket=OrderTicket();

               if(OT>1) {error=OrderDelete(Ticket);continue;}

               if(TicketApponent==0) {TicketApponent=Ticket;LaslApp=OT;}

               else

                 {

                  if(LaslApp==OT) continue;

                  if(OrderCloseBy(Ticket,TicketApponent,clrGreen)) {TicketApponent=0;}

                  else {TicketApponent=0;schby++;}

                 }

              }

           }

        }

      b=0;s=0;

      for(j=OrdersTotal()-1; j>=0; j--)

        {

         if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES))

           {

            if(OrderSymbol()==Symbol())

              {

               OT=OrderType();

               if(OT==OP_BUY) b++;

               if(OT==OP_SELL) s++;

              }

           }

        }

      if(b==0 || s==0) break;

     }

   if(CloseAll)

     {

      error=true;

      int err,nn=0;

      while(!IsStopped())

        {

         for(j=OrdersTotal()-1; j>=0; j--)

           {

            if(OrderSelect(j,SELECT_BY_POS))

              {

               if(OrderSymbol()==Symbol())

                 {

                  OT=OrderType();

                  Ticket=OrderTicket();

                  pr=OrderProfit()+OrderSwap()+OrderCommission();

                  if(OT==OP_BUY)

                    {

                     error=OrderClose(Ticket,OrderLots(),NormalizeDouble(Bid,Digits),slippage,Blue);

                    }

                  if(OT==OP_SELL)

                    {

                     error=OrderClose(Ticket,OrderLots(),NormalizeDouble(Ask,Digits),slippage,Red);

                    }

                  if(!error)

                    {

                     err=GetLastError();

                     if(err<2) continue;

                     if(err==129)

                       {

                        RefreshRates();

                        continue;

                       }

                     if(err==146)

                       {

                        if(IsTradeContextBusy()) Sleep(2000);

                        continue;

                       }

                    }

                 }

              }

           }

         int n=0;

         for(j= 0; j<OrdersTotal(); j++)

           {

            if(OrderSelect(j,SELECT_BY_POS))

              {

               if(OrderSymbol()==Symbol())

                 {

                  n++;

                 }

              }

           }

         if(n==0) break;

         nn++;

         if(nn>10)

           {

            return;

           }

         Sleep(1000);

         RefreshRates();

        }

     }

   Comment("Balance ",DoubleToStr(AccountBalance(),2)," (",DoubleToStr(AccountBalance()-AB,2),") ",AccountCurrency());

  }

//+------------------------------------------------------------------+

Comments