//+------------------------------------------------------------------------------------+
//|                                               Ñîâåòíèê äëÿ ïðîâåäåíèÿ èññëåäîâàíèé |
//|                                                                  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