//+------------------------------------------------------------------+ //| IBFX - Daily Pivots.mq4 | //| Patrick Nouvion | //| http://www.interbankfx.com | //+------------------------------------------------------------------+ #property copyright "Patrick Nouvion" #property link "http://www.interbankfx.com" #property indicator_chart_window #property indicator_buffers 7 #property indicator_color1 Maroon #property indicator_color2 Crimson #property indicator_color3 Crimson #property indicator_color4 OrangeRed #property indicator_color5 Green #property indicator_color6 Green #property indicator_color7 DarkGreen #property indicator_style1 STYLE_SOLID #property indicator_style2 STYLE_DASH #property indicator_style3 STYLE_DASH #property indicator_style4 STYLE_SOLID #property indicator_style5 STYLE_DASH #property indicator_style6 STYLE_DASH #property indicator_style7 STYLE_SOLID #property indicator_width1 2 #property indicator_width2 1 #property indicator_width3 1 #property indicator_width4 2 #property indicator_width5 1 #property indicator_width6 1 #property indicator_width7 2 //---- Declare the arrays ... double R3_0[], R2_0[], R1_0[], R0_5[], Pivot[], S1_0[], S2_0[], S3_0[]; double rates_d1[2][6]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { CleanUp(); //IndicatorBuffers(13); //---- Set Index Buffers / Set Index Labels SetIndexBuffer( 0 , R3_0); SetIndexLabel( 0, "R3" ); SetIndexStyle( 0, DRAW_LINE, STYLE_SOLID, 2, Maroon ); //SetIndexBuffer( 1 , R2_5); SetIndexLabel( 1, "R2.5" ); SetIndexStyle( 1, DRAW_LINE, STYLE_DOT, 1, Orchid); SetIndexBuffer( 1 , R2_0); SetIndexLabel( 1, "R2" ); SetIndexStyle( 1, 0, STYLE_DASH, 1, Crimson); //SetIndexBuffer( 3 , R1_5); SetIndexLabel( 3, "R1.5" ); SetIndexStyle( 3, DRAW_LINE, STYLE_DOT, 1, Orchid); SetIndexBuffer( 2 , R1_0); SetIndexLabel( 2, "R1" ); SetIndexStyle( 2, DRAW_LINE, STYLE_DASH, 1, Crimson); //SetIndexBuffer( 5 , R0_5); SetIndexLabel( 5, "R0.5" ); SetIndexStyle( 5, DRAW_LINE, STYLE_DOT, 1, Orchid); SetIndexBuffer( 3 , Pivot); SetIndexLabel( 3, "Pivot" );SetIndexStyle( 3, DRAW_LINE, STYLE_SOLID, 2, OrangeRed); //SetIndexBuffer( 7 , S0_5); SetIndexLabel( 7, "S0.5" ); SetIndexStyle( 7, DRAW_LINE, STYLE_DOT, 1, LawnGreen); SetIndexBuffer( 4 , S1_0); SetIndexLabel( 4, "S1" ); SetIndexStyle( 4, DRAW_LINE, STYLE_DASH, 1, Green); //SetIndexBuffer( 9 , S1_5); SetIndexLabel( 9, "S1.5" ); SetIndexStyle( 9, DRAW_LINE, STYLE_DOT, 1, LawnGreen); SetIndexBuffer( 5 , S2_0); SetIndexLabel( 5, "S2" ); SetIndexStyle( 5, DRAW_LINE, STYLE_DASH, 1, Green); //SetIndexBuffer( 11 , S2_5); SetIndexLabel( 11, "S2.5" ); SetIndexStyle( 11, DRAW_LINE, STYLE_DOT, 1, LawnGreen); SetIndexBuffer( 6 , S3_0); SetIndexLabel( 6, "S3" ); SetIndexStyle( 6, DRAW_LINE, STYLE_SOLID, 2, DarkGreen); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- CleanUp(); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { ArrayCopyRates(rates_d1, Symbol(), PERIOD_D1); int offset = 0; if(DayOfWeek()==1) offset=1; int Precision = CheckPrecision(); double yesterday_close = rates_d1[1+offset][4]; double yesterday_open = rates_d1[1+offset][1]; double yesterday_high = rates_d1[1+offset][3]; double yesterday_low = rates_d1[1+offset][2]; string StrR3Value = ""; string StrR2Value = ""; string StrR1Value = ""; string StrPivotValue = ""; string StrS1Value = ""; string StrS2Value = ""; string StrS3Value = ""; int counted_bars=IndicatorCounted(); if(counted_bars<0) { return(-1); } if(counted_bars>0) { counted_bars--; } int Limit = Bars-counted_bars; for( int i = Limit; i > 0; i-- ) { Pivot[i] = ( yesterday_high + yesterday_low + yesterday_close ) / 3.0 ; R1_0[i] = ( 2.0 * Pivot[i] ) - yesterday_low; S1_0[i] = ( 2.0 * Pivot[i] ) - yesterday_high; R2_0[i] = Pivot[i] + ( R1_0[i] - S1_0[i] ); S2_0[i] = Pivot[i] - ( R1_0[i] - S1_0[i] ); R3_0[i] = ( 2.0 * Pivot[i] ) + ( yesterday_high - ( 2.0 * yesterday_low ) ); S3_0[i] = ( 2.0 * Pivot[i] ) - ( ( 2.0 * yesterday_high ) - yesterday_low ); //R0_5[i] = ( Pivot[i] + R1_0[i] ) / 2.0; //S0_5[i] = ( Pivot[i] + S1_0[i] ) / 2.0; //R1_5[i] = ( R1_0[i] + R2_0[i] ) / 2.0; //S1_5[i] = ( S1_0[i] + S2_0[i] ) / 2.0; //R2_5[i] = ( R2_0[i] + R3_0[i] ) / 2.0; //S2_5[i] = ( S2_0[i] + S3_0[i] ) / 2.0; StrR3Value = DoubleToStr( R3_0[i], Precision ); StrR2Value = DoubleToStr( R2_0[i], Precision ); StrR1Value = DoubleToStr( R1_0[i], Precision ); StrPivotValue = DoubleToStr( Pivot[i], Precision ); StrS1Value = DoubleToStr( S1_0[i], Precision ); StrS2Value = DoubleToStr( S2_0[i], Precision ); StrS3Value = DoubleToStr( S3_0[i], Precision ); } ObjectMakeLabel( "R3", 70, 10, 0); ObjectSetText( "R3", "R3 - " , 10, "Arial Bold", Maroon); ObjectMakeLabel( "R3Value", 30, 10, 0); ObjectSetText( "R3Value", StrR3Value , 10, "Arial ", Maroon); ObjectMakeLabel( "R2", 70, 25, 0); ObjectSetText( "R2", "R2 - " , 10, "Arial Bold", Crimson); ObjectMakeLabel( "R2Value", 30, 25, 0); ObjectSetText( "R2Value", StrR2Value , 10, "Arial ", Crimson); ObjectMakeLabel( "R1", 70, 40 , 0); ObjectSetText( "R1", "R1 - " , 10, "Arial Bold", Crimson); ObjectMakeLabel( "R1Value", 30, 40, 0); ObjectSetText( "R1Value", StrR1Value , 10, "Arial ", Crimson); ObjectMakeLabel( "Pivot", 70, 55, 0); ObjectSetText( "Pivot", "Pivot - " , 10, "Arial Bold", OrangeRed); ObjectMakeLabel( "PivotValue", 30, 55, 0); ObjectSetText( "PivotValue", StrPivotValue , 10, "Arial ", OrangeRed); ObjectMakeLabel( "S1", 70, 70, 0); ObjectSetText( "S1", "S1 - " , 10, "Arial Bold", Green); ObjectMakeLabel( "S1Value", 30, 70, 0); ObjectSetText( "S1Value", StrS1Value , 10, "Arial ", Green); ObjectMakeLabel( "S2", 70, 85, 0); ObjectSetText( "S2", "S2 - " , 10, "Arial Bold", Green); ObjectMakeLabel( "S2Value", 30, 85, 0); ObjectSetText( "S2Value", StrS2Value , 10, "Arial ", Green); ObjectMakeLabel( "S3", 70, 100, 0); ObjectSetText( "S3", "S3 - " , 10, "Arial Bold", DarkGreen); ObjectMakeLabel( "S3Value", 30, 100, 0); ObjectSetText( "S3Value", StrS3Value , 10, "Arial ", DarkGreen); //---- return(0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ int ObjectMakeLabel( string n, int xoff, int yoff, int WindowToUse ){ ObjectCreate( n, OBJ_LABEL, WindowToUse, 0, 0 ); ObjectSet( n, OBJPROP_CORNER, 1 ); ObjectSet( n, OBJPROP_XDISTANCE, xoff ); ObjectSet( n, OBJPROP_YDISTANCE, yoff ); ObjectSet( n, OBJPROP_BACK, true ); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ void CleanUp() { ObjectDelete("R3"); ObjectDelete("R2"); ObjectDelete("R1"); ObjectDelete("Pivot"); ObjectDelete("S1"); ObjectDelete("S2"); ObjectDelete("S3"); ObjectDelete("R3Value"); ObjectDelete("R2Value"); ObjectDelete("R1Value"); ObjectDelete("PivotValue"); ObjectDelete("S1Value"); ObjectDelete("S2Value"); ObjectDelete("S3Value"); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ int CheckPrecision() { if( StringFind( Symbol(), "JPY", 0) != -1 ) { return(2); } else { return(4); } } //+------------------------------------------------------------------+