//+------------------------------------------------------------------+
//|                                               Hybrid Scalper.mq4 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Rodolphe Ahmad"
#property link      "https://www.mql5.com/en/users/rodoboss"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
     extern string expname = "Hybrid Scalper"; // Expert Name
     extern string expname2 = "M1 timeframe only"; // Expert Name
     extern string expname3 = "Optimised for Eur/Usd Ecn Broker Spread no more then 5 pipes "; // Expert Rules
     extern string expnameconfirm = " https://www.mql5.com/en/users/rodoboss"; // Contact Me :
     extern string ii = "//////////////////////"; ////////////////////// 
     extern int Rsilevel = 7; //RSI level
     extern int max_spread = 10; // Max spread ! Max 12 , best performance with 4 and lower
     extern string Ea="Ea will not work if Spread is more then 11 pipes! ";
     extern bool autocalculatelots = true; //Auto Calculate lot size
     extern double lot_size = 0.01; // Lot Size
     bool locked = false;
     extern bool  showinfo=true; //Show Account Info
     extern bool enablepush = true;//Enable push notification
     extern bool allowreverse = true; //Allow stop and reverse , please keep true
     int     pips2points;    // slippage  3 pips    3=points    30=points
     extern int magicnumber = 11;// Magic Number for Strategy 1
     extern int magicnumber2 = 12;// Magic Number for Strategy 2
     double secondstoploss = 1;
     double secondtakeprofit = 1;
     double firststoploss = 1;
     double firsttakeprofit = 1;
     double  pips2dbl;       // Stoploss 15 pips    0.0015      0.00150
     int     Digitspips;    // DoubleToStr(dbl/pips2dbl, Digits.pips)
     extern string expver = "V1"; // Expert Version
     extern bool MondayTrade = true; // Monday Trade
     extern bool TuesdayTrade = true; // Tuesday Trade
     extern bool WednesdayTrade = true; // Wednesday Trade
     extern bool ThursdayTrade = true; // Thursday Trade
     extern bool FridayTrade = true; // Friday Trade
     extern bool sendreportSaturday = true; //Send Report about Your Account to you via email each Saturday
     extern bool stopduringMarketvolatilityDays =true; // do not Stop expert during Market Volatility , please keep true!
     extern string VolatilityDetector = "if you wanna Risk set it to false!"; //Set Stop expert during market volatility to false if u wanna risk
     
     extern int bbperiod  = 50; // B Band period
     extern int bbdeviation = 4; // B Band deviation
     extern string iii = "//////////////////////"; //////////////////////
     int lockedfor =0;    //0 locked for buy   // 1 locked for sell  //Ea will not open more then 1 order only 
    
int OnInit()
  {
  
  if(showinfo ==  true)  //Show Account essential information
  {
    string str = "Account Name: " + AccountName() + "\n";
  str+=  "Company: " + AccountCompany() + "\n";
  str+=  "Account Leverage: " + (string)AccountLeverage() + "\n";
  str+=  "Min Lot: " + (string)MarketInfo(Symbol(), MODE_MINLOT) + "\n";
  str+= "Long Swap: " + (string)MarketInfo(Symbol(), MODE_SWAPLONG) + "\n";
  str+= "Short Swap: " + (string)MarketInfo(Symbol(), MODE_SWAPSHORT) + "\n";
  str+= "Spread:" + (string)MarketInfo(Symbol(), MODE_SPREAD) +"\n";
  str+= "Expert Name: " + WindowExpertName() +"\n";
  if(IsDemo()){str+= "Account Type: Demo";}else{str+= "Account Type:Real";}
  str +="\n";
  if(IsLibrariesAllowed()){str+= "Libraries Allowed";}else{str+= "Libraries not allowed";}
  str +="\n";
  str+= "Recomendation ...   Eur/usd M1  *Max recomended spread  0 to 5 pipes " + "\n";
  str+= "Magic Number 1: " + (string) magicnumber +"\n";
  str+= "Magic Number 2: " + (string) magicnumber2 +"\n";
  
  Comment(str);
  }
//---
     if (Digits == 5 || Digits == 3)
    {    // Adjust for five (5) digit brokers.
                pips2dbl    = Point*10; pips2points = 10;   Digitspips = 1;
    } 
    else {    pips2dbl    = Point;    pips2points =  1;   Digitspips = 0; }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
          if (   (int) TimeDayOfWeek(TimeLocal())== 1 || (int) TimeDayOfWeek(TimeLocal())== 2 || (int) TimeDayOfWeek(TimeLocal())== 3  || (int) TimeDayOfWeek(TimeLocal())== 4 || (int) TimeDayOfWeek(TimeLocal())== 5          )
          {
               if (isspreadok() && Period() == 1 && TradeAllowedforThisDay())
  {
          if (NoVolatility() == true)
          {
                trytoUnlock();
  
      if (locked ==false)
      {
        if ( noorders() == true)
        {
        
          if(getGreenStock() <20 && getRedStock() < getGreenStock() &&trenddirection()==true )
          tryCodeBuy();
          
           if(getGreenStock() >80 && getRedStock() < getGreenStock()&& trenddirection()==false )
          tryCodeSell();
        }
      
      }
      
      SellorBuy();
      SurviveOrdersstrategy1();
       SurviveOrdersstrategy2();
          }
  }
          }
          else if(  (int) TimeDayOfWeek(TimeLocal())== 6 )
          {
            if (sendreportSaturday == true)
            {
               Sleep(6 *3600);  //Sleep 6 H
               SendReport();
               Sleep(3600 *20); // Then Sleep 20 Hour
            }
          
          }
          
          
          
  }
//+------------------------------------------------------------------+
double getRsi()
{
    RefreshRates();
 double RSI;
 RSI=iRSI(Symbol(),0,Rsilevel,PRICE_CLOSE,0);
 return RSI;
}
double testSpread()
   { 
      if ( max_spread ==0)
      {
      return 0.0000;
      }
      else if( max_spread ==1)
      {
      return 0.0001;
      }
       else if( max_spread ==2)
      {
       return 0.0002;
      }
       else if( max_spread ==3)
      {
       return 0.0003;
      }
       else if( max_spread ==4)
      {
       return 0.0004;
      }
       else if( max_spread ==5)
      {
       return 0.0005;
      }
       else if( max_spread ==6)
      {
       return 0.0006;
      }
       else if( max_spread ==7)
      {
       return 0.0007;
      }
       else if( max_spread ==8)
      {
       return 0.0008;
      }
       else if( max_spread ==9)
      {
       return 0.0009;
      }
       else if( max_spread ==10)
      {
      return 0.0010;
      }
       else if( max_spread ==11)
      {
       return 0.0011;
      }
       else if( max_spread ==12)
      {
       return 0.0012;
      }
      else { return 0.0010;}
      return 0.0010;
   }
   double calculateit()
   {
       if (autocalculatelots == false){ return lot_size;}
       else
       {
       
         if ( AccountBalance()>0 && AccountBalance() <=100)
         return 0.03;
     
         if ( AccountBalance()>100 && AccountBalance() <=500)
         return 0.10;
         if ( AccountBalance()>500 && AccountBalance() <=1000)
         return 0.20;
         if ( AccountBalance()>1000 && AccountBalance() <=5000)
         return 0.22;
         if ( AccountBalance()>5000 && AccountBalance() <=10000)
        return 0.30;
         if ( AccountBalance()>10000 && AccountBalance() <=20000)
         return 0.35;
         if ( AccountBalance()>20000 && AccountBalance() <=50000)
         return 0.40;
         if ( AccountBalance()>50000 && AccountBalance() <=100000)
         return 0.70;
         if ( AccountBalance()>100000 && AccountBalance() <=500000)
         return 0.80;
           if ( AccountBalance()>500000 )
         return 1.00;
          
       }
   return lot_size;
   }
   
    bool  isspreadok()
{
      return  ( (Ask- Bid)  <= testSpread() );
}
void trytoUnlock()
{
 
  if (locked == true)
  {
 
            if(lockedfor == 1)
            {
              if (getRsi()>70 )
        
             {
              lockedfor = 0;
              locked = false;
             }
            }
                  if(lockedfor == 2)
            {
            if (getRsi()<30 )
              
             {
              lockedfor = 0;
              locked = false;
             }
            }
            
            
  }
}
   bool noorders()
   {
   
     RefreshRates();
 int total = OrdersTotal();
 
 for(int i=total-1;i>=0;i--)
 {
 // orderstp 7
 
int s = OrderSelect(i, SELECT_BY_POS);
 int mn   = OrderMagicNumber();
 int ticket=-1;
 double ordertp=0;
 bool result =  false;
 
int result2=0;
 
 
   if (mn== magicnumber  || mn==magicnumber2)
   {
    return false;
   }
   
   
     return true;
     
   } return true;}
void tryCodeBuy()      
{
        
          if ( Bid < getRsi() && Ask < getRsi() && getRsi()<25 ) 
          {
                   locked = true;
                   lockedfor = 1;
                    sendpush(1);
                openorder("buy",calculateit());
          }
       
      
 
       
}
void tryCodeSell()     
{
        
          if (  Bid > getRsi() && Ask > getRsi() && getRsi()>85)  
          {
                   locked = true;
                   lockedfor = 2;
                    sendpush(2);
                   openorder("sell",calculateit());
          }
       
        
}
 void openorder(string buysell , double lotsize  )
 {
    
           int ticket1 =-1;
           
 
    
    
    RefreshRates(); //must be always called before opening an order
    
    if(buysell == "buy")
    {
    ticket1 = OrderSend(Symbol() , OP_BUY , lotsize , Ask , 2*pips2points ,/* stoploss */0 ,  0,"",magicnumber);
       
    
    }
    else if (buysell == "sell")
    {
    ticket1 = OrderSend(Symbol() , OP_SELL , lotsize, Bid , 2*pips2points ,/* stoploss */ 0,0,"",magicnumber); 
    }
 }
  void openorderstrategy2(string buysell , double lotsize  )
 {
    
           int ticket1 =-1;
           
 
    
    
    RefreshRates(); //must be always called before opening an order
    
    if(buysell == "buy")
    {
    ticket1 = OrderSend(Symbol() , OP_BUY , lotsize , Ask , 2*pips2points ,Bid-firststoploss* pips2dbl , Bid+firsttakeprofit* pips2dbl,"",magicnumber2);
       
    
    }
    else if (buysell == "sell")
    {
    ticket1 = OrderSend(Symbol() , OP_SELL , lotsize , Bid , 2*pips2points ,Ask+firststoploss* pips2dbl , Ask-firsttakeprofit* pips2dbl,"",magicnumber2); 
    }
 }
 void SellorBuy()
{  
//pips2dbl
   
int ticket1 =-1;
     if (Digits == 5 || Digits == 3)
    {    // Adjust for five (5) digit brokers.
                pips2dbl    = Point*10; pips2points = 10;   Digitspips = 1;
    } 
    else {    pips2dbl    = Point;    pips2points =  1;   Digitspips = 0; }
//end pips2dbl
   string mode= "";
   RefreshRates();
 int total = OrdersTotal();
 
 for(int i=total-1;i>=0;i--)
 {
 // orderstp 7
 
int s = OrderSelect(i, SELECT_BY_POS);
 int type   = OrderType();
 int ticket=-1;
 double ordertp=0;
 bool result =  false;
 
int result2=0;
 
 
  switch(type)
   {
     //Close opened long positions
     case OP_BUY       :
     
      {
        
        ticket= OrderTicket();
        mode = "buy";
        ordertp = OrderTakeProfit();
     
    //     Alert( (string)ticket + "profit : " + (string)ordertp);
       break;
      }
                        
     //Close opened short positions
     case OP_SELL      :
     {
       ticket= OrderTicket();
        mode = "sell";
        ordertp = OrderTakeProfit();
          //     Alert( (string)ticket + "profit : " + (string)ordertp);
           
     break;
     }
     
   //   result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );
   }
   // append order while straight to take profit
   if (mode == "buy")
   {
     RefreshRates();
     
           if(lockedfor ==1)
           {
            if( OrderMagicNumber() == magicnumber  && OrderSymbol() == Symbol() )
            {
           
            
            if (getRsi() >31) //impold 31
            {
          if( (OrderMagicNumber() == magicnumber) && ( OrderSymbol() == Symbol() ) )
     {
     int md =OrderModify(ticket,Ask,Bid-secondstoploss* pips2dbl , Bid+secondtakeprofit* pips2dbl,0,White); // stoploss
     }
            }
            if (getRsi()<5)
            {
              bool   cl = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID),  2*pips2points, Red );
              
              if(allowreverse == true)
              {
               sendpush(2);
              openorderstrategy2("sell",calculateit());
              }
              
            }
           }
   }
    }
   
   if (mode == "sell")
   {
   RefreshRates();
      if(lockedfor ==2)
           {
            if( OrderMagicNumber() == magicnumber  && OrderSymbol() == Symbol() )
            {
                  if (getRsi() <65)//impold 65
            {
                if((OrderMagicNumber() == magicnumber) && ( OrderSymbol() == Symbol() ))
     {
     int md= OrderModify(ticket,Bid,Ask+secondstoploss* pips2dbl , Ask-secondtakeprofit* pips2dbl,0,White); // stoploss
        }   }
            if (getRsi()>95)
            {
            
             bool cl = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK),  2*pips2points, Red );
             if(allowreverse == true)
             {
             sendpush(1);
             openorderstrategy2("buy",calculateit());
             }
             
            }
           
           
           }
 
          }
   }
   
 }
}
void SurviveOrdersstrategy1()
{  
//pips2dbl
   
int ticket1 =-1;
     if (Digits == 5 || Digits == 3)
    {    // Adjust for five (5) digit brokers.
                pips2dbl    = Point*10; pips2points = 10;   Digitspips = 1;
    } 
    else {    pips2dbl    = Point;    pips2points =  1;   Digitspips = 0; }
//end pips2dbl
   string mode= "";
   RefreshRates();
 int total = OrdersTotal();
 
 for(int i=total-1;i>=0;i--)
 {
 // orderstp 7
 
int s = OrderSelect(i, SELECT_BY_POS);
 int type   = OrderType();
 int ticket=-1;
 double ordertp=0;
 bool result =  false;
 
int result2=0;
 
 
  switch(type)
   {
     //Close opened long positions
     case OP_BUY       :
     
      {
        
        ticket= OrderTicket();
        mode = "buy";
        ordertp = OrderTakeProfit();
     
    //     Alert( (string)ticket + "profit : " + (string)ordertp);
       break;
      }
                        
     //Close opened short positions
     case OP_SELL      :
     {
       ticket= OrderTicket();
        mode = "sell";
        ordertp = OrderTakeProfit();
          //     Alert( (string)ticket + "profit : " + (string)ordertp);
           
     break;
     }
     
   //   result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );
   }
   // append order while straight to take profit
   if (mode == "buy")
   {
     RefreshRates();
     if ( (Bid + 0.00001  == ordertp) || (Bid + 0.00002  == ordertp) || (Bid + 0.00003  == ordertp) || (Bid + 0.00004  == ordertp) || (Bid + 0.00005  == ordertp) || (Bid + 0.00006  == ordertp) || (Bid + 0.00007  == ordertp)|| (Bid + 0.00008  == ordertp)|| (Bid + 0.00009  == ordertp)|| (Bid + 0.00010  == ordertp) )
     {
     
     if( (OrderMagicNumber() == magicnumber) && ( OrderSymbol() == Symbol() ) )
     {
     int md =OrderModify(ticket,Ask,Bid-secondstoploss* pips2dbl , Bid+secondtakeprofit* pips2dbl,0,White); // stoploss
     }
       
      
   
     
     }
       
  
   }
   
   if (mode == "sell")
   {
   RefreshRates();
   if((Ask - 0.00001 == ordertp) || (Ask - 0.00002 == ordertp) || (Ask - 0.00003 == ordertp)|| (Ask - 0.00004 == ordertp)|| (Ask - 0.00005 == ordertp)|| (Ask - 0.00006 == ordertp)|| (Ask - 0.00007 == ordertp)|| (Ask - 0.00008 == ordertp)|| (Ask - 0.00009 == ordertp)|| (Ask - 0.00010 == ordertp) )
   {
   
    if((OrderMagicNumber() == magicnumber) && ( OrderSymbol() == Symbol() ))
     {
     int md= OrderModify(ticket,Bid,Ask+secondstoploss* pips2dbl , Ask-secondtakeprofit* pips2dbl,0,White); // stoploss
        }
        
        
 
   }
          
   }
   
 }
}
void SurviveOrdersstrategy2()
{  
//pips2dbl
   
int ticket1 =-1;
     if (Digits == 5 || Digits == 3)
    {    // Adjust for five (5) digit brokers.
                pips2dbl    = Point*10; pips2points = 10;   Digitspips = 1;
    } 
    else {    pips2dbl    = Point;    pips2points =  1;   Digitspips = 0; }
//end pips2dbl
   string mode= "";
   RefreshRates();
 int total = OrdersTotal();
 
 for(int i=total-1;i>=0;i--)
 {
 // orderstp 7
 
int s = OrderSelect(i, SELECT_BY_POS);
 int type   = OrderType();
 int ticket=-1;
 double ordertp=0;
 bool result =  false;
 
int result2=0;
 
 
  switch(type)
   {
     //Close opened long positions
     case OP_BUY       :
     
      {
        
        ticket= OrderTicket();
        mode = "buy";
        ordertp = OrderTakeProfit();
     
    //     Alert( (string)ticket + "profit : " + (string)ordertp);
       break;
      }
                        
     //Close opened short positions
     case OP_SELL      :
     {
       ticket= OrderTicket();
        mode = "sell";
        ordertp = OrderTakeProfit();
          //     Alert( (string)ticket + "profit : " + (string)ordertp);
           
     break;
     }
     
   //   result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );
   }
   // append order while straight to take profit
   if (mode == "buy")
   {
     RefreshRates();
     if ( (Bid + 0.00001  == ordertp) || (Bid + 0.00002  == ordertp) || (Bid + 0.00003  == ordertp) || (Bid + 0.00004  == ordertp) || (Bid + 0.00005  == ordertp) || (Bid + 0.00006  == ordertp) || (Bid + 0.00007  == ordertp)|| (Bid + 0.00008  == ordertp)|| (Bid + 0.00009  == ordertp)|| (Bid + 0.00010  == ordertp) )
     {
     
     if( (OrderMagicNumber() == magicnumber2) && ( OrderSymbol() == Symbol() ) )
     {
     int md =OrderModify(ticket,Ask,Bid-secondstoploss* pips2dbl , Bid+secondtakeprofit* pips2dbl,0,White); // stoploss
     }
       
      
   
     
     }
       
  
   }
   
   if (mode == "sell")
   {
   RefreshRates();
   if((Ask - 0.00001 == ordertp) || (Ask - 0.00002 == ordertp) || (Ask - 0.00003 == ordertp)|| (Ask - 0.00004 == ordertp)|| (Ask - 0.00005 == ordertp)|| (Ask - 0.00006 == ordertp)|| (Ask - 0.00007 == ordertp)|| (Ask - 0.00008 == ordertp)|| (Ask - 0.00009 == ordertp)|| (Ask - 0.00010 == ordertp) )
   {
   
    if((OrderMagicNumber() == magicnumber2) && ( OrderSymbol() == Symbol() ))
     {
     int md= OrderModify(ticket,Bid,Ask+secondstoploss* pips2dbl , Ask-secondtakeprofit* pips2dbl,0,White); // stoploss
        }
        
        
 
   }
          
   }
   
 }
}
double getGreenStock()
{
  RefreshRates();
       double kline = 0;
       double dline=0;
      kline  = iStochastic(Symbol(), Period(), 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 0);  //old  5   3   3
      dline  = iStochastic(Symbol(), Period(), 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, 0); 
 
 return  kline;
}
 double getRedStock()
{
  RefreshRates();
       double kline = 0;
       double dline=0;
      kline  = iStochastic(Symbol(), Period(), 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 0);
      dline  = iStochastic(Symbol(), Period(), 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, 0); 
 
 return  dline;
}
void sendpush(int a )
{
               if(enablepush==true && a==1)
               {
                SendNotification("Hybrid Scalper Good time to go long " + Symbol() + (string)TimeCurrent() + "Spread" + (string)MarketInfo(Symbol(),MODE_SPREAD) + " Equity:" + (string)AccountEquity() + "Free Margin" + (string)AccountFreeMargin()) ;
                SendMail("Hybrid Scalper"," Good time to go long " + Symbol() + (string)TimeCurrent() + "Spread" + (string)MarketInfo(Symbol(),MODE_SPREAD) + " Equity:" + (string)AccountEquity() + "Free Margin" + (string)AccountFreeMargin());
               }
               
                   if(enablepush==true && a==2)
               {
                SendNotification("Hybrid Scalper Good time to go Short " + Symbol() + (string)TimeCurrent() + "Spread" + (string)MarketInfo(Symbol(),MODE_SPREAD) + " Equity:" + (string)AccountEquity() + "Free Margin" + (string)AccountFreeMargin()) ;
                SendMail("Hybrid Scalper"," Good time to go Short " + Symbol() + (string)TimeCurrent() + "Spread" + (string)MarketInfo(Symbol(),MODE_SPREAD) + " Equity:" + (string)AccountEquity() + "Free Margin" + (string)AccountFreeMargin());
               }
               
               }
                  
 
  bool trenddirection()
{
double price_ma_period_fast =21; //slow ma
double price_ma_period_slow =89; //fast ma 
//----
double pricefastmanow,priceslowmanow;
pricefastmanow = iMA(Symbol(),15,(int)price_ma_period_fast,0,MODE_EMA,PRICE_CLOSE,0);
priceslowmanow = iMA(Symbol(),15,(int)price_ma_period_slow,0,MODE_EMA,PRICE_CLOSE,0);
if (pricefastmanow > priceslowmanow)// bullish
{
return(true);
}
if (pricefastmanow < priceslowmanow)// bearish
{
return(false);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
return(0);
}
bool TradeAllowedforThisDay()
{
 
   
    if ( (int) TimeDayOfWeek(TimeLocal())== 1 && MondayTrade == true)
  {
  return true;
  }
  
      if ( (int) TimeDayOfWeek(TimeLocal())== 2 && TuesdayTrade == true)
  {
  return true;
  }
  
      if ( (int) TimeDayOfWeek(TimeLocal())== 3 && WednesdayTrade == true)
  {
  return true;
  }
  
      if ( (int) TimeDayOfWeek(TimeLocal())== 4 && ThursdayTrade == true)
  {
  return true;
  }
  
      if ( (int) TimeDayOfWeek(TimeLocal())== 5 && FridayTrade == true)
  {
  return true;
  }
  
  return false;
}
void SendReport()
{
  string str = "Account Name: " + AccountName() + "\n";
  str+=  "Company: " + AccountCompany() + "\n";
  str+=  "Account Leverage: " + (string)AccountLeverage() + "\n";
  str+= "Expert Name: " + WindowExpertName() +"\n";
  str +="\n";
  str += "Account Balance " + (string)AccountBalance() + "\n";
  str += "Account Equity " + (string)AccountEquity() + "\n";
  str += "Account Margin " + (string)AccountMargin() + "\n";
  str += "Account Free Margin " + (string)AccountFreeMargin() + "\n";
  str += "Total Profits (All time Profit)" + (string)AccountProfit() + "\n";
  str += "Have a nice Week end :)";
  SendMail("Hybrid Scalper Report",str);
  
  
}
bool NoVolatility()
{
 if (stopduringMarketvolatilityDays==false)
 return true;
 
 if (Day() == 14 && Month() == 12)
 return false;
 
  if (Day() == 15 && Month() == 12)
 return false;
  if (Day() == 16 && Month() == 12)
 return false;
  if (Day() == 17 && Month() == 12)
 return false;
  if (Day() == 18 && Month() == 12)
 return false;
  if (Day() == 19 && Month() == 12)
 return false;
  if (Day() == 20 && Month() == 12)
 return false;
  if (Day() == 21 && Month() == 12)
 return false;
  if (Day() == 22 && Month() == 12)
 return false;
  if (Day() == 23 && Month() == 12)
 return false;
  if (Day() == 24 && Month() == 12)
 return false;
  if (Day() == 25 && Month() == 12)
 return false;
  if (Day() == 26 && Month() == 12)
 return false;
  if (Day() == 27 && Month() == 12)
 return false;
  if (Day() == 28 && Month() == 12)
 return false;
  if (Day() == 29 && Month() == 12)
 return false;
  if (Day() == 30 && Month() == 12)
 return false;
  if (Day() == 31 && Month() == 12)
 return false;
 
 
 
 
   if (Day() == 1 && Month() == 1)
 return false;
   if (Day() == 2 && Month() == 1)
 return false;
   if (Day() == 3 && Month() == 1)
 return false;
   if (Day() == 4 && Month() == 1)
 return false;
 
 if (stopduringMarketvolatilityDays==true)
 {
  if(getHigherIband() - getMiddleIband() > 0.00262)
 return false;
 
  if(getMiddleIband() - getLowerIband() > 0.00262)
 return false;
 
 
    if(getHigherIband() - getMiddleIband() < 0.00045)
 return false;
 
  if(getMiddleIband() - getLowerIband() <  0.00045)
 return false; 
 }
 
 
  
 
 return true;
}
double    getHigherIband()
{         RefreshRates();
        return iBands(NULL,0,bbperiod,bbdeviation,0,PRICE_CLOSE,MODE_LOW,0);
}
double    getLowerIband()
{         RefreshRates();
        return iBands(NULL,0,bbperiod,bbdeviation,0,PRICE_CLOSE,MODE_HIGH,0);
}
double    getMiddleIband()
{         RefreshRates();
        return iBands(NULL,0,bbperiod,bbdeviation,0,PRICE_CLOSE,MODE_MAIN,0);
}
             
            
            
            
Comments