FIBO_ZONE_mod





#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100

extern int NumOfBars = 0;

int iwindow = 0;
string iname = "Jackson Zones";

int init(){
   IndicatorShortName(iname);
   return(0);
}
  
void place_text(string text,int x,double price,color c,int hwnd){
   string  buff_str = "jack_"+text+x+price;
      //OBJ_LABEL
   if(ObjectFind(buff_str)==-1){
      ObjectCreate(buff_str, OBJ_TEXT, iwindow, Time[x], price);
      }
   //ObjectSet(buff_str,OBJPROP_COLOR,c);
   ObjectSet(buff_str,OBJPROP_TIME1,Time[x]);
   ObjectSet(buff_str,OBJPROP_PRICE1,price);
   //ObjectSet(buff_str,OBJPROP_FONTSIZE,10);
   ObjectSetText(buff_str,text,10,"Arial",c);
   
}

void create_rectangle(int id,int from,int to,color c,double p0,double p1,int long,int hwnd){
   string  buff_str = "jack_"+id;
   ObjectCreate(buff_str, OBJ_RECTANGLE, hwnd, Time[from], p0, Time[to], p1);
   ObjectSet(buff_str, OBJPROP_COLOR, c );
   ObjectSet(buff_str, OBJPROP_RAY, long );
   ObjectSet(buff_str, OBJPROP_STYLE,  STYLE_DOT );
   ObjectSet(buff_str, OBJPROP_BACK, true );
   ObjectSet(buff_str, OBJPROP_WIDTH, 1 );
   
}

void create_line(int line,int from,int to,color c,double p0,double p1,int long,int hwnd,int style){
   string  buff_str = "jack_"+line;
   ObjectCreate(buff_str, OBJ_TREND, hwnd, Time[from], p0, Time[to], p1);
   ObjectSet(buff_str,OBJPROP_RAY,long);
   ObjectSet(buff_str,OBJPROP_COLOR,c);
   ObjectSet(buff_str,OBJPROP_XDISTANCE,100);
   ObjectSet(buff_str,OBJPROP_YDISTANCE,100);
   ObjectSet(buff_str,OBJPROP_STYLE,style);
   ObjectSet(buff_str,OBJPROP_WIDTH,1);
}

void delete_obj(){
   string  buff_str = "";
   for(int i=ObjectsTotal()-1;i>=0;i--){
      buff_str = ObjectName(i);
      if(StringFind(buff_str,"jack_",0)==0) ObjectDelete(buff_str);
      }
}
   
int deinit(){
   delete_obj();
   return(0);
}
 
int last = 0,pbar = 0;
double C,D,B,A,E,SB1,SB2,RB1,RB2,R,o,c;
int fb_zone_stats[6][4];
int zone[6];

void update_table(int c){
   int col[6] = {27,22,17,12,7,2};
   int row[5] = {75,55,35,15,95};
   place_text("Zones"  ,35,row[4] ,Black      ,iwindow);
   place_text(">=RB2"  ,35,row[0] ,Red        ,iwindow);
   place_text(">=RB1"  ,35,row[1] ,Maroon     ,iwindow);
   place_text("<=SB1"  ,35,row[2] ,OliveDrab  ,iwindow);
   place_text("<=SB2"  ,35,row[3] ,Green      ,iwindow);
   
   
   for(int i=1;i<7;i++){
      color cl = Black;
      if(i==c) cl = Blue;
      place_text(i,col[i-1],row[4],cl,iwindow);
      for(int j=0;j<4;j++)
         if(zone[i-1]!=0)
            place_text((fb_zone_stats[i-1][j]*100)/zone[i-1],col[i-1],row[j],cl,iwindow);
         else
            place_text(fb_zone_stats[i-1][j],col[i-1],row[j],cl,iwindow);
      }
}

void draw_zones(int shift){
   static int acc = 0;
   create_rectangle(acc,pbar,shift,Black,RB2,E,0,0); acc++;
   create_line(acc,pbar,shift,Red,E,E,0,0,STYLE_SOLID); acc++;
   create_rectangle(acc,pbar,shift,Black,RB1,D,0,0); acc++;
   create_line(acc,pbar,shift,Yellow,D,D,0,0,STYLE_SOLID); acc++;
   create_line(acc,pbar,shift,Blue,C,C,0,0,STYLE_SOLID); acc++;
   create_line(acc,pbar,shift,Yellow,B,B,0,0,STYLE_SOLID); acc++;
   create_rectangle(acc,pbar,shift,Black,B,SB1,0,0); acc++;
   create_line(acc,pbar,shift,Red,A,A,0,0,STYLE_SOLID); acc++;
   create_rectangle(acc,pbar,shift,Black,A,SB2,0,0); acc++;
}

int start()  {
   iwindow = WindowFind(iname);
   if(last == Bars) return (0);
   last = Bars;
   delete_obj();
   int limit = NumOfBars;
   if(limit==0 || limit>Bars) limit=Bars;
   int b,l = 0;

   for(int i=0;i<6;i++){
      fb_zone_stats[i][0] = 0;
      fb_zone_stats[i][1] = 0;
      fb_zone_stats[i][2] = 0;
      fb_zone_stats[i][3] = 0;
      zone[i] = 0;
      }
   
   for(i = limit-1;i>=0;i--){
      b = iBarShift(NULL,PERIOD_D1,Time[i]);
      if(b!=l){
         // draw zones
         if(l!=0) draw_zones(i);
         pbar = i;
         
         l = b;
         int b_ = TimeDayOfWeek(Time[i]);
         if(b_==1) b +=2; else b +=1;
         double cl = iClose(NULL,PERIOD_D1,b);
         double hi = iHigh(NULL,PERIOD_D1,b);
         double lo = iLow(NULL,PERIOD_D1,b);
         R = (hi-lo);

         C = (cl+hi+lo) / 3;//PIVOT
         
         E = C + 0.011;//PIVOT+RANGE
         D = C + 0.004;//PIVOT+RANGE/2
         // C
         B = C - 0.004;
         A = C - 0.011;

         o = iOpen (NULL,PERIOD_D1,l);
         c = iClose(NULL,PERIOD_D1,l);
         
         int zo = 6;
         if(o<A) zo = 1;
         else if(o<E && o>=D) zo = 5;
         else if(o<D && o>=C) zo = 4;
         else if(o<C && o>=B) zo = 3;
         else if(o<B && o>=A) zo = 2;
         
         zone[zo]++;
         
         RB2 = C + R * 1.382;
         RB1 = C + R * 0.618;
         SB1 = C - R * 0.618;
         SB2 = C - R * 1.382;
         
         if(c<=SB2) fb_zone_stats[zo][3]++;
         if(c<=SB1) fb_zone_stats[zo][2]++;
         if(c>=RB1) fb_zone_stats[zo][1]++;
         if(c>=RB2) fb_zone_stats[zo][0]++;
         }
      }
   update_table(zo);
   // draw last zone levels
   draw_zones(0);
   
   return(0);
  }
//+------------------------------------------------------------------+





Sample





Analysis



Market Information Used:

Series array that contains open time of each bar
Series array that contains close prices for each bar
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar


Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features: