//+--------------------------------------------------------------------------------+ //| 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 // Var ////////////////////////////////////////////////////////////// extern int float=200,use_fibos=1,Backtesting=0; string short_name; double f,c1,high_bar,Low_bar,bars_high,bars_low; double cumulativeV,FLOATV,cumulativeV2,loopbegin2,swing; double swingv,loopbegin1,cnt,prevbars; 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[]; bool first = true , first1 = true; int shift,swing_time; int cvstart,cvend,bar; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { IndicatorBuffers(2); ObjectDelete("swingtop"); ObjectDelete("swingbottom"); ObjectDelete( "fib23" ); ObjectDelete( "fib38" ); ObjectDelete( "fib50" ); ObjectDelete( "fib62" ); ObjectDelete( "fib76" ); ObjectDelete( "fib23t" ); ObjectDelete( "fib38t" ); ObjectDelete( "fib50t" ); ObjectDelete( "fib62t" ); ObjectDelete( "fib76t" ); ObjectDelete( "dinap0" ); ObjectDelete( "dinap1" ); ObjectDelete( "dinap2" ); ObjectDelete( "dinap3" ); ObjectDelete( "dinap4" ); ObjectDelete( "dinap5" ); ObjectDelete("CVSTART"); ObjectDelete("CVEND"); ObjectDelete("swingend"); ObjectDelete("swingend2"); ObjectDelete("swingend3"); ObjectDelete("swingend4"); ObjectDelete("swingend5"); ObjectDelete("swingend6"); ObjectDelete("swingend7"); ObjectDelete("swingend8"); ObjectDelete("swingend9"); short_name="Float"; IndicatorShortName(short_name); SetIndexLabel(0,short_name); SetIndexStyle(0,DRAW_HISTOGRAM ); SetIndexBuffer(0,Buffer1); SetIndexDrawBegin(0,1000); SetIndexStyle(1,DRAW_LINE ); SetIndexBuffer(1,Buffer2); SetIndexDrawBegin(1,1000); return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { ObjectDelete("swingtop"); ObjectDelete("swingbottom"); ObjectDelete( "fib23" ); ObjectDelete( "fib38" ); ObjectDelete( "fib50" ); ObjectDelete( "fib62" ); ObjectDelete( "fib76" ); ObjectDelete( "fib23t" ); ObjectDelete( "fib38t" ); ObjectDelete( "fib50t" ); ObjectDelete( "fib62t" ); ObjectDelete( "fib76t" ); ObjectDelete( "dinap0" ); ObjectDelete( "dinap1" ); ObjectDelete( "dinap2" ); ObjectDelete( "dinap3" ); ObjectDelete( "dinap4" ); ObjectDelete( "dinap5" ); ObjectDelete("CVSTART"); ObjectDelete("CVEND"); ObjectDelete("swingend"); ObjectDelete("swingend2"); ObjectDelete("swingend3"); ObjectDelete("swingend4"); ObjectDelete("swingend5"); ObjectDelete("swingend6"); ObjectDelete("swingend7"); ObjectDelete("swingend8"); ObjectDelete("swingend9"); Comment(""); return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); if(counted_bars<0) return(-1); // Exit if na data cumulativeV=0; cumulativeV2=0; int SetLoopCount=0; if( Bars < prevbars || Bars-prevbars>1 ) //If 1 { first = True; first1 = True; prevbars = Bars; FLOATV=0; if( first ) //if 2 { loopbegin1 = Bars-float-1; loopbegin2 = Bars-float-1; first = False; loopbegin1 = loopbegin1+1; for( shift=loopbegin1;shift>=0;shift--) // for 1 { //find high and low high_bar = High[Highest(NULL,0,MODE_HIGH,float,1)]; Low_bar = Low[Lowest(NULL,0,MODE_LOW,float,1)]; //find bar counts bars_high = Highest(NULL,0,MODE_HIGH,float,1); bars_low = Lowest(NULL,0,MODE_LOW,float,1); //find swing price differance swing = High[Highest(NULL,0,MODE_HIGH,float,1)] - Low[Lowest(NULL,0,MODE_LOW,float,1)]; //find float time barcount swing_time = MathAbs(bars_low-bars_high); //find cumulative volume for float period if( bars_high < bars_low ) { cvstart=bars_low; cvend=bars_high; } else { cvstart=bars_high; cvend=bars_low; } if( first1 && FLOATV == 0 ) // if 3 { for( shift=cvstart;shift>=cvend;shift--) { FLOATV=FLOATV+Volume[shift]; first1 = False;} } } //find cumulative volume since last turnover for( shift=cvstart;shift>=0;shift--) // for 2 { cumulativeV=cumulativeV+Volume[shift]; if( cumulativeV >= FLOATV ) { cumulativeV=0; } Buffer1[shift] = cumulativeV*0.001; //Blue Buffer2[shift] = FLOATV*0.001; //Red 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); ObjectDelete("swingtop"); ObjectCreate("swingtop", OBJ_TREND , 0, Time[cvstart],high_bar,Time[1],high_bar); ObjectSet("swingtop" , OBJPROP_STYLE, STYLE_SOLID); ObjectSet("swingtop" , OBJPROP_COLOR , Blue ); ObjectSet("swingtop" , OBJPROP_RAY , 0 ); ObjectSet("swingtop" , OBJPROP_WIDTH , 1 ); ObjectDelete("swingbottom"); ObjectCreate("swingbottom", OBJ_TREND , 0, Time[cvstart],Low_bar,Time[1],Low_bar); ObjectSet("swingbottom" , OBJPROP_STYLE, STYLE_SOLID); ObjectSet("swingbottom" , OBJPROP_COLOR , Blue ); ObjectSet("swingbottom" , OBJPROP_RAY , 0 ); ObjectSet("swingbottom" , OBJPROP_WIDTH , 1 ); //fibos if( use_fibos == 1 ) { ObjectDelete( "fib23" ); ObjectDelete( "fib38" ); ObjectDelete( "fib50" ); ObjectDelete( "fib62" ); ObjectDelete( "fib76" ); ObjectDelete( "dinap0" ); ObjectDelete( "dinap1" ); ObjectDelete( "dinap2" ); ObjectDelete( "dinap3" ); ObjectDelete( "dinap4" ); ObjectDelete( "dinap5" ); 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; ObjectCreate("fib23", OBJ_TREND , 0, Time[cvstart],fib23,Time[1],fib23 ); ObjectSet("fib23" , OBJPROP_STYLE, STYLE_DASH ); ObjectSet("fib23" , OBJPROP_COLOR , Green ); ObjectSet("fib23" , OBJPROP_RAY , 0 ); ObjectSet("fib23" , OBJPROP_WIDTH , 1 ); ObjectCreate("fib23t", OBJ_TEXT , 0, Time[1],fib23 ); ObjectSetText("fib23t" , "23.6", 8 , "Arial", Green); ObjectCreate("fib38", OBJ_TREND , 0, Time[cvstart],fib38,Time[1],fib38 ); ObjectSet("fib38" , OBJPROP_STYLE, STYLE_DASH ); ObjectSet("fib38" , OBJPROP_COLOR , Green ); ObjectSet("fib38" , OBJPROP_RAY , 0 ); ObjectSet("fib38" , OBJPROP_WIDTH , 1 ); ObjectCreate("fib38t", OBJ_TEXT , 0, Time[1],fib38 ); ObjectSetText("fib38t" , "38.2", 8 , "Arial", Green); ObjectCreate("fib50", OBJ_TREND , 0, Time[cvstart],fib50,Time[1],fib50 ); ObjectSet("fib50" , OBJPROP_STYLE, STYLE_SOLID ); ObjectSet("fib50" , OBJPROP_COLOR , Red ); ObjectSet("fib50" , OBJPROP_RAY , 0 ); ObjectSet("fib50" , OBJPROP_WIDTH , 2 ); ObjectCreate("fib50t", OBJ_TEXT , 0, Time[1],fib50 ); ObjectSetText("fib50t" , "50", 8 , "Arial", Green); ObjectCreate("fib62", OBJ_TREND , 0, Time[cvstart],fib62,Time[1],fib62 ); ObjectSet("fib62" , OBJPROP_STYLE, STYLE_DASH ); ObjectSet("fib62" , OBJPROP_COLOR , Green ); ObjectSet("fib62" , OBJPROP_RAY , 0 ); ObjectSet("fib62" , OBJPROP_WIDTH , 1 ); ObjectCreate("fib62t", OBJ_TEXT , 0, Time[1],fib62 ); ObjectSetText("fib62t" , "61.8", 8 , "Arial", Green); ObjectCreate("fib76", OBJ_TREND , 0, Time[cvstart],fib76,Time[1],fib76 ); ObjectSet("fib76" , OBJPROP_STYLE, STYLE_DASH ); ObjectSet("fib76" , OBJPROP_COLOR , Green ); ObjectSet("fib76" , OBJPROP_RAY , 0 ); ObjectSet("fib76" , OBJPROP_WIDTH , 1 ); ObjectCreate("fib76t", OBJ_TEXT , 0, Time[1],fib76 ); ObjectSetText("fib76t" , "76.4", 8 , "Arial", Green); ObjectCreate("dinap0", OBJ_TREND , 0, Time[cvstart],dinap0,Time[1],dinap0 ); ObjectSet("dinap0" , OBJPROP_STYLE, STYLE_DOT ); ObjectSet("dinap0" , OBJPROP_COLOR , Red ); ObjectSet("dinap0" , OBJPROP_RAY , 0 ); ObjectSet("dinap0" , OBJPROP_WIDTH , 1 ); ObjectCreate("dinap1", OBJ_TREND , 0, Time[cvstart],dinap1,Time[1],dinap1 ); ObjectSet("dinap1" , OBJPROP_STYLE, STYLE_DOT ); ObjectSet("dinap1" , OBJPROP_COLOR , Red ); ObjectSet("dinap1" , OBJPROP_RAY , 0 ); ObjectSet("dinap1" , OBJPROP_WIDTH , 1 ); ObjectCreate("dinap2", OBJ_TREND , 0, Time[cvstart],dinap2,Time[1],dinap2 ); ObjectSet("dinap2" , OBJPROP_STYLE, STYLE_DOT ); ObjectSet("dinap2" , OBJPROP_COLOR , Red ); ObjectSet("dinap2" , OBJPROP_RAY , 0 ); ObjectSet("dinap2" , OBJPROP_WIDTH , 1 ); ObjectCreate("dinap3", OBJ_TREND , 0, Time[cvstart],dinap3,Time[1],dinap3 ); ObjectSet("dinap3" , OBJPROP_STYLE, STYLE_DOT ); ObjectSet("dinap3" , OBJPROP_COLOR , Red ); ObjectSet("dinap3" , OBJPROP_RAY , 0 ); ObjectSet("dinap3" , OBJPROP_WIDTH , 1 ); ObjectCreate("dinap4", OBJ_TREND , 0, Time[cvstart],dinap4,Time[1],dinap4 ); ObjectSet("dinap4" , OBJPROP_STYLE, STYLE_DOT ); ObjectSet("dinap4" , OBJPROP_COLOR , Red ); ObjectSet("dinap4" , OBJPROP_RAY , 0 ); ObjectSet("dinap4" , OBJPROP_WIDTH , 1 ); ObjectCreate("dinap5", OBJ_TREND , 0, Time[cvstart],dinap5,Time[1],dinap5 ); ObjectSet("dinap5" , OBJPROP_STYLE, STYLE_DOT ); ObjectSet("dinap5" , OBJPROP_COLOR , Red ); ObjectSet("dinap5" , OBJPROP_RAY , 0 ); ObjectSet("dinap5" , OBJPROP_WIDTH , 1 ); } else { ObjectDelete( "fib23" ); ObjectDelete( "fib38" ); ObjectDelete( "fib50" ); ObjectDelete( "fib62" ); ObjectDelete( "fib76" ); ObjectDelete( "dinap0" ); ObjectDelete( "dinap1" ); ObjectDelete( "dinap2" ); ObjectDelete( "dinap3" ); ObjectDelete( "dinap4" ); ObjectDelete( "dinap5" ); } //vert. float lines. these draw the lines that calculate the float //if you change "trendline" to "Vline" it will draw through oscillators too.might be fun ObjectDelete("CVSTART"); ObjectCreate("CVSTART", OBJ_TREND , 0, Time[cvstart],high_bar,Time[cvstart],Low_bar*Point); ObjectSet("CVSTART" , OBJPROP_STYLE, STYLE_SOLID); ObjectSet("CVSTART" , OBJPROP_COLOR , Blue ); ObjectSet("CVSTART" , OBJPROP_RAY , 0 ); ObjectSet("CVSTART" , OBJPROP_WIDTH , 1 ); ObjectDelete("CVEND"); ObjectCreate("CVEND", OBJ_TREND , 0, Time[cvend],high_bar,Time[cvend],Low_bar*Point); ObjectSet("CVEND" , OBJPROP_STYLE, STYLE_SOLID); ObjectSet("CVEND" , OBJPROP_COLOR , Blue ); ObjectSet("CVEND" , OBJPROP_RAY , 0 ); ObjectSet("CVEND" , OBJPROP_WIDTH , 1 ); //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 if ( cvend-swing_time > 0 ) { ObjectDelete("swingend"); ObjectCreate("swingend", OBJ_TREND , 0, Time[(cvend-swing_time)+5],high_bar,Time[cvend-swing_time+5],Low_bar); ObjectSet("swingend" , OBJPROP_STYLE, STYLE_DOT); ObjectSet("swingend" , OBJPROP_COLOR , Red ); ObjectSet("swingend" , OBJPROP_RAY , 0 ); ObjectSet("swingend" , OBJPROP_WIDTH , 1 ); } else ObjectDelete("swingend"); if( cvend-(swing_time*2)>0 ) { ObjectDelete("swingend2"); ObjectCreate("swingend2", OBJ_TREND , 0, Time[(cvend-(swing_time*2))+5],high_bar,Time[cvend-(swing_time*2)+5],Low_bar); ObjectSet("swingend2" , OBJPROP_STYLE, STYLE_DOT); ObjectSet("swingend2" , OBJPROP_COLOR , Red ); ObjectSet("swingend2", OBJPROP_RAY , 0 ); ObjectSet("swingend2" , OBJPROP_WIDTH , 1 ); } else ObjectDelete("swingend2"); if( cvend-(swing_time*3)>0 ) { ObjectDelete("swingend3"); ObjectCreate("swingend3", OBJ_TREND , 0, Time[(cvend-(swing_time*3))+5],high_bar,Time[cvend-(swing_time*3)+5],Low_bar); ObjectSet("swingend3" , OBJPROP_STYLE, STYLE_DOT); ObjectSet("swingend3" , OBJPROP_COLOR , Red ); ObjectSet("swingend3", OBJPROP_RAY , 0 ); ObjectSet("swingend3" , OBJPROP_WIDTH , 1 ); } else ObjectDelete("swingend3"); if( cvend-(swing_time*4)>0 ) { ObjectDelete("swingend4"); ObjectCreate("swingend4", OBJ_TREND , 0, Time[(cvend-(swing_time*4))+5],high_bar,Time[cvend-(swing_time*4)+5],Low_bar); ObjectSet("swingend4" , OBJPROP_STYLE, STYLE_DOT); ObjectSet("swingend4" , OBJPROP_COLOR , Red ); ObjectSet("swingend4", OBJPROP_RAY , 0 ); ObjectSet("swingend4" , OBJPROP_WIDTH , 1 ); } else ObjectDelete("swingend4"); if( cvend-(swing_time*5)>0 ) { ObjectDelete("swingend5"); ObjectCreate("swingend5", OBJ_TREND , 0, Time[(cvend-(swing_time*5))+5],high_bar,Time[cvend-(swing_time*5)+5],Low_bar); ObjectSet("swingend5" , OBJPROP_STYLE, STYLE_DOT); ObjectSet("swingend5" , OBJPROP_COLOR , Red ); ObjectSet("swingend5", OBJPROP_RAY , 0 ); ObjectSet("swingend5" , OBJPROP_WIDTH , 1 ); } else ObjectDelete("swingend5"); if( cvend-(swing_time*6)>0 ) { ObjectDelete("swingend6"); ObjectCreate("swingend6", OBJ_TREND , 0, Time[cvend-(swing_time*6)+5],high_bar,Time[cvend-(swing_time*6)+5],Low_bar); ObjectSet("swingend6" , OBJPROP_STYLE, STYLE_DOT); ObjectSet("swingend6" , OBJPROP_COLOR , Red ); ObjectSet("swingend6", OBJPROP_RAY , 0 ); ObjectSet("swingend6" , OBJPROP_WIDTH , 1 ); } else ObjectDelete("swingend6"); if( cvend-(swing_time*7)>0 ) { ObjectDelete("swingend7"); ObjectCreate("swingend7", OBJ_TREND , 0, Time[cvend-(swing_time*7)+5],high_bar,Time[cvend-(swing_time*7)+5],Low_bar); ObjectSet("swingend7" , OBJPROP_STYLE, STYLE_DOT); ObjectSet("swingend7" , OBJPROP_COLOR , Red ); ObjectSet("swingend7", OBJPROP_RAY , 0 ); ObjectSet("swingend7" , OBJPROP_WIDTH , 1 ); } else ObjectDelete("swingend7"); if( cvend-(swing_time*8)>0 ) { ObjectDelete("swingend8"); ObjectCreate("swingend8", OBJ_TREND , 0, Time[cvend-(swing_time*8)+5],high_bar,Time[cvend-(swing_time*8)+5],Low_bar); ObjectSet("swingend8" , OBJPROP_STYLE, STYLE_DOT); ObjectSet("swingend8" , OBJPROP_COLOR , Red ); ObjectSet("swingend8", OBJPROP_RAY , 0 ); ObjectSet("swingend8" , OBJPROP_WIDTH , 1 ); } else ObjectDelete("swingend8"); if( cvend-(swing_time*9)>0 ) { ObjectDelete("swingend9"); ObjectCreate("swingend9", OBJ_TREND , 0, Time[cvend-(swing_time*9)+5],high_bar,Time[cvend-(swing_time*9)+5],Low_bar); ObjectSet("swingend9" , OBJPROP_STYLE, STYLE_DOT); ObjectSet("swingend9" , OBJPROP_COLOR , Red ); ObjectSet("swingend9", OBJPROP_RAY , 0 ); ObjectSet("swingend9" , OBJPROP_WIDTH , 1 ); } else ObjectDelete("swingend9"); //comment out anything you"re not using it will help with speed. if( Backtesting == 1 ) { GlobalVariableSet("fib23",fib23); GlobalVariableSet("fib38",fib38); GlobalVariableSet("fib50",fib50); GlobalVariableSet("fib62",fib62); GlobalVariableSet("fib76",fib76); GlobalVariableSet("dinap0",dinap0); GlobalVariableSet("dinap1",dinap1); GlobalVariableSet("dinap2",dinap2); GlobalVariableSet("dinap3",dinap3); GlobalVariableSet("dinap4",dinap4); GlobalVariableSet("dinap5",dinap5); GlobalVariableSet("swingtop",high_bar); GlobalVariableSet("swingbottom",Low_bar); GlobalVariableSet("CVSTART",cvstart); GlobalVariableSet("CVEND",cvend); GlobalVariableSet("FLOATV",FLOATV); GlobalVariableSet("cumulativeV",cumulativeV); GlobalVariableSet("swing_time",swing_time); GlobalVariableSet("bars_high",bars_high); GlobalVariableSet("bars_low",bars_low); if( cvend-swing_time>0 ) GlobalVariableSet("swingend",(cvend-swing_time)+5); if( cvend-(swing_time*2)>0 ) GlobalVariableSet("swingend2",cvend-(swing_time*2)+5); if( cvend-(swing_time*3)>0 ) GlobalVariableSet("swingend3",cvend-(swing_time*3)+5); if( cvend-(swing_time*4)>0 ) GlobalVariableSet("swingend4",cvend-(swing_time*4)+5); if( cvend-(swing_time*5)>0 ) GlobalVariableSet("swingend5",cvend-(swing_time*5)+5); if( cvend-(swing_time*6)>0 ) GlobalVariableSet("swingend6",cvend-(swing_time*6)+5); if( cvend-(swing_time*7)>0 ) GlobalVariableSet("swingend7",cvend-(swing_time*7)+5); if( cvend-(swing_time*8)>0 ) GlobalVariableSet("swingend8",cvend-(swing_time*8)+5); if( cvend-(swing_time*9)>0 ) GlobalVariableSet("swingend9",cvend-(swing_time*9)+5); } // end Backtesting } } } return(0); }