Float_01





//+--------------------------------------------------------------------------------+
//|                Float.mq4                                                       |
//|                Copyright © 2005  Barry Stander  Barry_Stander_4@yahoo.com      |
//|                http://www.4Africa.net/4meta/                                   |
//|                Float                                                           |
//+--------------------------------------------------------------------------------+

#property copyright "Float converted from MT3 to MT4"
#property link      "http://www.4Africa.net/4meta/"
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red

extern int float=200,use_fibos=1,Backtesting=0,from = 0;
string short_name;

double f,c1,high_bar,Low_bar;
int bars_high,bars_low;
double cumulativeV,FLOATV,cumulativeV2,swing;
double newcv,CV,CV2;
double fib23,fib38,fib50,fib62,fib76;
double dinap0,dinap1,dinap2,dinap3,dinap4,dinap5;
double CVL,CVL1,CVL2,CVL3,CVL4;
double Buffer1[];
double Buffer2[];

int shift,swing_time;
int cvstart,cvend,bar;

void delete_objects(){
   string  buff_str = "";
   for(int i=ObjectsTotal()-1;i>=0;i--){
      buff_str = ObjectName(i);
      if(StringFind(buff_str,"float_",0)==0) ObjectDelete(buff_str);
      }
   Comment("");
}

int init(){
   IndicatorBuffers(2);
   delete_objects();
      
   short_name="Float";
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);
   
   SetIndexStyle(0,DRAW_HISTOGRAM );
   SetIndexBuffer(0,Buffer1);
   SetIndexDrawBegin(0,Buffer1);
   
   SetIndexStyle(1,DRAW_LINE );
   SetIndexBuffer(1,Buffer2);
   SetIndexDrawBegin(1,Buffer2);

   return(0);
}
 
int deinit(){
   delete_objects();
   return(0);
}
  
void create_line(int from,double p1,int to,double p2,color c,int style,int w = 1){
   static int acc = 0;
   string name = "float_line_"+acc;acc++;
   datetime t0 = Time[from];
   if(from<0) t0 = Time[0]-from*Period()*60;
   datetime t1 = Time[to];
   if(to<0) t1 = Time[0]-to*Period()*60;
   
   ObjectCreate(name, OBJ_TREND  , 0, t0,p1,t1,p2);
   ObjectSet(name , OBJPROP_STYLE, style);
   ObjectSet(name , OBJPROP_COLOR , c );
   ObjectSet(name , OBJPROP_RAY , 0  );
   ObjectSet(name , OBJPROP_WIDTH , w );
}

void place_text(string text,int from,double p,color c){
   static int acc = 0;
   string name = "float_text_"+acc;acc++;
   ObjectCreate(name, OBJ_TEXT  , 0, Time[from],p );
   ObjectSetText(name , text, 8 , "Arial", c);
}

int start(){
   static int last = 0;
   if(last==Bars) return (0);
   last = Bars;
   int counted_bars=IndicatorCounted();
   if(counted_bars<0) return(-1); // Exit if na data
   
   delete_objects();
    
   cumulativeV=0;
   cumulativeV2=0;
      
      FLOATV=0;

         bars_high = Highest(NULL,0,MODE_HIGH,float,from+1);
         bars_low  = Lowest(NULL,0,MODE_LOW,float,from+1);
         high_bar = High[bars_high]; 
         Low_bar  =  Low[bars_low]; 
         swing = high_bar - Low_bar;
         swing_time = MathAbs(bars_low-bars_high);
         if( bars_high < bars_low ){
            cvstart=bars_low;
            cvend=bars_high;
            }
         else{
            cvstart=bars_high;
            cvend=bars_low;
            }

         for( shift=cvstart;shift>=cvend;shift--) FLOATV=FLOATV+Volume[shift];
         
         //find cumulative volume since last turnover
         for( shift=cvstart;shift>=from;shift--){
            cumulativeV=cumulativeV+Volume[shift];
            if( cumulativeV >= FLOATV ) cumulativeV=0;

            Buffer1[shift] = cumulativeV*0.001; //Blue
            Buffer2[shift] = FLOATV*0.001;      //Red
            }
         create_line(cvstart,high_bar,from+1,high_bar,Blue,STYLE_SOLID);            
         create_line(cvstart,Low_bar,from+1,Low_bar,Blue,STYLE_SOLID);            

         fib23=((high_bar-Low_bar)*0.236)+Low_bar;
         fib38=((high_bar-Low_bar)*0.382)+Low_bar;
         fib50=((high_bar-Low_bar)/2)+Low_bar;
         fib62=((high_bar-Low_bar)*0.618)+Low_bar;
         fib76=((high_bar-Low_bar)*0.764)+Low_bar;
         dinap0=(Low_bar+fib23)/2;
         dinap1=(fib23+fib38)/2;
         dinap2=(fib38+fib50)/2;
         dinap3=(fib50+fib62)/2;
         dinap4=(fib62+fib76)/2;
         dinap5=(high_bar+fib76)/2;

         create_line(cvstart,fib23,from+1,fib23,Green,STYLE_DASH);
         place_text("23.6",from+1,fib23,Green);

         create_line(cvstart,fib38,from+1,fib38,Green,STYLE_DASH);
         place_text("38.2",from+1,fib38,Green);
 
         create_line(cvstart,fib50,from+1,fib50,Red,STYLE_SOLID,2);
         place_text("50",from+1,fib50,Red);
 
         create_line(cvstart,fib62,from+1,fib62,Green,STYLE_DASH);
         place_text("61.8",from+1,fib62,Green);
 
         create_line(cvstart,fib76,from+1,fib76,Green,STYLE_DASH);
         place_text("76.4",from+1,fib76,Green);

         create_line(cvstart,dinap0,from+1,dinap0,Red,STYLE_DOT);
         create_line(cvstart,dinap1,from+1,dinap1,Red,STYLE_DOT);
         create_line(cvstart,dinap2,from+1,dinap2,Red,STYLE_DOT);
         create_line(cvstart,dinap3,from+1,dinap3,Red,STYLE_DOT);
         create_line(cvstart,dinap4,from+1,dinap4,Red,STYLE_DOT);
         create_line(cvstart,dinap5,from+1,dinap5,Red,STYLE_DOT);
 
         create_line(cvstart,high_bar,cvstart,Low_bar*Point,Blue,STYLE_SOLID);
         create_line(cvend,high_bar,cvend,Low_bar*Point,Blue,STYLE_SOLID);

   
   //vert float predictions. These are only time based.
   //see blue histogram for real float values.
   //if you change "trendline" to "Vline" it will draw through oscillators too.might be fun
   for(int i=1;i<10;i++){
      int x = cvend-(swing_time*i);
      create_line(x+5,high_bar,x+5,Low_bar,Red,STYLE_DOT);
      }
   Comment(
      "\n","high was   ",bars_high,"  bars ago",
      "\n","Low was    ",bars_low," bars ago","\n",
      "\n","Float time was  =      ", swing_time," bars",
      "\n","Float Vol. left    =     ",FLOATV-cumulativeV,
      "\n","Float Volume    =     ",FLOATV,
      );
 
   return(0);
}
  





Sample





Analysis



Market Information Used:

Series array that contains open time of each bar
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Series array that contains tick volumes of each bar


Indicator Curves created:

Implements a curve of type DRAW_HISTOGRAM

Implements a curve of type DRAW_LINE

Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features: