//+------------------------------------------------------------------+
//|                                                    cdlinf_05.mq4 |
//|                                       Copyright © 2011, thawvicx |
//|                                                  tvx68@yahoo.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, thawvicx"
#property link      "tvx68@yahoo.com"

#property indicator_chart_window
#property indicator_buffers 4

extern color head_Color=White;
extern color buyer_Color=Blue;
extern color seler_Color=Red;
extern color busel_Color=Green;

int tf[8],cV[8],hBdom[8],hSdom[8],hB[8],hS[8];
int domL[8],hBl[8],hSl[8];
string nTf[8],nTft[8],sdom[8],sdomV[8],shBdom[8],shSdom[8],lhBdom[8],lhSdom[8],lpotH[8],shBdomL[8],lhBdomL[8];
double pin,dom[8];
int cdlView,hidB[12],hidS[12],hidBV[12],hidSV[12];
string shidB[12],shidS[12],lpotNya[8],potNya[8],brs[8],Sbrs[8],sdomL[8];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   tf[0]=5;
   tf[1]=15;
   tf[2]=30;
   tf[3]=60;
   tf[4]=240;
   tf[5]=1440;
   tf[6]=10080;
   tf[7]=43200;
   nTf[0]="05m";
   nTf[1]="15m";
   nTf[2]="30m";
   nTf[3]="1-H";
   nTf[4]="4-H";
   nTf[5]="DAY";
   nTf[6]="WEK";
   nTf[7]="MON";
   nTft[0]="1-H";
   nTft[1]="4-H";
   nTft[2]="8-H";
   nTft[3]="DAY";
   nTft[4]="WEK";
   nTft[5]="MON";
   nTft[6]="6MN";
   nTft[7]="YER";
   cdlView=60;
   cV[0]=12;  //1H
   cV[1]=16;  //4H
   cV[2]=16;  //8H  
   cV[3]=24;  //Day   
   cV[4]=30;  //Week
   cV[5]=20;  //Month
   cV[6]=24;  //6Month
   cV[7]=12;  //Year
//---- indicators
   SetIndexLabel(0,"head");
   SetIndexLabel(1,"buyer");
   SetIndexLabel(2,"seler");
   SetIndexLabel(3,"busel");
   string label1a = "c_inf Index";
   ObjectDelete(label1a);
   ObjectCreate( label1a, OBJ_LABEL, 0, 0, 0 );
   ObjectSetText(label1a,"T-F",8,"Arial Bold", head_Color);
   ObjectSet( label1a, OBJPROP_CORNER, 0 );
   ObjectSet( label1a, OBJPROP_XDISTANCE, 3 );
   ObjectSet( label1a, OBJPROP_YDISTANCE, 10 );
   string label1d = "c_inf HidPot";
   ObjectDelete(label1d);
   ObjectCreate( label1d, OBJ_LABEL, 0, 0, 0 );
   ObjectSetText(label1d,"Potential",8, "Arial Bold", head_Color);
   ObjectSet( label1d, OBJPROP_CORNER, 0 );
   ObjectSet( label1d, OBJPROP_XDISTANCE, 3 );
   ObjectSet( label1d, OBJPROP_YDISTANCE, 70 );
   string label1e = "c_inf avgPot";
   ObjectDelete(label1e);
   ObjectCreate( label1e, OBJ_LABEL, 0, 0, 0 );
   ObjectSetText(label1e,"avg-Pot",8, "Arial Bold", head_Color);
   ObjectSet( label1e, OBJPROP_CORNER, 0 );
   ObjectSet( label1e, OBJPROP_XDISTANCE, 3 );
   ObjectSet( label1e, OBJPROP_YDISTANCE, 100 );
   int clm=10;
   string lbl[8],lblTo[8];
   for(int i=7;i>=0;i--) {
       lbl[i] = StringConcatenate("c_inf idx",nTf[i]);
       string label1 = lbl[i];
       string jud=StringConcatenate("[",nTf[i],"]");
       clm=clm+40;
       ObjectDelete(label1);
       ObjectCreate( label1, OBJ_LABEL, 0, 0, 0 );
       ObjectSetText(label1,jud,8, "Arial Bold", head_Color);
       ObjectSet( label1, OBJPROP_CORNER, 0 );
       ObjectSet( label1, OBJPROP_XDISTANCE, clm );
       ObjectSet( label1, OBJPROP_YDISTANCE, 10 );
       lblTo[i] = StringConcatenate("c_inf idx tot",nTft[i]);
       string label1To = lblTo[i];
       string judTo=StringConcatenate("[",nTft[i],"]");
       ObjectDelete(label1To);
       ObjectCreate( label1To, OBJ_LABEL, 0, 0, 0 );
       ObjectSetText(label1To,judTo,8, "Arial Bold", head_Color);
       ObjectSet( label1To, OBJPROP_CORNER, 0 );
       ObjectSet( label1To, OBJPROP_XDISTANCE, clm );
       ObjectSet( label1To, OBJPROP_YDISTANCE, 100 );
      }

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   for(int i = ObjectsTotal() - 1; i >= 0; i--)
     {
       string label = ObjectName(i);
       if(StringSubstr(label, 0, 5) != "c_inf")
           continue;
       ObjectDelete(label);   
     }   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
//----
   pin=InfoPasar(Symbol(),"popin");
   string lbl[8],lblV[8],spotH[8],pctSpotHL[8],pctSpotHs[8],pctDomS[8],pcTotS[8],lpcTot[8];
   double pctSpotH[8],pctDom[8],pcTot[8],pctDomL[8];
   int clm=10;
   string lblB[12],lblS[12],lblPot[12],spot[12];
   for(int x=7;x>=0;x--) {

   //*current candle status per TF
      pctDom[x]=0;
      pctDomS[x]="0X";
      dom[x]=(clCdl(tf[x],0)/pin)-(opCdl(tf[x],0)/pin);
      domL[x]=(clCdl(tf[x],1)/pin)-(opCdl(tf[x],1)/pin);
      hB[x]=(clCdl(tf[x],0)/pin)-(loCdl(tf[x],0)/pin);
      hS[x]=(hiCdl(tf[x],0)/pin)-(clCdl(tf[x],0)/pin);
      int hH=hB[x]-hS[x];
      if         (dom[x]>0&&hH>0) {sdom[x]="BUYER";color col=buyer_Color;
                             if(hS[x]>0) pctDom[x]=NormalizeDouble((hH/hS[x]),4);
                             else pctDom[x]=100;
                            }
        else {if (dom[x]<0&&hH<0) {sdom[x]="SELER";col=seler_Color;
                             if(hB[x]>0) pctDom[x]=NormalizeDouble(((hH*(-1))/hB[x]),4);
                             else pctDom[x]=100;
                            } 
                else        {sdom[x]="NOWIN";col=busel_Color;}}
      hBl[x]=(clCdl(tf[x],1)/pin)-(loCdl(tf[x],1)/pin);
      hSl[x]=(hiCdl(tf[x],1)/pin)-(clCdl(tf[x],1)/pin);
      int hHl=hBl[x]-hSl[x];
      if         (domL[x]>0) {sdomL[x]="BUYER";color colL=buyer_Color;
                             if(hSl[x]>0) pctDomL[x]=NormalizeDouble((domL[x]/hSl[x]),4);
                             else pctDomL[x]=100;
                            }
        else {if (domL[x]<0) {sdomL[x]="SELER";colL=seler_Color;
                             if(hBl[x]>0) pctDomL[x]=NormalizeDouble(((domL[x]*(-1))/hBl[x]),4);
                             else pctDomL[x]=100;
                            } 
                else        {sdomL[x]="NOWIN";colL=busel_Color;}}


      lbl[x] = StringConcatenate("c_inf busel",x);
      string label2 = lbl[x];
      clm=clm+40;
      ObjectDelete(label2);
      ObjectCreate( label2, OBJ_LABEL, 0, 0, 0 );
      ObjectSetText(label2,sdom[x],8, "Arial Bold", col);
      ObjectSet( label2, OBJPROP_CORNER, 0 );
      ObjectSet( label2, OBJPROP_XDISTANCE, clm );
      ObjectSet( label2, OBJPROP_YDISTANCE, 20 );
      lblV[x] = StringConcatenate("c_inf buselV",x);
      sdomV[x]=DoubleToStr(dom[x],0);          
      string label3 = lblV[x];
      ObjectDelete(label3);
      ObjectCreate( label3, OBJ_LABEL, 0, 0, 0 );
      ObjectSetText(label3,sdomV[x],8, "Arial Bold", col);
      ObjectSet( label3, OBJPROP_CORNER, 0 );
      ObjectSet( label3, OBJPROP_XDISTANCE, clm );
      ObjectSet( label3, OBJPROP_YDISTANCE, 30 );
      lhBdom[x] = StringConcatenate("c_inf pctDom",x);
      shBdom[x] = StringConcatenate(DoubleToStr(pctDom[x],0),"X");
      string label4 = lhBdom[x];
      ObjectDelete(label4);
      ObjectCreate( label4, OBJ_LABEL, 0, 0, 0 );
      ObjectSetText(label4,shBdom[x],8, "Arial Bold", col);
      ObjectSet( label4, OBJPROP_CORNER, 0 );
      ObjectSet( label4, OBJPROP_XDISTANCE, clm );
      ObjectSet( label4, OBJPROP_YDISTANCE, 40 );
      lhBdomL[x] = StringConcatenate("c_inf pctDomL",x);
      shBdomL[x] = StringConcatenate(DoubleToStr(pctDomL[x],0),"X");
      string label4L = lhBdomL[x];
      ObjectDelete(label4L);
      ObjectCreate( label4L, OBJ_LABEL, 0, 0, 0 );
      ObjectSetText(label4L,shBdomL[x],8, "Arial Bold", colL);
      ObjectSet( label4L, OBJPROP_CORNER, 0 );
      ObjectSet( label4L, OBJPROP_XDISTANCE, clm );
      ObjectSet( label4L, OBJPROP_YDISTANCE, 60 );


   //*hiden current candle status per TF
      hBdom[x]=(clCdl(tf[x],1)/pin)-(loCdl(tf[x],1)/pin);
      hSdom[x]=(hiCdl(tf[x],1)/pin)-(clCdl(tf[x],1)/pin);
      int potH=hBdom[x]-hSdom[x];
      pctSpotH[x]=0;
      pctSpotHs[x]="0X";
      if         (potH>0) {spotH[x]="BUYER";color col1=buyer_Color;
                           if(hSdom[x]>0) pctSpotH[x]=NormalizeDouble((potH/hSdom[x]),4);
                           else pctSpotH[x]=100;
                           }
        else {if (potH<0) {spotH[x]="SELER";col1=seler_Color;
                           if(hBdom[x]>0) pctSpotH[x]=NormalizeDouble(((potH*(-1))/hBdom[x]),4);
                           else pctSpotH[x]=100;
                           } 
           else           {spotH[x]="- 0 -";col1=busel_Color;}}
      //pctSpotH[x]=pctSpotH[x]*100;
      //lhSdom[x] = StringConcatenate("c_inf buselHSV",x);
      //shSdom[x] = DoubleToStr(hSdom[x],0);
      //string label5 = lhSdom[x];
      pctSpotHL[x]=StringConcatenate("c_inf pctHBV",x);
      pctSpotHs[x]=StringConcatenate(DoubleToStr(pctSpotH[x],0),"X");
      string label7 = pctSpotHL[x];
      
      lpotH[x] = StringConcatenate("c_inf buselPotH",x);
      string label6 = lpotH[x];
      ObjectDelete(label6);
      ObjectCreate( label6, OBJ_LABEL, 0, 0, 0 );
      ObjectSetText(label6,spotH[x],8, "Arial Bold", col1);
      ObjectSet( label6, OBJPROP_CORNER, 0 );
      ObjectSet( label6, OBJPROP_XDISTANCE, clm );
      ObjectSet( label6, OBJPROP_YDISTANCE, 70 );
      ObjectDelete(label7);
      ObjectCreate( label7, OBJ_LABEL, 0, 0, 0 );
      ObjectSetText(label7,pctSpotHs[x],8,"Arial Bold", col1);
      ObjectSet( label7, OBJPROP_CORNER, 0 );
      ObjectSet( label7, OBJPROP_XDISTANCE, clm );
      ObjectSet( label7, OBJPROP_YDISTANCE, 80 );

   //*avg.total potential last hiden candle status per TF
      cdlView=cV[x];
      int i=cdlView;
      int tPot=0;
      int tPotB=0;
      int tPotS=0;
      for(i=cdlView;i>=1;i--) {
          hidB[i]=(clCdl(tf[x],i)/pin)-(loCdl(tf[x],i)/pin);
          hidS[i]=(hiCdl(tf[x],i)/pin)-(clCdl(tf[x],i)/pin);
          //hidBV[i]=hidB[i];
          //hidSV[i]=hidS[i];
          //int potensial=hidBV[i]-hidSV[i];
          //tPot=tPot+potensial;
          tPotB=tPotB+hidB[i];
          tPotS=tPotS+hidS[i];
         }
      tPotB=(tPotB/cdlView);
      tPotS=(tPotS/cdlView);
      tPot=tPotB-tPotS;
      pcTot[x]=0;
      pcTotS[x]="0X";
      if         (tPot>0) {potNya[x]="BUYER";col=buyer_Color;
                           if(tPotS>0) pcTot[x]=NormalizeDouble((tPot/tPotS),4);
                           else pcTot[x]=100;
                           }
        else {if (tPot<0) {potNya[x]="SELER";col=seler_Color;
                           if(tPotB>0) pcTot[x]=NormalizeDouble(((tPot*(-1))/tPotB),4);
                           else pcTot[x]=100;
                           }
                else      {potNya[x]="--0--";col=busel_Color;}}
      lpotNya[x] = StringConcatenate("c_inf busel_last_PotNya",x);
      string labelX = lpotNya[x];
      ObjectDelete(labelX);
      ObjectCreate( labelX, OBJ_LABEL, 0, 0, 0 );
      ObjectSetText(labelX,potNya[x],8, "Arial Bold", col);
      ObjectSet( labelX, OBJPROP_CORNER, 0 );
      ObjectSet( labelX, OBJPROP_XDISTANCE, clm );
      ObjectSet( labelX, OBJPROP_YDISTANCE, 110 );
      lpcTot[x] = StringConcatenate("c_inf busel_last_tPotNya",x);
      pcTotS[x]=StringConcatenate(DoubleToStr(pcTot[x],0),"X");
      string labelXX = lpcTot[x];
      ObjectDelete(labelXX);
      ObjectCreate( labelXX, OBJ_LABEL, 0, 0, 0 );
      ObjectSetText(labelXX,pcTotS[x],8, "Arial Bold", col);
      ObjectSet( labelXX, OBJPROP_CORNER, 0 );
      ObjectSet( labelXX, OBJPROP_XDISTANCE, clm );
      ObjectSet( labelXX, OBJPROP_YDISTANCE, 120 );

      }
      
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| indicator value                                                  |
//+------------------------------------------------------------------+
double hiCdl(int _tf,int sif)   
   {return(iHigh(NULL,_tf,sif));}
double loCdl(int _tf,int sif)   
   {return(iLow(NULL,_tf,sif));}
double opCdl(int _tf,int sif)   
   {return(iOpen(NULL,_tf,sif));}
double clCdl(int _tf,int sif)   
   {return(iClose(NULL,_tf,sif));}
//+------------------------------------------------------------------+
double InfoPasar(string pair, string apanya)
{
   RefreshRates();
   double tanyaV=NormalizeDouble(MarketInfo(pair,MODE_ASK),MarketInfo(pair,MODE_DIGITS));
   double taruhV=NormalizeDouble(MarketInfo(pair,MODE_BID),MarketInfo(pair,MODE_DIGITS));
   double popinV=MarketInfo(pair,MODE_POINT);
   double spreaV=MarketInfo(pair,MODE_SPREAD);
   double lot_1V=MarketInfo(pair,MODE_MINLOT);
   if      (apanya=="tanya") {return(tanyaV);}
   else if (apanya=="taruh") {return(taruhV);}
   else if (apanya=="popin") {return(popinV);}
   else if (apanya=="sprea") {return(spreaV);}
   else if (apanya=="mnLot") {return(lot_1V);}
}

