//+------------------------------------------------------------------+
//|                                                     BBLucaEA.mq4 |
//|                              Copyright 2005-2020, by. ganztrade. |
//|                                              http://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright   "2005-2020, by. ganztrade."
#property link        "http://www.mql4.com"


input double Lots          =0.01;
input int      ATRPeriod =14;
input double   ATRTPFactor = 0.5;
input double   ATRSLFactor = 1;
input int      BBPeriod=20;
input double   BBDeviation = 2;
input int      Timeframe = 1440;
double multiplier;
double TakeProfit;
double StopLoss;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//---
      if(Digits == 2 || Digits == 4) multiplier = 1;
      if(Digits == 3 || Digits == 5) multiplier = 10;
      if(Digits == 6) multiplier = 100;
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
    ObjectsDeleteAll(0,OBJ_TEXT);
    ObjectsDeleteAll(0,OBJ_LABEL);
//---
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick(void)
  {

   int    ticket,total;
   
   double BBUpper, BBLower,myOpen,myClose,myHigh,myLow,ATR;
   
   ATR = (iATR(Symbol(), Timeframe, ATRPeriod, 1)) / (multiplier*Point);
   BBUpper = iBands(Symbol(), Timeframe, BBPeriod, BBDeviation, 0, PRICE_OPEN, MODE_UPPER, 0);
   BBLower = iBands(Symbol(), Timeframe, BBPeriod, BBDeviation, 0, PRICE_OPEN, MODE_LOWER, 0);
   myOpen = iOpen(Symbol(), Timeframe, 0);
   myClose = iClose(Symbol(), Timeframe, 1);
   myHigh = iHigh(Symbol(), Timeframe, 1);
   myLow = iLow(Symbol(), Timeframe, 1);
   
   TakeProfit  = ATR * ATRTPFactor;
   StopLoss    = ATR * ATRSLFactor;
   
   total=OrdersTotal();
   if(total<1)
     {
      //--- check for long position (BUY) possibility
      if (myClose >  BBUpper && myClose <= myOpen && Ask > BBUpper)  
        {
         
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-(StopLoss*Point*multiplier),Ask+(TakeProfit*Point*multiplier),"buy",111,0,clrLime);
             
         return;
        }
     
      //--- check for short position (SELL) possibility
      if (myClose < BBLower && myClose >= myOpen && Bid < BBLower)  
         {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+(StopLoss*Point*multiplier),Bid-(TakeProfit*Point*multiplier),"sell",222,0,clrRed);
                    
      return;     
         }
     }
     
//+------------------------------------------------------------------+
//| Label function                                                   |
//+------------------------------------------------------------------+    
   
   CreateLabel("Profit",5,15,"Profit",8,"Arial",clrDodgerBlue,"");
   CreateLabel("Balance",5,30,"Balance",8,"Arial",clrDodgerBlue,"");
   CreateLabel("Equity",5,45,"Equity",8,"Arial",clrDodgerBlue,"");
   
   if (DoubleToStr(AccountProfit(),2) < 0)  CreateLabel("Profitx",85,15,DoubleToStr(AccountProfit(),2) + " $",8,"Arial",clrRed,DoubleToStr(AccountProfit(),2));
         else {
         if (DoubleToStr(AccountProfit(),2) > 0)  CreateLabel("Profitx",85,15,DoubleToStr(AccountProfit(),2) + " $",8,"Arial",clrLime,DoubleToStr(AccountProfit(),2));}   

   CreateLabel("Balancex",85,30,DoubleToStr(AccountBalance(),2) + " $",8,"Arial",clrYellow,DoubleToStr(AccountBalance(),2));
   
   if (DoubleToStr(AccountEquity(),2) <= DoubleToStr(AccountBalance(),2))  CreateLabel("Equityx",85,45,DoubleToStr(AccountEquity(),2) + " $",8,"Arial",clrRed,DoubleToStr(AccountEquity(),2));
         else {
         if (DoubleToStr(AccountEquity(),2) > DoubleToStr(AccountBalance(),2))  CreateLabel("Equityx",85,45,DoubleToStr(AccountEquity(),2) + " $",8,"Arial",clrLime,DoubleToStr(AccountEquity(),2));}   


   CreateLabel("BBLucaEA",5,60,"BBLucaEA",10,"Arial Narrow",clrPink,"");
   CreateLabel("Credit",5,75,"by. ganztrade",9,"Arial Narrow",clrPink,"");
//---
  }
  
//+------------------------------------------------------------------+
//| Draw Label function                                              |
//+------------------------------------------------------------------+
void CreateLabel(string name,int x,int y,string label,int size=9,string font="Arial",color clr=DimGray,string tooltip="")
  {
//--- 
   if (ObjectFind(name)) ObjectDelete(name);
   ObjectCreate(name,OBJ_LABEL,0,0,0);
   ObjectSetText(name,label,size,font,clr);
   ObjectSet(name,OBJPROP_CORNER,0);
   ObjectSet(name,OBJPROP_XDISTANCE,x);
   ObjectSet(name,OBJPROP_YDISTANCE,y);
   ObjectSetString(0,name,OBJPROP_TOOLTIP,tooltip);
//---
  }
