//+------------------------------------------------------------------+ //| SAR_ADX SideBar ForexTSD.com ki based on SAR Color Bar.mq4| //+------------------------------------------------------------------+ #property copyright "Kalenzo Code adapted by cja" #property link "http://www.foreksik.prv.pl" #property indicator_color1 Red #property indicator_color2 Green #property indicator_color3 Yellow #property indicator_color4 Lime #property indicator_color5 Orchid #property indicator_width1 3 #property indicator_width2 3 #property indicator_width3 3 #property indicator_width4 4 #property indicator_width5 4 #property indicator_separate_window #property indicator_buffers 5 #property indicator_maximum 77 #property indicator_minimum 1 double PADX_buff[],NADX_buff[],ADX_buff[],sarUp[],sarDn[];//buffers extern int TimeFrame = 0; extern double SAR_Step = 0.013; extern double SAR_Maximum = 0.2; extern int SAR_Precision = 5; extern int ADX_Period = 14; extern int ADX_Level = 20; extern int sBarLevel = 5; extern bool _ADXstyleLine = false; extern bool pADXstyleLine = false; extern bool nADXstyleLine = true; //extern bool History = 500; extern string note_sBarLevel = "sBarLevel:1-77(bar position)"; extern string note_SAR_Precision = "digits after decimal point(0-8)"; extern string note_ADXstyle = " ADXstyle: Line/Dot"; extern string note_TimeFrames = "M1;5,15,30,60H1;240H4;1440D1;10080W1;43200MN"; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexBuffer(0,sarUp); SetIndexStyle (0,DRAW_ARROW); SetIndexArrow (0,167);//110 SetIndexBuffer(1,sarDn); SetIndexStyle (1,DRAW_ARROW); SetIndexArrow (1,167); if (_ADXstyleLine) SetIndexStyle(2,DRAW_LINE); else {SetIndexStyle (2,DRAW_ARROW); SetIndexArrow (2,158);} SetIndexBuffer(2,ADX_buff); if (pADXstyleLine) SetIndexStyle(3,DRAW_LINE); else { SetIndexStyle (3,DRAW_ARROW); SetIndexArrow (3,158);} SetIndexBuffer(3,PADX_buff); if (nADXstyleLine) SetIndexStyle(4,DRAW_LINE); else {SetIndexStyle (4,DRAW_ARROW); SetIndexArrow (4,158);} SetIndexBuffer(4,NADX_buff); switch(TimeFrame) { case 1 : string TimeFrameStr="Period_M1"; break; case 5 : TimeFrameStr="Period_M5"; break; case 15 : TimeFrameStr="Period_M15"; break; case 30 : TimeFrameStr="Period_M30"; break; case 60 : TimeFrameStr="Period_H1"; break; case 240 : TimeFrameStr="Period_H4"; break; case 1440 : TimeFrameStr="Period_D1"; break; case 10080 : TimeFrameStr="Period_W1"; break; case 43200 : TimeFrameStr="Period_MN1"; break; default : TimeFrameStr="Current Timeframe"; } IndicatorShortName("SAR("+SAR_Step+","+SAR_Maximum+")_ADX("+ADX_Period+")_sBar["+TimeFrameStr+"]"); SetIndexLabel(0,"SAR ["+TimeFrame+"] Down"); SetIndexLabel(1,"SAR ["+TimeFrame+"] Up"); SetIndexLabel(2,"ADX ["+TimeFrame+"] Level < "+ADX_Level+""); SetIndexLabel(3,"ADX ["+TimeFrame+"]Up"); SetIndexLabel(4,"ADX ["+TimeFrame+"]Down"); SetIndexDrawBegin(0,2); SetIndexDrawBegin(1,2); SetIndexDrawBegin(2,2); SetIndexDrawBegin(3,2); SetIndexDrawBegin(4,2); if(TimeFrame <Period()) TimeFrame = Period(); //---- return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int i,y=0,limit; datetime TimeArray[]; ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame); int counted_bars=IndicatorCounted(); if(counted_bars<0) counted_bars=0; if(counted_bars>0) counted_bars--; limit=Bars-counted_bars+TimeFrame/Period(); //---- for(i =0, y=0; i<limit; i++) { if (Time[i]<TimeArray[y]) y++; double sar = NormalizeDouble(iSAR(Symbol(),TimeFrame,SAR_Step,SAR_Maximum,y),SAR_Precision); double ADX=iADX(NULL,TimeFrame,ADX_Period,0,0,y); double PADX=iADX(NULL,TimeFrame,ADX_Period,0,1,y); double NADX=iADX(NULL,TimeFrame,ADX_Period,0,2,y); if(sar >= iHigh(Symbol(),0,i)) { sarUp[i] = sBarLevel; sarDn[i] = EMPTY_VALUE; } else { sarUp[i] = EMPTY_VALUE; sarDn[i] = sBarLevel; } if(ADX < ADX_Level) ADX_buff[i]=sBarLevel+2; if(PADX > NADX) PADX_buff[i]=sBarLevel-2; if(PADX < NADX) NADX_buff[i]=sBarLevel-2; } // Refresh buffers //++++++++++++++++++++++++++++++++++++++ upgrade by Raff if (TimeFrame>Period()) { int PerINT=TimeFrame/Period()+1; datetime TimeArr[]; ArrayResize(TimeArr,PerINT); ArrayCopySeries(TimeArr,MODE_TIME,Symbol(),Period()); for(i=0;i<PerINT+1;i++) {if (TimeArr[i]>=TimeArray[0]) { //---- /******************************************************** Refresh buffers: buffer[i] = buffer[0]; ********************************************************/ sarUp[i]=sarUp[0]; sarDn[i]=sarDn[0]; ADX_buff [i]=ADX_buff[0]; PADX_buff[i]=ADX_buff[0]; NADX_buff[i]=ADX_buff[0]; //---- } } } //+++++++++++++++++++++++++++++++++++++++++++++++ Raff //---- 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
Indicator Curves created:
Implements a curve of type DRAW_LINE
Indicators Used:
Parabolic Stop and Reverse system
Movement directional index
Custom Indicators Used:
Order Management characteristics:
Other Features: