DC2008_revers

Price Data Components
Series array that contains the lowest prices of each barSeries array that contains the highest prices of each bar
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself
0 Views
0 Downloads
0 Favorites
DC2008_revers
//+------------------------------------------------------------------------------------+
//|                                               Ñîâåòíèê äëÿ ïðîâåäåíèÿ èññëåäîâàíèé |
//|                                                                  DC2008_revers.mq4 |
//|                                                         Copyright © DC2008, Ñåðãåé |
//+------------------------------------------------------------------------------------+

extern double     Lots=0.1;
extern int        Symb.magic=9001,
                  nORD.Buy = 5,     // ìàêñ êîë-âî îðäåðîâ íà ïîêóïêó
                  nORD.Sell = 5;    // ìàêñ êîë-âî îðäåðîâ íà ïðîäàæó
//----
double   PRC.Buy,
         PRC.Sell;
int      ord.ticket,
         nORDER,
         ORD.Buy,
         ORD.Sell,
         max.ORD = 1,               // ìàêñ êîë-âî îðäåðîâ íà îäíîì áàðå
         Slippage=10;
string   Name_Expert="Îðäåð ýêñïåðòà DC2008_revers";
bool     Signal.Bars,
         ORD.Close.Buy,
         ORD.Close.Sell,
         Signal.Buy,
         Signal.Sell;
//+------------------------------------------------------------------------------------+
int init()                                                                             {
   Signal.Bars=Bars;
   ORD.Close.Buy=true; 
   ORD.Close.Sell=true;
   return(0);
}
//+------------------------------------------------------------------------------------+
void deinit()                                                                          {
   Comment("");
}
//+------------------------------------------------------------------------------------+
int start()                                                                            {
   if(AccountBalance()<1000) return(0);
   Signal.Sell=false;   
   Signal.Buy=false;
   if(OrdersTotal()==0)                                                                {
      Signal.Bars=Bars;
      ORD.Close.Buy=true; 
      ORD.Close.Sell=true;
      ORD.Buy=0;
      ORD.Sell=0;
   }
   nORDER=OrdersTotal();
   //+---------------------------------------------------------------------------------+
   //   Ñèãíàëû íà ïîêóïêó                                                          BUY
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................ÔÈËÜÒÐÛ...................................
      && true
      )                                                                                {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   Ñèãíàëû íà ïðîäàæó                                                          SELL
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................ÔÈËÜÒÐÛ...................................
      && true
      )                                                                                {
   //----
      Signal.Sell=true; 
   }
   //+---------------------------------------------------------------------------------+
   if(ORD.Close.Buy==false)   StopBuy(Symb.magic);    // çàêðûòèå îðäåðîâ
   if(ORD.Close.Sell==false)  StopSell(Symb.magic);   // çàêðûòèå îðäåðîâ
   //+---------------------------------------------------------------------------------+
   // Òîðãîâëÿ: îòêðûòèå íåñêîëüêèõ îðäåðîâ âíóòðè îäíîãî áàðà
   //+---------------------------------------------------------------------------------+
   if (nORDER<max.ORD)                                                                 {
      if (Signal.Buy)                                                                  {
         OpenBuy(Symb.magic);
         return(0);
      }
      if (Signal.Sell)                                                                 {
         OpenSell(Symb.magic);
         return(0);
      }
   }
   //+---------------------------------------------------------------------------------+
   // Òîðãîâëÿ: îòêðûòèå îäíîãî îðäåðà âíóòðè îäíîãî áàðà
   //+---------------------------------------------------------------------------------+
   if (nORDER>=max.ORD)                                                                {
      if (Signal.Buy && Signal.Bars<Bars)                                              {
         OpenBuy(Symb.magic);
         return(0);
      }
      if (Signal.Sell && Signal.Bars<Bars)                                             {
         OpenSell(Symb.magic);
         return(0);
      }
   }
   return (0);
}
//+------------------------------------------------------------------------------------+
void OpenBuy(int Symbol.magic)                                                         { 
   ORD.Close.Buy=true;
   ORD.Close.Sell=false;
   if(ORD.Buy>=1 && Ask>PRC.Buy-5*Point) return(0);
   ord.ticket=OrderSend
      (Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,Name_Expert,Symbol.magic,0,Blue); 
   if(ord.ticket<0)                                                                    {
      Print("Çíà÷åíèå òèêåòà ",ord.ticket," Îøèáêà",GetLastError());
      return(0);
   }
   PRC.Buy=Ask;
   Signal.Bars=Bars;
   ORD.Buy++;
   ORD.Sell=0;
} 
//+------------------------------------------------------------------------------------+
void OpenSell(int Symbol.magic)                                                        { 
   ORD.Close.Sell=true;
   ORD.Close.Buy=false;
   if(ORD.Sell>=1 && Bid<PRC.Sell+5*Point) return(0);
   ord.ticket=OrderSend
      (Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,Name_Expert,Symbol.magic,0,Red); 
   if(ord.ticket<0)                                                                    {
      Print("Çíà÷åíèå òèêåòà ",ord.ticket," Îøèáêà",GetLastError());
      return(0);
   }
   PRC.Sell=Bid;
   Signal.Bars=Bars;
   ORD.Sell++;
   ORD.Buy=0;
} 
//+------------------------------------------------------------------------------------+
void StopBuy(int Symbol.magic)                                                         {
   for (int i=0; i<OrdersTotal(); i++)                                                 { 
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))                                  { 
          if (OrderSymbol()==Symbol() && OrderMagicNumber()==Symbol.magic)             {    
            if (OrderType()==OP_BUY)                                                   { 
               OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Blue); 
            }
         } 
      } 
   }
}
//+------------------------------------------------------------------------------------+
void StopSell(int Symbol.magic)                                                        {
   for (int i=0; i<OrdersTotal(); i++)                                                 { 
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))                                  { 
         if (OrderSymbol()==Symbol() && OrderMagicNumber()==Symbol.magic)              {    
            if (OrderType()==OP_SELL)                                                  { 
               OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Red); 
            }
         } 
      } 
   }
}
//+------------------------------------------------------------------------------------+

Comments