//+------------------------------------------------------------------+ //| SR_TLB.mq5 | //| Copyright © 2008, Ulterior (FF) | //+------------------------------------------------------------------+ //---- The author of the indicator #property copyright "Copyright © 2008, Ulterior (FF)" //---- A ink to the author's site #property link "http://localhost" //---- the nummber of the indicator version #property version "1.00" #property description "Support and Resistance MTF Trend Line Breaks" //---- The indicator is drawn in the main window #property indicator_chart_window //---- the number of indicator buffers is 42 #property indicator_buffers 42 //---- 0 graphical constructions used #property indicator_plots 0 //+----------------------------------------------+ //| Input parameters of the indicator | //+----------------------------------------------+ input int LB=3; input int maxBarsForPeriod=1000; input bool showM01 = true; input bool showM02 = true; input bool showM03 = true; input bool showM04 = true; input bool showM05 = true; input bool showM06 = true; input bool showM10 = true; input bool showM12 = true; input bool showM15 = true; input bool showM20 = true; input bool showM30 = true; input bool showH01 = true; input bool showH02 = true; input bool showH03 = true; input bool showH04 = true; input bool showH06 = true; input bool showH08 = true; input bool showH12 = true; input bool showD01 = true; input bool showW01 = true; input bool showMN1 = true; //+----------------------------------------------+ //---- Declaring dynamic arrays that // will further be used as indicator bufers double TLBMax_M01[]; double TLBMax_M02[]; double TLBMax_M03[]; double TLBMax_M04[]; double TLBMax_M05[]; double TLBMax_M06[]; double TLBMax_M10[]; double TLBMax_M12[]; double TLBMax_M15[]; double TLBMax_M20[]; double TLBMax_M30[]; double TLBMax_H01[]; double TLBMax_H02[]; double TLBMax_H03[]; double TLBMax_H04[]; double TLBMax_H06[]; double TLBMax_H08[]; double TLBMax_H12[]; double TLBMax_D01[]; double TLBMax_W01[]; double TLBMax_MN1[]; double TLBMin_M01[]; double TLBMin_M02[]; double TLBMin_M03[]; double TLBMin_M04[]; double TLBMin_M05[]; double TLBMin_M06[]; double TLBMin_M10[]; double TLBMin_M12[]; double TLBMin_M15[]; double TLBMin_M20[]; double TLBMin_M30[]; double TLBMin_H01[]; double TLBMin_H02[]; double TLBMin_H03[]; double TLBMin_H04[]; double TLBMin_H06[]; double TLBMin_H08[]; double TLBMin_H12[]; double TLBMin_D01[]; double TLBMin_W01[]; double TLBMin_MN1[]; //---- Declaring integer variables of data calculation start int min_rates_total; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ void OnInit() { //---- Initialization of variables of the start of data calculation min_rates_total=int(1); set_prevBarTime(PERIOD_M1,NULL); set_prevBarTime(PERIOD_M2,NULL); set_prevBarTime(PERIOD_M3,NULL); set_prevBarTime(PERIOD_M4,NULL); set_prevBarTime(PERIOD_M5,NULL); set_prevBarTime(PERIOD_M6,NULL); set_prevBarTime(PERIOD_M10,NULL); set_prevBarTime(PERIOD_M12,NULL); set_prevBarTime(PERIOD_M15,NULL); set_prevBarTime(PERIOD_M20,NULL); set_prevBarTime(PERIOD_M30,NULL); set_prevBarTime(PERIOD_H1,NULL); set_prevBarTime(PERIOD_H2,NULL); set_prevBarTime(PERIOD_H3,NULL); set_prevBarTime(PERIOD_H4,NULL); set_prevBarTime(PERIOD_H6,NULL); set_prevBarTime(PERIOD_H8,NULL); set_prevBarTime(PERIOD_H12,NULL); set_prevBarTime(PERIOD_D1,NULL); set_prevBarTime(PERIOD_W1,NULL); set_prevBarTime(PERIOD_MN1,NULL); //---- Set dynamic arrays as buffers for storing data Init(0,TLBMax_M01); Init(1,TLBMax_M02); Init(2,TLBMax_M03); Init(3,TLBMax_M04); Init(4,TLBMax_M05); Init(5,TLBMax_M06); Init(6,TLBMax_M10); Init(7,TLBMax_M12); Init(8,TLBMax_M15); Init(9,TLBMax_M20); Init(10,TLBMax_M30); Init(11,TLBMax_H01); Init(12,TLBMax_H02); Init(13,TLBMax_H03); Init(14,TLBMax_H04); Init(15,TLBMax_H06); Init(16,TLBMax_H08); Init(17,TLBMax_H12); Init(18,TLBMax_D01); Init(19,TLBMax_W01); Init(20,TLBMax_MN1); Init(21,TLBMin_M01); Init(22,TLBMin_M02); Init(23,TLBMin_M03); Init(24,TLBMin_M04); Init(25,TLBMin_M05); Init(26,TLBMin_M06); Init(27,TLBMin_M10); Init(28,TLBMin_M12); Init(29,TLBMin_M15); Init(30,TLBMin_M20); Init(31,TLBMin_M30); Init(32,TLBMin_H01); Init(33,TLBMin_H02); Init(34,TLBMin_H03); Init(35,TLBMin_H04); Init(36,TLBMin_H06); Init(37,TLBMin_H08); Init(38,TLBMin_H12); Init(39,TLBMin_D01); Init(40,TLBMin_W01); Init(41,TLBMin_MN1); //---- Set accuracy of displaying for the indicator values IndicatorSetInteger(INDICATOR_DIGITS,_Digits); //---- Creating labels for displaying in DataWindow and the name for displaying in a separate sub-window and in a tooltip IndicatorSetString(INDICATOR_SHORTNAME,"3 Line Break On Chart +levels"); //---- } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void Init(int Number,double &IndArray[]) { //---- Set a dynamic array as an indicator buffer SetIndexBuffer(Number,IndArray,INDICATOR_CALCULATIONS); //---- Indexing elements in the buffer as in timeseries ArraySetAsSeries(IndArray,true); //---- } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //---- DeleteHLineObject(getPeriodAsString(PERIOD_M1)+" Sup"); DeleteHLineObject(getPeriodAsString(PERIOD_M1)+" Res"); DeleteHLineObject(getPeriodAsString(PERIOD_M1)+" Sup C"); DeleteHLineObject(getPeriodAsString(PERIOD_M1)+" Res C"); DeleteHLineObject(getPeriodAsString(PERIOD_M2)+" Sup"); DeleteHLineObject(getPeriodAsString(PERIOD_M2)+" Res"); DeleteHLineObject(getPeriodAsString(PERIOD_M2)+" Sup C"); DeleteHLineObject(getPeriodAsString(PERIOD_M2)+" Res C"); DeleteHLineObject(getPeriodAsString(PERIOD_M3)+" Sup"); DeleteHLineObject(getPeriodAsString(PERIOD_M3)+" Res"); DeleteHLineObject(getPeriodAsString(PERIOD_M3)+" Sup C"); DeleteHLineObject(getPeriodAsString(PERIOD_M3)+" Res C"); DeleteHLineObject(getPeriodAsString(PERIOD_M4)+" Sup"); DeleteHLineObject(getPeriodAsString(PERIOD_M4)+" Res"); DeleteHLineObject(getPeriodAsString(PERIOD_M4)+" Sup C"); DeleteHLineObject(getPeriodAsString(PERIOD_M4)+" Res C"); DeleteHLineObject(getPeriodAsString(PERIOD_M5)+" Sup"); DeleteHLineObject(getPeriodAsString(PERIOD_M5)+" Res"); DeleteHLineObject(getPeriodAsString(PERIOD_M5)+" Sup C"); DeleteHLineObject(getPeriodAsString(PERIOD_M5)+" Res C"); DeleteHLineObject(getPeriodAsString(PERIOD_M6)+" Sup"); DeleteHLineObject(getPeriodAsString(PERIOD_M6)+" Res"); DeleteHLineObject(getPeriodAsString(PERIOD_M6)+" Sup C"); DeleteHLineObject(getPeriodAsString(PERIOD_M6)+" Res C"); DeleteHLineObject(getPeriodAsString(PERIOD_M10)+" Sup"); DeleteHLineObject(getPeriodAsString(PERIOD_M10)+" Res"); DeleteHLineObject(getPeriodAsString(PERIOD_M10)+" Sup C"); DeleteHLineObject(getPeriodAsString(PERIOD_M10)+" Res C"); DeleteHLineObject(getPeriodAsString(PERIOD_M12)+" Sup"); DeleteHLineObject(getPeriodAsString(PERIOD_M12)+" Res"); DeleteHLineObject(getPeriodAsString(PERIOD_M12)+" Sup C"); DeleteHLineObject(getPeriodAsString(PERIOD_M12)+" Res C"); DeleteHLineObject(getPeriodAsString(PERIOD_M15)+" Sup"); DeleteHLineObject(getPeriodAsString(PERIOD_M15)+" Res"); DeleteHLineObject(getPeriodAsString(PERIOD_M15)+" Sup C"); DeleteHLineObject(getPeriodAsString(PERIOD_M15)+" Res C"); DeleteHLineObject(getPeriodAsString(PERIOD_M20)+" Sup"); DeleteHLineObject(getPeriodAsString(PERIOD_M20)+" Res"); DeleteHLineObject(getPeriodAsString(PERIOD_M20)+" Sup C"); DeleteHLineObject(getPeriodAsString(PERIOD_M20)+" Res C"); DeleteHLineObject(getPeriodAsString(PERIOD_M30)+" Sup"); DeleteHLineObject(getPeriodAsString(PERIOD_M30)+" Res"); DeleteHLineObject(getPeriodAsString(PERIOD_M30)+" Sup C"); DeleteHLineObject(getPeriodAsString(PERIOD_M30)+" Res C"); DeleteHLineObject(getPeriodAsString(PERIOD_H1)+" Sup"); DeleteHLineObject(getPeriodAsString(PERIOD_H1)+" Res"); DeleteHLineObject(getPeriodAsString(PERIOD_H1)+" Sup C"); DeleteHLineObject(getPeriodAsString(PERIOD_H1)+" Res C"); DeleteHLineObject(getPeriodAsString(PERIOD_H2)+" Sup"); DeleteHLineObject(getPeriodAsString(PERIOD_H2)+" Res"); DeleteHLineObject(getPeriodAsString(PERIOD_H2)+" Sup C"); DeleteHLineObject(getPeriodAsString(PERIOD_H2)+" Res C"); DeleteHLineObject(getPeriodAsString(PERIOD_H3)+" Sup"); DeleteHLineObject(getPeriodAsString(PERIOD_H3)+" Res"); DeleteHLineObject(getPeriodAsString(PERIOD_H3)+" Sup C"); DeleteHLineObject(getPeriodAsString(PERIOD_H3)+" Res C"); DeleteHLineObject(getPeriodAsString(PERIOD_H4)+" Sup"); DeleteHLineObject(getPeriodAsString(PERIOD_H4)+" Res"); DeleteHLineObject(getPeriodAsString(PERIOD_H4)+" Sup C"); DeleteHLineObject(getPeriodAsString(PERIOD_H4)+" Res C"); DeleteHLineObject(getPeriodAsString(PERIOD_H6)+" Sup"); DeleteHLineObject(getPeriodAsString(PERIOD_H6)+" Res"); DeleteHLineObject(getPeriodAsString(PERIOD_H6)+" Sup C"); DeleteHLineObject(getPeriodAsString(PERIOD_H6)+" Res C"); DeleteHLineObject(getPeriodAsString(PERIOD_H8)+" Sup"); DeleteHLineObject(getPeriodAsString(PERIOD_H8)+" Res"); DeleteHLineObject(getPeriodAsString(PERIOD_H8)+" Sup C"); DeleteHLineObject(getPeriodAsString(PERIOD_H8)+" Res C"); DeleteHLineObject(getPeriodAsString(PERIOD_H12)+" Sup"); DeleteHLineObject(getPeriodAsString(PERIOD_H12)+" Res"); DeleteHLineObject(getPeriodAsString(PERIOD_H12)+" Sup C"); DeleteHLineObject(getPeriodAsString(PERIOD_H12)+" Res C"); DeleteHLineObject(getPeriodAsString(PERIOD_D1)+" Sup"); DeleteHLineObject(getPeriodAsString(PERIOD_D1)+" Res"); DeleteHLineObject(getPeriodAsString(PERIOD_D1)+" Sup C"); DeleteHLineObject(getPeriodAsString(PERIOD_D1)+" Res C"); DeleteHLineObject(getPeriodAsString(PERIOD_W1)+" Sup"); DeleteHLineObject(getPeriodAsString(PERIOD_W1)+" Res"); DeleteHLineObject(getPeriodAsString(PERIOD_W1)+" Sup C"); DeleteHLineObject(getPeriodAsString(PERIOD_W1)+" Res C"); DeleteHLineObject(getPeriodAsString(PERIOD_MN1)+" Sup"); DeleteHLineObject(getPeriodAsString(PERIOD_MN1)+" Res"); DeleteHLineObject(getPeriodAsString(PERIOD_MN1)+" Sup C"); DeleteHLineObject(getPeriodAsString(PERIOD_MN1)+" Res C"); //---- } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate( const int rates_total, // amount of history in bars at the current tick const int prev_calculated,// amount of history in bars at the previous tick const datetime &Time[], const double &Open[], const double& high[], // A price array of price maximums for the calculation of the indicator const double& Low[], // A price array of price minimums for the calculation of the indicator const double &Close[], const long &Tick_volume[], const long &Volume[], const int &Spread[] ) { //---- Indexing elements in arrays as in timeseries ArraySetAsSeries(Time,true); if( Period() <= PERIOD_M1 && showM01 ) displayPeriod( PERIOD_M1,Time ); if( Period() <= PERIOD_M2 && showM02 ) displayPeriod( PERIOD_M2,Time ); if( Period() <= PERIOD_M3 && showM03 ) displayPeriod( PERIOD_M3,Time ); if( Period() <= PERIOD_M4 && showM04 ) displayPeriod( PERIOD_M4,Time ); if( Period() <= PERIOD_M5 && showM05 ) displayPeriod( PERIOD_M5,Time ); if( Period() <= PERIOD_M6 && showM05 ) displayPeriod( PERIOD_M6,Time ); if( Period() <= PERIOD_M10 && showM10 ) displayPeriod( PERIOD_M10,Time ); if( Period() <= PERIOD_M12 && showM12 ) displayPeriod( PERIOD_M12,Time ); if( Period() <= PERIOD_M15 && showM15 ) displayPeriod( PERIOD_M15,Time ); if( Period() <= PERIOD_M20 && showM20 ) displayPeriod( PERIOD_M20,Time ); if( Period() <= PERIOD_M30 && showM30 ) displayPeriod( PERIOD_M30,Time ); if( Period() <= PERIOD_H1 && showH01 ) displayPeriod( PERIOD_H1,Time ); if( Period() <= PERIOD_H2 && showH02 ) displayPeriod( PERIOD_H2,Time ); if( Period() <= PERIOD_H3 && showH03 ) displayPeriod( PERIOD_H3,Time ); if( Period() <= PERIOD_H4 && showH04 ) displayPeriod( PERIOD_H4,Time ); if( Period() <= PERIOD_H6 && showH06 ) displayPeriod( PERIOD_H6,Time ); if( Period() <= PERIOD_H8 && showH08 ) displayPeriod( PERIOD_H8,Time ); if( Period() <= PERIOD_H12 && showH12 ) displayPeriod( PERIOD_H12,Time ); if( Period() <= PERIOD_D1 && showD01 ) displayPeriod( PERIOD_D1,Time ); if( Period() <= PERIOD_W1 && showW01 ) displayPeriod( PERIOD_W1,Time ); if( Period() <= PERIOD_MN1 && showMN1 ) displayPeriod( PERIOD_MN1,Time ); //---- return(rates_total); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double Diap(ENUM_TIMEFRAMES mtPeriod,bool up,int C,int index) { //---- int i; double MM=0.0; if(up) { MM=get_max(mtPeriod,index); for(i=1; iMM) MM=get_max(mtPeriod,index-i); } if(!up) { MM=get_min(mtPeriod,index); for(i=1; i0 && numBars>maxBarsForPeriod) numBars=maxBarsForPeriod; int TLBBuffShift=0; int limit=numBars; double iClose[]; //---- Copy the new data to the arrays if(CopyClose(Symbol(),mtPeriod_,0,limit+1,iClose)<=0) return(false); //---- Indexing elements in arrays as in timeseries ArraySetAsSeries(iClose,true); int i,j; j=1; while(iClose[limit-1]==iClose[limit-1-j]) { j++; if(j>limit-1) break; } if(iClose[limit-1]>iClose[limit-1-j]) { set_max(mtPeriod_,0,iClose[limit-1]); set_min(mtPeriod_,0,iClose[limit-1-j]); } if(iClose[limit-1]=Diap(mtPeriod_,false,i,TLBBuffShift)) { j++; if(j>limit-1) break; } if(j>limit-1) break; if(iClose[limit-j]>get_max(mtPeriod_,i-1)) { set_max(mtPeriod_,i,iClose[limit-j]); set_min(mtPeriod_,i,get_max(mtPeriod_,i-1)); TLBBuffShift++; } if(iClose[limit-j]=Diap(mtPeriod_,false,LB,TLBBuffShift)) { j++; if(j>limit-1) break; } if(j>limit-1) break; if(iClose[limit-j]>get_max(mtPeriod_,i-1)) { set_max(mtPeriod_,i,iClose[limit-j]); set_min(mtPeriod_,i,get_max(mtPeriod_,i-1)); TLBBuffShift++; } if(iClose[limit-j]get_max(mtPeriod_,i-1)) { if(blueCnt>=LB) sup=get_max(mtPeriod_,i-LB); else sup=get_min(mtPeriod_,i-blueCnt-1); resc = get_max( mtPeriod_, i ); supc = 0; res=0; blueCnt++; redCnt=0; } if(get_max(mtPeriod_,i)=LB) res=get_min(mtPeriod_,i-LB); else res=get_max(mtPeriod_,i-redCnt-1); supc= get_min(mtPeriod_,i); sup = 0; resc= 0; blueCnt=0; redCnt++; } } if(sup>0.0) ShowHLineObject(getPeriodAsString(mtPeriod_)+" Sup",clrBlue,STYLE_SOLID,sup,500,time); else DeleteHLineObject(getPeriodAsString(mtPeriod_)+" Sup"); if(res>0.0) ShowHLineObject(getPeriodAsString(mtPeriod_)+" Res",clrRed,STYLE_SOLID,res,500,time); else DeleteHLineObject(getPeriodAsString(mtPeriod_)+" Res"); if(supc>0.0) ShowHLineObject(getPeriodAsString(mtPeriod_)+" Sup C",clrBlue,STYLE_DASHDOTDOT,supc,1200,time); else DeleteHLineObject(getPeriodAsString(mtPeriod_)+" Sup C"); if(resc>0.0) ShowHLineObject(getPeriodAsString(mtPeriod_)+" Res C",clrRed,STYLE_DASHDOTDOT,resc,1200,time); else DeleteHLineObject(getPeriodAsString(mtPeriod_)+" Res C"); //---- return(true); } //+------------------------------------------------------------------+