//+------------------------------------------------------------------+
//|                                         Candle Trend             |
//+------------------------------------------------------------------+
#property copyright " www.mql5.com "
#property link      "https://www.mql5.com"
#property strict

#property indicator_buffers 5
#property indicator_separate_window

enum enTimeFrames
{
   tf_cu  = 0,           
   tf_m1  = PERIOD_M1, 
   tf_m5  = PERIOD_M5, 
   tf_m15 = PERIOD_M15,  
   tf_m30 = PERIOD_M30,  
   tf_h1  = PERIOD_H1,
   tf_h4  = PERIOD_H4, 
   tf_d1  = PERIOD_D1,  
   tf_w1  = PERIOD_W1,  
   tf_mb1 = PERIOD_MN1, 
};

extern enTimeFrames      TimeFrame = tf_cu;
extern int    NumBars              = 300;
extern int    Udoji                = 10;
extern int    Ddoji                = -10;
extern ENUM_BASE_CORNER  corner    = CORNER_LEFT_UPPER;
extern int    XDISTANCE            = 1100;
extern int    YDISTANCE            = 5;
extern int    FontSize             = 10;
extern int    Windowid             = 1;
extern string ids                  = "T";

string sObjName;
string sObjName0;
string sObjName1;
string sObjName2;
string sObjName3;
string sObjName4;
string sObjName5;
string sObjName6;
string sObjName7;
string sObjName8;
string sObjName9;

double UpTicks;
double DownTicks;
double Bullvol[];
double Bearvol[];
double Dojivol[];
double Diff[];
//+------------------------------------------------------------------+
int init()
  {
   IndicatorDigits(1);
   
   SetIndexBuffer(0, Bullvol);
   SetIndexStyle(0,DRAW_LINE, 0, 2,clrGreen);
   SetIndexBuffer(1, Bearvol);
   SetIndexStyle(1,DRAW_LINE, 0, 2,clrRed);
   SetIndexBuffer(2, Dojivol);
   SetIndexStyle(2,DRAW_LINE, 0, 2,clrBlue);
  // SetIndexStyle(3,DRAW_LINE, 0, 2,Aqua);
   SetIndexBuffer(3, Diff);
  // SetIndexStyle(4,DRAW_LINE, 0, 2,Yellow);
  // SetIndexBuffer(4, BeDiff);
   Comment( "Created by LittleWest @ ForexFactory");

   return(0);
  }
//+------------------------------------------------------------------+
int deinit() 
{  
   ObjectDelete(sObjName+ids);
   ObjectDelete(sObjName0+ids);
   ObjectDelete(sObjName1+ids);
   ObjectDelete(sObjName2+ids);   
   ObjectDelete(sObjName3+ids);
   ObjectDelete(sObjName4+ids);
   ObjectDelete(sObjName5+ids);
   ObjectDelete(sObjName6+ids);
   ObjectDelete(sObjName7+ids);
   ObjectDelete(sObjName8+ids);
   ObjectDelete(sObjName9+ids);
   
   return(0);
}

//+------------------------------------------------------------------+
int start()
  {
   ObjectDelete(sObjName2+ids);
   ObjectDelete(sObjName4+ids);
   ObjectDelete(sObjName5+ids);
  
   int    j,counted_bars = IndicatorCounted();
   double Bull=0,Bear=0,Doji=0,dojivol=0,bullvol=0,bearvol=0,total=0,budiff=0,bediff=0,open,close,high,low,Pip,rang,vol,UpCandle=0,DownCandle=0;
   
   if(counted_bars>1)
   for(j=0; j<NumBars; j++)
   {
   vol   = (int)iVolume(NULL,TimeFrame,j);
   close = iClose(NULL,TimeFrame,j);
   open  = iOpen (NULL,TimeFrame,j);
   high  = iHigh (NULL,TimeFrame,0);
   low   = iLow  (NULL,TimeFrame,0);  
   Pip   = (iClose(NULL,TimeFrame,0)/Point- iOpen(NULL,TimeFrame,0)/Point); 
   rang  = (high - low)/Point;
        
   if(close > open)
   {
   UpCandle=(close-open)/Point ; 

   if (UpCandle >= Ddoji && UpCandle <= Udoji) Doji++ ; else Bull++;
   
   if (UpCandle >= Ddoji && UpCandle <= Udoji) dojivol = dojivol+vol; else bullvol = bullvol+vol; 
   }
   
   if(close < open)
   {
   DownCandle =(open-close)/Point ;
   
   if (DownCandle  <= Udoji && DownCandle >= Ddoji ) Doji++; else  Bear++;
   
   if (DownCandle  <= Udoji && DownCandle >= Ddoji ) dojivol = dojivol+vol; else  bearvol = bearvol+vol;
   } 
   
   if(bullvol>bearvol){budiff=bullvol-bearvol;}
   if(bearvol>bullvol){bediff=bearvol-bullvol;}
   total=bullvol+bearvol+dojivol;
        
   if(budiff>bediff){Diff[j]=budiff;SetIndexStyle(3,DRAW_LINE, 0, 2,clrAqua);}
   if(bediff>budiff){Diff[j]=bediff;SetIndexStyle(3,DRAW_LINE, 0, 2,clrYellow);}
   
  
   double a = bullvol;
   double b = bearvol;
   double c = dojivol;
   double d = (bullvol*100)/24;
   double e = (bearvol*100)/24;
   double f = (dojivol*100)/24;  
   double g = (bullvol*100)/NumBars;
   double h = (bearvol*100)/NumBars;
   double i = (dojivol*100)/NumBars;

   Bullvol[j] = a; 
   Bearvol[j] = b; 
   Dojivol[j] = c;
   
   
   
   string text = " TF  =  " +stringMTF(TimeFrame); 
   sObjName="InfoBar";
   ObjectCreate(sObjName+ids, OBJ_LABEL, Windowid, 0, 0);
   ObjectSetText(sObjName+ids,text, FontSize, "Arial", clrAqua);
   ObjectSet(sObjName+ids, OBJPROP_CORNER, corner);
   ObjectSet(sObjName+ids, OBJPROP_XDISTANCE, XDISTANCE+110);
   ObjectSet(sObjName+ids, OBJPROP_YDISTANCE, YDISTANCE+100);
   
   string text0 ="Bars      = "+IntegerToString(NumBars); 
   sObjName0="InfoBar0";
   ObjectCreate(sObjName0+ids, OBJ_LABEL, Windowid, 0, 0);
   ObjectSetText(sObjName0+ids,text0, FontSize, "Arial", clrAqua);
   ObjectSet(sObjName0+ids, OBJPROP_CORNER, corner);
   ObjectSet(sObjName0+ids, OBJPROP_XDISTANCE, XDISTANCE);
   ObjectSet(sObjName0+ids, OBJPROP_YDISTANCE, YDISTANCE);

   string text1 ="UBars    = "+DoubleToStr(Bull,0);
   sObjName1="InfoBar1";
   ObjectCreate(sObjName1+ids, OBJ_LABEL, Windowid, 0, 0);
   ObjectSetText(sObjName1+ids,text1, FontSize, "Arial", clrLime);
   ObjectSet(sObjName1+ids, OBJPROP_CORNER, corner);
   ObjectSet(sObjName1+ids, OBJPROP_XDISTANCE, XDISTANCE);
   ObjectSet(sObjName1+ids, OBJPROP_YDISTANCE, YDISTANCE+20);
   
   double s = (Bull*100)/NumBars;
   string text7 = "         = "+DoubleToString(s,2)+ "%";
   sObjName7="InfoBar7";
   ObjectCreate(sObjName7+ids, OBJ_LABEL, Windowid, 0, 0);
   ObjectSetText(sObjName7+ids,text7, FontSize, "Arial", clrLime); 
   ObjectSet(sObjName7+ids, OBJPROP_CORNER, corner);
   ObjectSet(sObjName7+ids, OBJPROP_XDISTANCE, XDISTANCE+80);
   ObjectSet(sObjName7+ids, OBJPROP_YDISTANCE,YDISTANCE+20);

   string text3 ="DBars    = "+DoubleToStr(Bear,0);    
   sObjName3="InfoBar3";
   ObjectCreate(sObjName3+ids, OBJ_LABEL, Windowid, 0, 0);
   ObjectSetText(sObjName3+ids,text3, FontSize, "Arial", clrRed);
   ObjectSet(sObjName3+ids, OBJPROP_CORNER, corner);
   ObjectSet(sObjName3+ids, OBJPROP_XDISTANCE, XDISTANCE);
   ObjectSet(sObjName3+ids, OBJPROP_YDISTANCE,YDISTANCE+40);
   
   double t = (Bear*100)/NumBars;
   string text8 ="         = "+DoubleToString(t,2)+ "%";   
   sObjName8="InfoBar8";
   ObjectCreate(sObjName8+ids, OBJ_LABEL, Windowid, 0, 0);
   ObjectSetText(sObjName8+ids,text8, FontSize, "Arial", clrRed);
   ObjectSet(sObjName8+ids, OBJPROP_CORNER, corner);
   ObjectSet(sObjName8+ids, OBJPROP_XDISTANCE, XDISTANCE+80);
   ObjectSet(sObjName8+ids, OBJPROP_YDISTANCE,YDISTANCE+40);

   string text6 ="Doji        = "+DoubleToString(Doji,0);
   sObjName6="InfoBar6";
   ObjectCreate(sObjName6+ids, OBJ_LABEL, Windowid, 0, 0);
   ObjectSetText(sObjName6+ids,text6, FontSize, "Arial", clrYellow);
   ObjectSet(sObjName6+ids, OBJPROP_CORNER, corner);
   ObjectSet(sObjName6+ids, OBJPROP_XDISTANCE, XDISTANCE);
   ObjectSet(sObjName6+ids, OBJPROP_YDISTANCE,YDISTANCE+60);
   
   double u = (Doji*100)/NumBars;
   string text9 ="         = "+DoubleToString(u,2)+ "%";   
   sObjName9="InfoBar9";
   ObjectCreate(sObjName9+ids, OBJ_LABEL, Windowid, 0, 0);
   ObjectSetText(sObjName9+ids,text9, FontSize, "Arial", clrYellow);
   ObjectSet(sObjName9+ids, OBJPROP_CORNER, corner);
   ObjectSet(sObjName9+ids, OBJPROP_XDISTANCE, XDISTANCE+80);
   ObjectSet(sObjName9+ids, OBJPROP_YDISTANCE,YDISTANCE+60);
   
   
   if (Pip > 0) { UpTicks   = Pip;  DownTicks = 0;}
   if (Pip < 0) { DownTicks = Pip ; UpTicks   = 0;}
   if (Pip == 0){ DownTicks = 0;    UpTicks   = 0;}
   
   string text5 ="BUY      = "+ DoubleToStr(UpTicks,0)+"";
   sObjName5="InfoBar5";
   ObjectCreate(sObjName5+ids, OBJ_LABEL, Windowid, 0, 0);
   ObjectSetText(sObjName5+ids,text5, FontSize, "Arial", clrLime);
   ObjectSet(sObjName5+ids, OBJPROP_CORNER, corner);
   ObjectSet(sObjName5+ids, OBJPROP_XDISTANCE, XDISTANCE);
   ObjectSet(sObjName5+ids, OBJPROP_YDISTANCE,YDISTANCE+90);

   string text4 ="SELL     = "+ DoubleToStr(DownTicks*(-1),0)+"";
   sObjName4="InfoBar4";
   ObjectCreate(sObjName4+ids, OBJ_LABEL, Windowid, 0, 0);
   ObjectSetText(sObjName4+ids,text4, FontSize, "Arial", clrRed); 
   ObjectSet(sObjName4+ids, OBJPROP_CORNER, corner);
   ObjectSet(sObjName4+ids, OBJPROP_XDISTANCE, XDISTANCE);
   ObjectSet(sObjName4+ids, OBJPROP_YDISTANCE,YDISTANCE+110);
   
   string text2 ="Rang     = "+DoubleToString(rang,0);
   sObjName2="InfoBar2";
   ObjectCreate(sObjName2+ids, OBJ_LABEL, Windowid, 0, 0);
   if ( UpTicks   == Pip ) {ObjectSetText(sObjName2+ids,text2, FontSize, "Arial", clrLime);}else
   if ( DownTicks == Pip ) {ObjectSetText(sObjName2+ids,text2, FontSize, "Arial", clrRed);} else
   ObjectSetText(sObjName2+ids,text2, FontSize, "Arial", clrYellow);
   ObjectSet(sObjName2+ids, OBJPROP_CORNER, corner);
   ObjectSet(sObjName2+ids, OBJPROP_XDISTANCE, XDISTANCE);
   ObjectSet(sObjName2+ids, OBJPROP_YDISTANCE,YDISTANCE+130);
 
   }
   return(0);
 }  
//+------------------------------------------------------------------+ 
string stringMTF(int perMTF)
{ 
   if (perMTF==0)      perMTF=_Period;
   if (perMTF==1)      return("M1");
   if (perMTF==5)      return("M5");
   if (perMTF==15)     return("M15");
   if (perMTF==30)     return("M30");
   if (perMTF==60)     return("H1");
   if (perMTF==240)    return("H4");
   if (perMTF==1440)   return("D1");
   if (perMTF==10080)  return("W1");
   if (perMTF==43200)  return("MN1");
   if (perMTF== 2 || 3  || 4  || 6  || 7  || 8  || 9 ||   
               10 || 11 || 12 || 13 || 14 || 16 || 17 || 18)  return("M"+(string)_Period);
//------
 return(StringConcatenate(perMTF));
}    
//+-------------------------- END -----------------------------------+