//+------------------------------------------------------------------+
//|                                          KG BB FLAT DETECTOR.mq4 |
//|                      Copyright © 2008, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link      "http://www.forexindo.com/forum/showthread.php?t=95&page=9"

#property indicator_chart_window
#property indicator_buffers 0

extern int Corner=1;
extern color MA_Year_Color=DodgerBlue;
extern color MA_4Month_Color=DodgerBlue;
extern color MA_Month_Color=DodgerBlue;
extern color MA_Week_Color=DodgerBlue;
extern color MA_Day_Color=DodgerBlue;
extern color MA_8H_Color=DodgerBlue;
extern color MA_6H_Color=DodgerBlue;
extern color MA_4H_Color=DodgerBlue;
extern color BB_Color=SandyBrown;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string label7 = "BB Yearly";
   ObjectDelete(label7);
   ObjectCreate( label7, OBJ_LABEL, 0, 0, 0 );
   ObjectSetText(label7,"Yearly",8, "Arial Bold", MA_Year_Color);
   ObjectSet( label7, OBJPROP_CORNER, Corner );
   ObjectSet( label7, OBJPROP_XDISTANCE, 3 );
   ObjectSet( label7, OBJPROP_YDISTANCE, 10 );   
   
   string label8 = "BB 4Month";
   ObjectDelete(label8);
   ObjectCreate( label8, OBJ_LABEL, 0, 0, 0 );
   ObjectSetText(label8,"4Month",8, "Arial Bold", MA_4Month_Color);
   ObjectSet( label8, OBJPROP_CORNER, Corner );
   ObjectSet( label8, OBJPROP_XDISTANCE, 3 );
   ObjectSet( label8, OBJPROP_YDISTANCE, 20 );
   
   string label1 = "BB Monthly";
   ObjectDelete(label1);
   ObjectCreate( label1, OBJ_LABEL, 0, 0, 0 );
   ObjectSetText(label1,"Monthly",8, "Arial Bold", MA_Month_Color);
   ObjectSet( label1, OBJPROP_CORNER, Corner );
   ObjectSet( label1, OBJPROP_XDISTANCE, 3 );
   ObjectSet( label1, OBJPROP_YDISTANCE, 30 );
   
   string label2 = "BB Weekly";
   ObjectDelete(label2);
   ObjectCreate( label2, OBJ_LABEL, 0, 0, 0 );
   ObjectSetText(label2,"Weekly",8, "Arial Bold", MA_Week_Color);
   ObjectSet( label2, OBJPROP_CORNER, Corner );
   ObjectSet( label2, OBJPROP_XDISTANCE, 3 );
   ObjectSet( label2, OBJPROP_YDISTANCE, 40 );
   
   string label3 = "BB Daily";
   ObjectDelete(label3);
   ObjectCreate( label3, OBJ_LABEL, 0, 0, 0 );
   ObjectSetText(label3,"Daily",8, "Arial Bold", MA_Day_Color);
   ObjectSet( label3, OBJPROP_CORNER, Corner );
   ObjectSet( label3, OBJPROP_XDISTANCE, 3 );
   ObjectSet( label3, OBJPROP_YDISTANCE, 50 );
   
   string label4 = "BB 8 Hours";
   ObjectDelete(label4);
   ObjectCreate( label4, OBJ_LABEL, 0, 0, 0 );
   ObjectSetText(label4,"8Hours",8, "Arial Bold", MA_8H_Color);
   ObjectSet( label4, OBJPROP_CORNER, Corner );
   ObjectSet( label4, OBJPROP_XDISTANCE, 3 );
   ObjectSet( label4, OBJPROP_YDISTANCE, 60 );
   
   string label5 = "BB 6 Hours";
   ObjectDelete(label5);
   ObjectCreate( label5, OBJ_LABEL, 0, 0, 0 );
   ObjectSetText(label5,"6Hours",8, "Arial Bold", MA_6H_Color);
   ObjectSet( label5, OBJPROP_CORNER, Corner );
   ObjectSet( label5, OBJPROP_XDISTANCE, 3 );
   ObjectSet( label5, OBJPROP_YDISTANCE, 70 );
   
   string label6 = "BB 4 Hours";
   ObjectDelete(label6);
   ObjectCreate( label6, OBJ_LABEL, 0, 0, 0 );
   ObjectSetText(label6,"4Hours",8, "Arial Bold", MA_4H_Color);
   ObjectSet( label6, OBJPROP_CORNER, Corner );
   ObjectSet( label6, OBJPROP_XDISTANCE, 3 );
   ObjectSet( label6, OBJPROP_YDISTANCE, 80 );

   string label9 = "Bollinger Bands";
   ObjectDelete(label9);
   ObjectCreate( label9, OBJ_LABEL, 0, 0, 0 );
   ObjectSetText(label9,"BB",8, "Arial Bold", BB_Color);
   ObjectSet( label9, OBJPROP_CORNER, Corner );
   ObjectSet( label9, OBJPROP_XDISTANCE, 51 );
   ObjectSet( label9, OBJPROP_YDISTANCE, 100 );

   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   ObjectDelete("BB Yearly");
   ObjectDelete("BB 4Month");
   ObjectDelete("BB Monthly");   
   ObjectDelete("BB Weekly");   
   ObjectDelete("BB Daily");
   ObjectDelete("BB 8 Hours");
   ObjectDelete("BB 6 Hours"); 
   ObjectDelete("BB 4 Hours");   
   ObjectDelete("Bollinger Bands");
   
   ObjectDelete("Yearly BB");
   ObjectDelete("4 Month BB");
   ObjectDelete("Monthly BB");
   ObjectDelete("Weekly BB");
   ObjectDelete("Daily BB");
   ObjectDelete("8H BB");
   ObjectDelete("6H BB");
   ObjectDelete("4H BB");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
   
   int limit=Bars-counted_bars;
   if(counted_bars>0) limit++;
   
   string Sign;   
   color Col;
   
   // Perhitungan kondisi Flat base on BB SD1
   
   double BBUpper=iBands(NULL,240,1440,1,0,PRICE_WEIGHTED,MODE_UPPER,0);
   double BBLower=iBands(NULL,240,1440,1,0,PRICE_WEIGHTED,MODE_LOWER,0);
   if (iMA(NULL,240,1,0,MODE_SMA,PRICE_WEIGHTED,0)>=BBLower && iMA(NULL,240,1,0,MODE_SMA,PRICE_WEIGHTED,0)<=BBUpper) { Sign="ó"; Col=DarkOrange; } //Sideway
   else 
      if (iMA(NULL,240,1,0,MODE_SMA,PRICE_WEIGHTED,0)>BBUpper && iMA(NULL,240,1,0,MODE_SMA,PRICE_WEIGHTED,0)>BBLower) { Sign="ñ"; Col=Lime; } //Trend Up
      else { Sign="ò"; Col=Red; } //Trend Down
   string sign1 = "Yearly BB";
   ObjectDelete(sign1);
   ObjectCreate(sign1, OBJ_LABEL, 0, 0, 0 );
   ObjectSetText(sign1, Sign ,10, "Wingdings", Col);
   ObjectSet(sign1, OBJPROP_CORNER, Corner );
   ObjectSet(sign1, OBJPROP_XDISTANCE, 53 );
   ObjectSet(sign1, OBJPROP_YDISTANCE, 10 );
   
   BBUpper=iBands(NULL,60,1920,1,0,PRICE_WEIGHTED,MODE_UPPER,0);
   BBLower=iBands(NULL,60,1920,1,0,PRICE_WEIGHTED,MODE_LOWER,0);
   if (iMA(NULL,60,1,0,MODE_SMA,PRICE_WEIGHTED,0)>=BBLower && iMA(NULL,60,1,0,MODE_SMA,PRICE_WEIGHTED,0)<=BBUpper) { Sign="ó"; Col=DarkOrange; } //Sideway
   else 
      if (iMA(NULL,60,1,0,MODE_SMA,PRICE_WEIGHTED,0)>BBUpper && iMA(NULL,60,1,0,MODE_SMA,PRICE_WEIGHTED,0)>BBLower) { Sign="ñ"; Col=Lime; } //Trend Up
      else { Sign="ò"; Col=Red; } //Trend Down
   string sign2 = "4 Month BB";
   ObjectDelete(sign2);
   ObjectCreate(sign2, OBJ_LABEL, 0, 0, 0 );
   ObjectSetText(sign2, Sign ,10, "Wingdings", Col);
   ObjectSet(sign2, OBJPROP_CORNER, Corner );
   ObjectSet(sign2, OBJPROP_XDISTANCE, 53 );
   ObjectSet(sign2, OBJPROP_YDISTANCE, 20 );
   
   BBUpper=iBands(NULL,15,1920,1,0,PRICE_WEIGHTED,MODE_UPPER,0);
   BBLower=iBands(NULL,15,1920,1,0,PRICE_WEIGHTED,MODE_LOWER,0);
   if (iMA(NULL,15,1,0,MODE_SMA,PRICE_WEIGHTED,0)>=BBLower && iMA(NULL,15,1,0,MODE_SMA,PRICE_WEIGHTED,0)<=BBUpper) { Sign="ó"; Col=DarkOrange; } //Sideway
   else 
      if (iMA(NULL,15,1,0,MODE_SMA,PRICE_WEIGHTED,0)>BBUpper && iMA(NULL,15,1,0,MODE_SMA,PRICE_WEIGHTED,0)>BBLower) { Sign="ñ"; Col=Lime; } //Trend Up
      else { Sign="ò"; Col=Red; } //Trend Down
   string sign13 = "Monthly BB";
   ObjectDelete(sign13);
   ObjectCreate(sign13, OBJ_LABEL, 0, 0, 0 );
   ObjectSetText(sign13, Sign ,10, "Wingdings", Col);
   ObjectSet(sign13, OBJPROP_CORNER, Corner );
   ObjectSet(sign13, OBJPROP_XDISTANCE, 53 );
   ObjectSet(sign13, OBJPROP_YDISTANCE, 30 );
   
   BBUpper=iBands(NULL,15,480,1,0,PRICE_WEIGHTED,MODE_UPPER,0);
   BBLower=iBands(NULL,15,480,1,0,PRICE_WEIGHTED,MODE_LOWER,0);
   if (iMA(NULL,15,1,0,MODE_SMA,PRICE_WEIGHTED,0)>=BBLower && iMA(NULL,15,1,0,MODE_SMA,PRICE_WEIGHTED,0)<=BBUpper) { Sign="ó"; Col=DarkOrange; } //Sideway
   else 
      if (iMA(NULL,15,1,0,MODE_SMA,PRICE_WEIGHTED,0)>BBUpper && iMA(NULL,15,1,0,MODE_SMA,PRICE_WEIGHTED,0)>BBLower) { Sign="ñ"; Col=Lime; } //Trend Up
      else { Sign="ò"; Col=Red; } //Trend Down
   string sign23 = "Weekly BB";
   ObjectDelete(sign23);
   ObjectCreate(sign23, OBJ_LABEL, 0, 0, 0 );
   ObjectSetText(sign23, Sign ,10, "Wingdings", Col);
   ObjectSet(sign23, OBJPROP_CORNER, Corner );
   ObjectSet(sign23, OBJPROP_XDISTANCE, 53 );
   ObjectSet(sign23, OBJPROP_YDISTANCE, 40 );

   BBUpper=iBands(NULL,15,96,1,0,PRICE_WEIGHTED,MODE_UPPER,0);
   BBLower=iBands(NULL,15,96,1,0,PRICE_WEIGHTED,MODE_LOWER,0);
   if (iMA(NULL,15,1,0,MODE_SMA,PRICE_WEIGHTED,0)>=BBLower && iMA(NULL,15,1,0,MODE_SMA,PRICE_WEIGHTED,0)<=BBUpper) { Sign="ó"; Col=DarkOrange; } //Sideway
   else 
      if (iMA(NULL,15,1,0,MODE_SMA,PRICE_WEIGHTED,0)>BBUpper && iMA(NULL,15,1,0,MODE_SMA,PRICE_WEIGHTED,0)>BBLower) { Sign="ñ"; Col=Lime; } //Trend Up
      else { Sign="ò"; Col=Red; } //Trend Down
   string sign33 = "Daily BB";
   ObjectDelete(sign33);
   ObjectCreate(sign33, OBJ_LABEL, 0, 0, 0 );
   ObjectSetText(sign33, Sign ,10, "Wingdings", Col);
   ObjectSet(sign33, OBJPROP_CORNER, Corner );
   ObjectSet(sign33, OBJPROP_XDISTANCE, 53 );
   ObjectSet(sign33, OBJPROP_YDISTANCE, 50 );

   BBUpper=iBands(NULL,5,96,1,0,PRICE_WEIGHTED,MODE_UPPER,0);
   BBLower=iBands(NULL,5,96,1,0,PRICE_WEIGHTED,MODE_LOWER,0);
   if (iMA(NULL,5,1,0,MODE_SMA,PRICE_WEIGHTED,0)>=BBLower && iMA(NULL,5,1,0,MODE_SMA,PRICE_WEIGHTED,0)<=BBUpper) { Sign="ó"; Col=DarkOrange; } //Sideway
   else 
      if (iMA(NULL,5,1,0,MODE_SMA,PRICE_WEIGHTED,0)>BBUpper && iMA(NULL,5,1,0,MODE_SMA,PRICE_WEIGHTED,0)>BBLower ) { Sign="ñ"; Col=Lime; } //Trend Up
      else { Sign="ò"; Col=Red; } //Trend Down
   string sign35 = "8H BB";
   ObjectDelete(sign35);
   ObjectCreate(sign35, OBJ_LABEL, 0, 0, 0 );
   ObjectSetText(sign35, Sign ,10, "Wingdings", Col);
   ObjectSet(sign35, OBJPROP_CORNER, Corner );
   ObjectSet(sign35, OBJPROP_XDISTANCE, 53 );
   ObjectSet(sign35, OBJPROP_YDISTANCE, 60 );
   
   BBUpper=iBands(NULL,5,48,1,0,PRICE_WEIGHTED,MODE_UPPER,0);
   BBLower=iBands(NULL,5,48,1,0,PRICE_WEIGHTED,MODE_LOWER,0);
   if (iMA(NULL,5,1,0,MODE_SMA,PRICE_WEIGHTED,0)>=BBLower && iMA(NULL,5,1,0,MODE_SMA,PRICE_WEIGHTED,0)<=BBUpper) { Sign="ó"; Col=DarkOrange; } //Sideway
   else 
      if (iMA(NULL,5,1,0,MODE_SMA,PRICE_WEIGHTED,0)>BBUpper && iMA(NULL,5,1,0,MODE_SMA,PRICE_WEIGHTED,0)>BBLower ) { Sign="ñ"; Col=Lime; } //Trend Up
      else { Sign="ò"; Col=Red; } //Trend Down
   string sign34 = "6H BB";
   ObjectDelete(sign34);
   ObjectCreate(sign34, OBJ_LABEL, 0, 0, 0 );
   ObjectSetText(sign34, Sign ,10, "Wingdings", Col);
   ObjectSet(sign34, OBJPROP_CORNER, Corner );
   ObjectSet(sign34, OBJPROP_XDISTANCE, 53 );
   ObjectSet(sign34, OBJPROP_YDISTANCE, 70 );
   
   BBUpper=iBands(NULL,5,12,1,0,PRICE_WEIGHTED,MODE_UPPER,0);
   BBLower=iBands(NULL,5,12,1,0,PRICE_WEIGHTED,MODE_LOWER,0);
   if (iMA(NULL,5,1,0,MODE_SMA,PRICE_WEIGHTED,0)>=BBLower && iMA(NULL,5,1,0,MODE_SMA,PRICE_WEIGHTED,0)<=BBUpper) { Sign="ó"; Col=DarkOrange; } //Sideway
   else 
      if (iMA(NULL,5,1,0,MODE_SMA,PRICE_WEIGHTED,0)>BBUpper && iMA(NULL,5,1,0,MODE_SMA,PRICE_WEIGHTED,0)>BBLower ) { Sign="ñ"; Col=Lime; } //Trend Up
      else { Sign="ò"; Col=Red; } //Trend Down
   string sign44 = "4H BB";
   ObjectDelete(sign44);
   ObjectCreate(sign44, OBJ_LABEL, 0, 0, 0 );
   ObjectSetText(sign44, Sign ,10, "Wingdings", Col);
   ObjectSet(sign44, OBJPROP_CORNER, Corner );
   ObjectSet(sign44, OBJPROP_XDISTANCE, 53 );
   ObjectSet(sign44, OBJPROP_YDISTANCE, 80 );
//----
   return(0);
  }
//+------------------------------------------------------------------+