//+------------------------------------------------------------------+ //| SR_TLB.mq4 | //| Support and Resistance MTF Trend Line Breaks | //| Copyright © 2008, Ulterior (FF) | //+------------------------------------------------------------------+ #property copyright "Copyright © 2008, Ulterior (FF)" #property link "http://localhost" //---- #property indicator_chart_window #property indicator_buffers 0 //---- extern int LB=3; extern int maxBarsForPeriod=1000; extern bool showM01 = true; extern bool showM05 = true; extern bool showM15 = true; extern bool showM30 = true; extern bool showH01 = true; extern bool showH04 = true; extern bool showD01 = true; extern bool showW01 = true; extern bool showMN1 = true; //---- //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { IndicatorShortName("3 Line Break On Chart +levels"); //---- indicators set_prevBarTime(PERIOD_M1,NULL); set_prevBarTime(PERIOD_M5,NULL); set_prevBarTime(PERIOD_M15,NULL); set_prevBarTime(PERIOD_M30,NULL); set_prevBarTime(PERIOD_H1,NULL); set_prevBarTime(PERIOD_H4,NULL); set_prevBarTime(PERIOD_D1,NULL); set_prevBarTime(PERIOD_W1,NULL); set_prevBarTime(PERIOD_MN1,NULL); return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M1)," Sup")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M1)," Res")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M1)," Sup C")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M1)," Res C")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M5)," Sup")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M5)," Res")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M5)," Sup C")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M5)," Res C")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M15)," Sup")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M15)," Res")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M15)," Sup C")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M15)," Res C")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M30)," Sup")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M30)," Res")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M30)," Sup C")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_M30)," Res C")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_H1)," Sup")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_H1)," Res")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_H1)," Sup C")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_H1)," Res C")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_H4)," Sup")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_H4)," Res")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_H4)," Sup C")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_H4)," Res C")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_D1)," Sup")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_D1)," Res")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_D1)," Sup C")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_D1)," Res C")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_W1)," Sup")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_W1)," Res")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_W1)," Sup C")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_W1)," Res C")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_MN1)," Sup")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_MN1)," Res")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_MN1)," Sup C")); DeleteHLineObject(StringConcatenate(getPeriodAsString(PERIOD_MN1)," Res C")); //---- return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double Diap(int mt4Period,bool up,int C,int shift) { int i; double MM=0; if(up) { MM=get_max(mt4Period,shift); for(i=1; iMM) MM=get_max(mt4Period,shift-i); } if(!up) { MM=get_min(mt4Period,shift); for(i=1; i0 && numBars>maxBarsForPeriod) numBars=maxBarsForPeriod; int TLBBuffShift=0; int limit=numBars; emulate_tlbmaxmin(mt4Period,numBars); int i,j; j=1; while(iClose(Symbol(),mt4Period,limit-1)==iClose(Symbol(),mt4Period,limit-1-j)) { j++; if(j>limit-1) break; } if(iClose(Symbol(),mt4Period,limit-1)>iClose(Symbol(),mt4Period,limit-1-j)) { set_max(mt4Period,0,iClose(Symbol(),mt4Period,limit-1)); set_min(mt4Period,0,iClose(Symbol(),mt4Period,limit-1-j)); } if(iClose(Symbol(),mt4Period,limit-1)=Diap(mt4Period,false,i,TLBBuffShift)) { j++; if(j>limit-1) break; } if(j>limit-1) break; if(iClose(Symbol(),mt4Period,limit-j)>get_max(mt4Period,i-1)) { set_max(mt4Period,i,iClose(Symbol(),mt4Period,limit-j)); set_min(mt4Period,i,get_max(mt4Period,i-1)); TLBBuffShift++; } if(iClose(Symbol(),mt4Period,limit-j)=Diap(mt4Period,false,LB,TLBBuffShift)) { j++; if(j>limit-1) break; } if(j>limit-1) break; if(iClose(Symbol(),mt4Period,limit-j)>get_max(mt4Period,i-1)) { set_max(mt4Period,i,iClose(Symbol(),mt4Period,limit-j)); set_min(mt4Period,i,get_max(mt4Period,i-1)); TLBBuffShift++; } if(iClose(Symbol(),mt4Period,limit-j)get_max(mt4Period,i-1)) { if(blueCnt>=LB) sup=get_max(mt4Period,i-LB); else sup=get_min(mt4Period,i-blueCnt-1); resc = get_max( mt4Period, i ); supc = 0; res=0; blueCnt++; redCnt=0; } if(get_max(mt4Period,i)=LB) res=get_min(mt4Period,i-LB); else res=get_max(mt4Period,i-redCnt-1); supc= get_min(mt4Period,i); sup = 0; resc= 0; blueCnt=0; redCnt++; } } if(sup>0.0) ShowHLineObject(StringConcatenate(getPeriodAsString(mt4Period)," Sup"),Blue,STYLE_SOLID,sup,500); else DeleteHLineObject(StringConcatenate(getPeriodAsString(mt4Period)," Sup")); if(res>0.0) ShowHLineObject(StringConcatenate(getPeriodAsString(mt4Period)," Res"),Red,STYLE_SOLID,res,500); else DeleteHLineObject(StringConcatenate(getPeriodAsString(mt4Period)," Res")); if(supc>0.0) ShowHLineObject(StringConcatenate(getPeriodAsString(mt4Period)," Sup C"),Blue,STYLE_DASHDOTDOT,supc,1200); else DeleteHLineObject(StringConcatenate(getPeriodAsString(mt4Period)," Sup C")); if(resc>0.0) ShowHLineObject(StringConcatenate(getPeriodAsString(mt4Period)," Res C"),Red,STYLE_DASHDOTDOT,resc,1200); else DeleteHLineObject(StringConcatenate(getPeriodAsString(mt4Period)," Res C")); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { if( Period() <= PERIOD_M1 && showM01 ) displayPeriod( PERIOD_M1 ); if( Period() <= PERIOD_M5 && showM05 ) displayPeriod( PERIOD_M5 ); if( Period() <= PERIOD_M15 && showM15 ) displayPeriod( PERIOD_M15 ); if( Period() <= PERIOD_M30 && showM30 ) displayPeriod( PERIOD_M30 ); if( Period() <= PERIOD_H1 && showH01 ) displayPeriod( PERIOD_H1 ); if( Period() <= PERIOD_H4 && showH04 ) displayPeriod( PERIOD_H4 ); if( Period() <= PERIOD_D1 && showD01 ) displayPeriod( PERIOD_D1 ); if( Period() <= PERIOD_W1 && showW01 ) displayPeriod( PERIOD_W1 ); if( Period() <= PERIOD_MN1 && showMN1 ) displayPeriod( PERIOD_MN1 ); return(0); } //+------------------------------------------------------------------+