Please can anyone convert this POWERFUL weekly/daily/4H SR levels
Please can anyone convert this POWERFUL weekly/daily/4H SR levels
28 Aug 2014, 17:19
//---- #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; if(up) { MM = get_max( mt4Period, shift ); for(i = 1; i < C; i++) if(get_max( mt4Period, shift-i ) > MM) MM = get_max( mt4Period, shift-i ); } if(!up) { MM = get_min( mt4Period, shift ); for(i = 1; i < C; i++) if(get_min( mt4Period, shift-i ) < MM) MM = get_min( mt4Period, shift-i ); } return(MM); } void EmulateDoubleBuffer( double buffer[], int numBars ) { //---- INDICATOR BUFFERS EMULATION if(ArraySize(buffer) < numBars) { ArraySetAsSeries(buffer, false); //---- ArrayResize(buffer, numBars); //---- ArraySetAsSeries(buffer, true); } } //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ void DeleteHLineObject(string name) { ObjectDelete(name); ObjectDelete(name + "_Label"); } //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ void ShowHLineObject(string name, color clr, int style, double dValue, int shift ) { if(ObjectFind(name)!= 0) { CreateHLineObject(name,clr, style, dValue, shift); } //if(ShowLineLabels) { ObjectSet(name + "_Label",OBJPROP_PRICE1,dValue); ObjectSet(name + "_Label",OBJPROP_TIME1,Time[0] + Period() * shift); ObjectSet(name + "_Label",OBJPROP_STYLE, style); } ObjectSet(name, OBJPROP_PRICE1, dValue); } //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ void CreateHLineObject(string name, color clr, int style, double dValue, int shift ) { //if(ShowLineLabels) { ObjectCreate (name + "_Label", OBJ_TEXT, 0,Time[0] + Period() * shift, dValue); ObjectSetText (name + "_Label", name, 7, "Verdana", clr); } ObjectCreate (name, OBJ_HLINE, 0, Time[0], dValue); ObjectSet (name, OBJPROP_STYLE, style ); ObjectSet (name, OBJPROP_COLOR, clr); ObjectSet (name, OBJPROP_WIDTH, 1); } string getPeriodAsString( int mt4Period ) { string periodname = 0; switch( mt4Period ) { case PERIOD_M1: { periodname = "M1"; break; } case PERIOD_M5: { periodname = "M5"; break; } case PERIOD_M15: { periodname = "M15"; break; } case PERIOD_M30: { periodname = "M30"; break; } case PERIOD_H1: { periodname = "H1"; break; } case PERIOD_H4: { periodname = "H4"; break; } case PERIOD_D1: { periodname = "D1"; break; } case PERIOD_W1: { periodname = "W1"; break; } case PERIOD_MN1: { periodname = "MN1"; break; } } return (periodname); } static datetime prevBarTime_M01 = NULL; static datetime prevBarTime_M05 = NULL; static datetime prevBarTime_M15 = NULL; static datetime prevBarTime_M30 = NULL; static datetime prevBarTime_H01 = NULL; static datetime prevBarTime_H04 = NULL; static datetime prevBarTime_D01 = NULL; static datetime prevBarTime_W01 = NULL; static datetime prevBarTime_MN1 = NULL; void set_prevBarTime( int mt4Period, datetime value ) { switch( mt4Period ) { case PERIOD_M1: { prevBarTime_M01 = value; break; } case PERIOD_M5: { prevBarTime_M05 = value; break; } case PERIOD_M15: { prevBarTime_M15 = value; break; } case PERIOD_M30: { prevBarTime_M30 = value; break; } case PERIOD_H1: { prevBarTime_H01 = value; break; } case PERIOD_H4: { prevBarTime_H04 = value; break; } case PERIOD_D1: { prevBarTime_D01 = value; break; } case PERIOD_W1: { prevBarTime_W01 = value; break; } case PERIOD_MN1: { prevBarTime_MN1 = value; break; } } } datetime get_prevBarTime( int mt4Period ) { switch( mt4Period ) { case PERIOD_M1: { return (prevBarTime_M01); break; } case PERIOD_M5: { return (prevBarTime_M05); break; } case PERIOD_M15: { return (prevBarTime_M15); break; } case PERIOD_M30: { return (prevBarTime_M30); break; } case PERIOD_H1: { return (prevBarTime_H01); break; } case PERIOD_H4: { return (prevBarTime_H04); break; } case PERIOD_D1: { return (prevBarTime_D01); break; } case PERIOD_W1: { return (prevBarTime_W01); break; } case PERIOD_MN1: { return (prevBarTime_MN1); break; } } } static datetime prevBarCount_M01 = NULL; static datetime prevBarCount_M05 = NULL; static datetime prevBarCount_M15 = NULL; static datetime prevBarCount_M30 = NULL; static datetime prevBarCount_H01 = NULL; static datetime prevBarCount_H04 = NULL; static datetime prevBarCount_D01 = NULL; static datetime prevBarCount_W01 = NULL; static datetime prevBarCount_MN1 = NULL; void set_prevBarCount( int mt4Period, int value ) { switch( mt4Period ) { case PERIOD_M1: { prevBarCount_M01 = value; break; } case PERIOD_M5: { prevBarCount_M05 = value; break; } case PERIOD_M15: { prevBarCount_M15 = value; break; } case PERIOD_M30: { prevBarCount_M30 = value; break; } case PERIOD_H1: { prevBarCount_H01 = value; break; } case PERIOD_H4: { prevBarCount_H04 = value; break; } case PERIOD_D1: { prevBarCount_D01 = value; break; } case PERIOD_W1: { prevBarCount_W01 = value; break; } case PERIOD_MN1: { prevBarCount_MN1 = value; break; } } } int get_prevBarCount( int mt4Period ) { switch( mt4Period ) { case PERIOD_M1: { return (prevBarCount_M01); break; } case PERIOD_M5: { return (prevBarCount_M05); break; } case PERIOD_M15: { return (prevBarCount_M15); break; } case PERIOD_M30: { return (prevBarCount_M30); break; } case PERIOD_H1: { return (prevBarCount_H01); break; } case PERIOD_H4: { return (prevBarCount_H04); break; } case PERIOD_D1: { return (prevBarCount_D01); break; } case PERIOD_W1: { return (prevBarCount_W01); break; } case PERIOD_MN1: { return (prevBarCount_MN1); break; } } } double TLBMax_M01[]; double TLBMax_M05[]; double TLBMax_M15[]; double TLBMax_M30[]; double TLBMax_H01[]; double TLBMax_H04[]; double TLBMax_D01[]; double TLBMax_W01[]; double TLBMax_MN1[]; double TLBMin_M01[]; double TLBMin_M05[]; double TLBMin_M15[]; double TLBMin_M30[]; double TLBMin_H01[]; double TLBMin_H04[]; double TLBMin_D01[]; double TLBMin_W01[]; double TLBMin_MN1[]; void set_max( int mt4Period, int shift, double value ) { switch( mt4Period ) { case PERIOD_M1: { TLBMax_M01[ shift ] = value; break; } case PERIOD_M5: { TLBMax_M05[ shift ] = value; break; } case PERIOD_M15: { TLBMax_M15[ shift ] = value; break; } case PERIOD_M30: { TLBMax_M30[ shift ] = value; break; } case PERIOD_H1: { TLBMax_H01[ shift ] = value; break; } case PERIOD_H4: { TLBMax_H04[ shift ] = value; break; } case PERIOD_D1: { TLBMax_D01[ shift ] = value; break; } case PERIOD_W1: { TLBMax_W01[ shift ] = value; break; } case PERIOD_MN1: { TLBMax_MN1[ shift ] = value; break; } } } double get_max( int mt4Period, int shift ) { switch( mt4Period ) { case PERIOD_M1: { return(TLBMax_M01[ shift ]); break; } case PERIOD_M5: { return(TLBMax_M05[ shift ]); break; } case PERIOD_M15: { return(TLBMax_M15[ shift ]); break; } case PERIOD_M30: { return(TLBMax_M30[ shift ]); break; } case PERIOD_H1: { return(TLBMax_H01[ shift ]); break; } case PERIOD_H4: { return(TLBMax_H04[ shift ]); break; } case PERIOD_D1: { return(TLBMax_D01[ shift ]); break; } case PERIOD_W1: { return(TLBMax_W01[ shift ]); break; } case PERIOD_MN1: { return(TLBMax_MN1[ shift ]); break; } } } void set_min( int mt4Period, int shift, double value ) { switch( mt4Period ) { case PERIOD_M1: { TLBMin_M01[ shift ] = value; break; } case PERIOD_M5: { TLBMin_M05[ shift ] = value; break; } case PERIOD_M15: { TLBMin_M15[ shift ] = value; break; } case PERIOD_M30: { TLBMin_M30[ shift ] = value; break; } case PERIOD_H1: { TLBMin_H01[ shift ] = value; break; } case PERIOD_H4: { TLBMin_H04[ shift ] = value; break; } case PERIOD_D1: { TLBMin_D01[ shift ] = value; break; } case PERIOD_W1: { TLBMin_W01[ shift ] = value; break; } case PERIOD_MN1: { TLBMin_MN1[ shift ] = value; break; } } } double get_min( int mt4Period, int shift ) { switch( mt4Period ) { case PERIOD_M1: { return(TLBMin_M01[ shift ]); break; } case PERIOD_M5: { return(TLBMin_M05[ shift ]); break; } case PERIOD_M15: { return(TLBMin_M15[ shift ]); break; } case PERIOD_M30: { return(TLBMin_M30[ shift ]); break; } case PERIOD_H1: { return(TLBMin_H01[ shift ]); break; } case PERIOD_H4: { return(TLBMin_H04[ shift ]); break; } case PERIOD_D1: { return(TLBMin_D01[ shift ]); break; } case PERIOD_W1: { return(TLBMin_W01[ shift ]); break; } case PERIOD_MN1: { return(TLBMin_MN1[ shift ]); break; } } } void emulate_tlbmaxmin( int mt4Period, int numBars ) { switch( mt4Period ) { case PERIOD_M1: { EmulateDoubleBuffer(TLBMax_M01, numBars ); EmulateDoubleBuffer(TLBMin_M01, numBars ); break; } case PERIOD_M5: { EmulateDoubleBuffer(TLBMax_M05, numBars ); EmulateDoubleBuffer(TLBMin_M05, numBars ); break; } case PERIOD_M15: { EmulateDoubleBuffer(TLBMax_M15, numBars ); EmulateDoubleBuffer(TLBMin_M15, numBars ); break; } case PERIOD_M30: { EmulateDoubleBuffer(TLBMax_M30, numBars ); EmulateDoubleBuffer(TLBMin_M30, numBars ); break; } case PERIOD_H1: { EmulateDoubleBuffer(TLBMax_H01, numBars ); EmulateDoubleBuffer(TLBMin_H01, numBars ); break; } case PERIOD_H4: { EmulateDoubleBuffer(TLBMax_H04, numBars ); EmulateDoubleBuffer(TLBMin_H04, numBars ); break; } case PERIOD_D1: { EmulateDoubleBuffer(TLBMax_D01, numBars ); EmulateDoubleBuffer(TLBMin_D01, numBars ); break; } case PERIOD_W1: { EmulateDoubleBuffer(TLBMax_W01, numBars ); EmulateDoubleBuffer(TLBMin_W01, numBars ); break; } case PERIOD_MN1: { EmulateDoubleBuffer(TLBMax_MN1, numBars ); EmulateDoubleBuffer(TLBMin_MN1, numBars ); break; } } } void displayPeriod( int mt4Period ) { if( get_prevBarTime( mt4Period ) == NULL || get_prevBarTime( mt4Period ) != iTime( Symbol(), mt4Period, 0 ) || get_prevBarCount( mt4Period ) == NULL || get_prevBarCount( mt4Period ) != iBars( Symbol(), mt4Period ) ) { set_prevBarTime( mt4Period, iTime( Symbol(), mt4Period, 0 )); set_prevBarCount( mt4Period, iBars( Symbol(), mt4Period )); } else return; int numBars = iBars( Symbol(), mt4Period ); if( maxBarsForPeriod > 0 && 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) < iClose( Symbol(), mt4Period, limit-1-j)) { set_max( mt4Period, 0, iClose( Symbol(), mt4Period, limit-1-j)); set_min( mt4Period, 0, iClose( Symbol(), mt4Period, limit-1)); } for(i = 1; i < LB; i++) { while(iClose( Symbol(), mt4Period, limit-j) <= Diap(mt4Period, true, i, TLBBuffShift) && iClose( Symbol(), mt4Period, limit-j) >= 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) < get_min( mt4Period, i-1 )) { set_min( mt4Period, i, iClose( Symbol(), mt4Period, limit-j)); set_max( mt4Period, i, get_min( mt4Period, i-1 )); TLBBuffShift++; } } for(i = LB; i < limit; i++) { while(iClose( Symbol(), mt4Period, limit-j) <= Diap(mt4Period, true, LB, TLBBuffShift) && 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_min( mt4Period, i-1 )) { set_min( mt4Period, i, iClose( Symbol(), mt4Period, limit-j)); set_max( mt4Period, i, get_min( mt4Period, i-1 )); TLBBuffShift++; } } double sup = 0, res = 0, supc = 0, resc = 0; int redCnt=0, blueCnt=0; int numObj = 0; for(i = 1; i <= TLBBuffShift; i++) { if(get_max( mt4Period, i ) > 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 ) < get_max( mt4Period, i-1 )) { if( redCnt >= 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(iod( 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); } //+------------------------------------------------------------------+ 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 ) displayPer
Replies
dannie
28 Aug 2014, 22:45
//+------------------------------------------------------------------+
//| SR_TLB.mq4 |
//|Support and Resistance MTF Trend Line Breaks |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, metatrader"
#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;
if(up)
{
MM = get_max( mt4Period, shift );
for(i = 1; i < C; i++)
if(get_max( mt4Period, shift-i ) > MM)
MM = get_max( mt4Period, shift-i );
}
if(!up)
{
MM = get_min( mt4Period, shift );
for(i = 1; i < C; i++)
if(get_min( mt4Period, shift-i ) < MM)
MM = get_min( mt4Period, shift-i );
}
return(MM);
}
void EmulateDoubleBuffer( double buffer[], int numBars )
{
//---- INDICATOR BUFFERS EMULATION
if(ArraySize(buffer) < numBars)
{
ArraySetAsSeries(buffer, false);
//----
ArrayResize(buffer, numBars);
//----
ArraySetAsSeries(buffer, true);
}
}
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void DeleteHLineObject(string name)
{
ObjectDelete(name);
ObjectDelete(name + "_Label");
}
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void ShowHLineObject(string name, color clr, int style, double dValue, int shift )
{
if(ObjectFind(name)!= 0)
{
CreateHLineObject(name,clr, style, dValue, shift);
}
//if(ShowLineLabels)
{
ObjectSet(name + "_Label",OBJPROP_PRICE1,dValue);
ObjectSet(name + "_Label",OBJPROP_TIME1,Time[0] + Period() * shift);
ObjectSet(name + "_Label",OBJPROP_STYLE, style);
}
ObjectSet(name, OBJPROP_PRICE1, dValue);
}
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void CreateHLineObject(string name, color clr, int style, double dValue, int shift )
{
//if(ShowLineLabels)
{
ObjectCreate (name + "_Label", OBJ_TEXT, 0,Time[0] + Period() * shift, dValue);
ObjectSetText (name + "_Label", name, 7, "Verdana", clr);
}
ObjectCreate (name, OBJ_HLINE, 0, Time[0], dValue);
ObjectSet (name, OBJPROP_STYLE, style );
ObjectSet (name, OBJPROP_COLOR, clr);
ObjectSet (name, OBJPROP_WIDTH, 1);
}
string getPeriodAsString( int mt4Period )
{
string periodname = 0;
switch( mt4Period )
{
case PERIOD_M1: { periodname = "M1"; break; }
case PERIOD_M5: { periodname = "M5"; break; }
case PERIOD_M15: { periodname = "M15"; break; }
case PERIOD_M30: { periodname = "M30"; break; }
case PERIOD_H1: { periodname = "H1"; break; }
case PERIOD_H4: { periodname = "H4"; break; }
case PERIOD_D1: { periodname = "D1"; break; }
case PERIOD_W1: { periodname = "W1"; break; }
case PERIOD_MN1: { periodname = "MN1"; break; }
}
return (periodname);
}
static datetime prevBarTime_M01 = NULL;
static datetime prevBarTime_M05 = NULL;
static datetime prevBarTime_M15 = NULL;
static datetime prevBarTime_M30 = NULL;
static datetime prevBarTime_H01 = NULL;
static datetime prevBarTime_H04 = NULL;
static datetime prevBarTime_D01 = NULL;
static datetime prevBarTime_W01 = NULL;
static datetime prevBarTime_MN1 = NULL;
void set_prevBarTime( int mt4Period, datetime value )
{
switch( mt4Period )
{
case PERIOD_M1: { prevBarTime_M01 = value; break; }
case PERIOD_M5: { prevBarTime_M05 = value; break; }
case PERIOD_M15: { prevBarTime_M15 = value; break; }
case PERIOD_M30: { prevBarTime_M30 = value; break; }
case PERIOD_H1: { prevBarTime_H01 = value; break; }
case PERIOD_H4: { prevBarTime_H04 = value; break; }
case PERIOD_D1: { prevBarTime_D01 = value; break; }
case PERIOD_W1: { prevBarTime_W01 = value; break; }
case PERIOD_MN1: { prevBarTime_MN1 = value; break; }
}
}
datetime get_prevBarTime( int mt4Period )
{
switch( mt4Period )
{
case PERIOD_M1: { return (prevBarTime_M01); break; }
case PERIOD_M5: { return (prevBarTime_M05); break; }
case PERIOD_M15: { return (prevBarTime_M15); break; }
case PERIOD_M30: { return (prevBarTime_M30); break; }
case PERIOD_H1: { return (prevBarTime_H01); break; }
case PERIOD_H4: { return (prevBarTime_H04); break; }
case PERIOD_D1: { return (prevBarTime_D01); break; }
case PERIOD_W1: { return (prevBarTime_W01); break; }
case PERIOD_MN1: { return (prevBarTime_MN1); break; }
}
}
static datetime prevBarCount_M01 = NULL;
static datetime prevBarCount_M05 = NULL;
static datetime prevBarCount_M15 = NULL;
static datetime prevBarCount_M30 = NULL;
static datetime prevBarCount_H01 = NULL;
static datetime prevBarCount_H04 = NULL;
static datetime prevBarCount_D01 = NULL;
static datetime prevBarCount_W01 = NULL;
static datetime prevBarCount_MN1 = NULL;
void set_prevBarCount( int mt4Period, int value )
{
switch( mt4Period )
{
case PERIOD_M1: { prevBarCount_M01 = value; break; }
case PERIOD_M5: { prevBarCount_M05 = value; break; }
case PERIOD_M15: { prevBarCount_M15 = value; break; }
case PERIOD_M30: { prevBarCount_M30 = value; break; }
case PERIOD_H1: { prevBarCount_H01 = value; break; }
case PERIOD_H4: { prevBarCount_H04 = value; break; }
case PERIOD_D1: { prevBarCount_D01 = value; break; }
case PERIOD_W1: { prevBarCount_W01 = value; break; }
case PERIOD_MN1: { prevBarCount_MN1 = value; break; }
}
}
int get_prevBarCount( int mt4Period )
{
switch( mt4Period )
{
case PERIOD_M1: { return (prevBarCount_M01); break; }
case PERIOD_M5: { return (prevBarCount_M05); break; }
case PERIOD_M15: { return (prevBarCount_M15); break; }
case PERIOD_M30: { return (prevBarCount_M30); break; }
case PERIOD_H1: { return (prevBarCount_H01); break; }
case PERIOD_H4: { return (prevBarCount_H04); break; }
case PERIOD_D1: { return (prevBarCount_D01); break; }
case PERIOD_W1: { return (prevBarCount_W01); break; }
case PERIOD_MN1: { return (prevBarCount_MN1); break; }
}
}
double TLBMax_M01[];
double TLBMax_M05[];
double TLBMax_M15[];
double TLBMax_M30[];
double TLBMax_H01[];
double TLBMax_H04[];
double TLBMax_D01[];
double TLBMax_W01[];
double TLBMax_MN1[];
double TLBMin_M01[];
double TLBMin_M05[];
double TLBMin_M15[];
double TLBMin_M30[];
double TLBMin_H01[];
double TLBMin_H04[];
double TLBMin_D01[];
double TLBMin_W01[];
double TLBMin_MN1[];
void set_max( int mt4Period, int shift, double value )
{
switch( mt4Period )
{
case PERIOD_M1: { TLBMax_M01[ shift ] = value; break; }
case PERIOD_M5: { TLBMax_M05[ shift ] = value; break; }
case PERIOD_M15: { TLBMax_M15[ shift ] = value; break; }
case PERIOD_M30: { TLBMax_M30[ shift ] = value; break; }
case PERIOD_H1: { TLBMax_H01[ shift ] = value; break; }
case PERIOD_H4: { TLBMax_H04[ shift ] = value; break; }
case PERIOD_D1: { TLBMax_D01[ shift ] = value; break; }
case PERIOD_W1: { TLBMax_W01[ shift ] = value; break; }
case PERIOD_MN1: { TLBMax_MN1[ shift ] = value; break; }
}
}
double get_max( int mt4Period, int shift )
{
switch( mt4Period )
{
case PERIOD_M1: { return(TLBMax_M01[ shift ]); break; }
case PERIOD_M5: { return(TLBMax_M05[ shift ]); break; }
case PERIOD_M15: { return(TLBMax_M15[ shift ]); break; }
case PERIOD_M30: { return(TLBMax_M30[ shift ]); break; }
case PERIOD_H1: { return(TLBMax_H01[ shift ]); break; }
case PERIOD_H4: { return(TLBMax_H04[ shift ]); break; }
case PERIOD_D1: { return(TLBMax_D01[ shift ]); break; }
case PERIOD_W1: { return(TLBMax_W01[ shift ]); break; }
case PERIOD_MN1: { return(TLBMax_MN1[ shift ]); break; }
}
}
void set_min( int mt4Period, int shift, double value )
{
switch( mt4Period )
{
case PERIOD_M1: { TLBMin_M01[ shift ] = value; break; }
case PERIOD_M5: { TLBMin_M05[ shift ] = value; break; }
case PERIOD_M15: { TLBMin_M15[ shift ] = value; break; }
case PERIOD_M30: { TLBMin_M30[ shift ] = value; break; }
case PERIOD_H1: { TLBMin_H01[ shift ] = value; break; }
case PERIOD_H4: { TLBMin_H04[ shift ] = value; break; }
case PERIOD_D1: { TLBMin_D01[ shift ] = value; break; }
case PERIOD_W1: { TLBMin_W01[ shift ] = value; break; }
case PERIOD_MN1: { TLBMin_MN1[ shift ] = value; break; }
}
}
double get_min( int mt4Period, int shift )
{
switch( mt4Period )
{
case PERIOD_M1: { return(TLBMin_M01[ shift ]); break; }
case PERIOD_M5: { return(TLBMin_M05[ shift ]); break; }
case PERIOD_M15: { return(TLBMin_M15[ shift ]); break; }
case PERIOD_M30: { return(TLBMin_M30[ shift ]); break; }
case PERIOD_H1: { return(TLBMin_H01[ shift ]); break; }
case PERIOD_H4: { return(TLBMin_H04[ shift ]); break; }
case PERIOD_D1: { return(TLBMin_D01[ shift ]); break; }
case PERIOD_W1: { return(TLBMin_W01[ shift ]); break; }
case PERIOD_MN1: { return(TLBMin_MN1[ shift ]); break; }
}
}
void emulate_tlbmaxmin( int mt4Period, int numBars )
{
switch( mt4Period )
{
case PERIOD_M1: { EmulateDoubleBuffer(TLBMax_M01, numBars ); EmulateDoubleBuffer(TLBMin_M01, numBars ); break; }
case PERIOD_M5: { EmulateDoubleBuffer(TLBMax_M05, numBars ); EmulateDoubleBuffer(TLBMin_M05, numBars ); break; }
case PERIOD_M15: { EmulateDoubleBuffer(TLBMax_M15, numBars ); EmulateDoubleBuffer(TLBMin_M15, numBars ); break; }
case PERIOD_M30: { EmulateDoubleBuffer(TLBMax_M30, numBars ); EmulateDoubleBuffer(TLBMin_M30, numBars ); break; }
case PERIOD_H1: { EmulateDoubleBuffer(TLBMax_H01, numBars ); EmulateDoubleBuffer(TLBMin_H01, numBars ); break; }
case PERIOD_H4: { EmulateDoubleBuffer(TLBMax_H04, numBars ); EmulateDoubleBuffer(TLBMin_H04, numBars ); break; }
case PERIOD_D1: { EmulateDoubleBuffer(TLBMax_D01, numBars ); EmulateDoubleBuffer(TLBMin_D01, numBars ); break; }
case PERIOD_W1: { EmulateDoubleBuffer(TLBMax_W01, numBars ); EmulateDoubleBuffer(TLBMin_W01, numBars ); break; }
case PERIOD_MN1: { EmulateDoubleBuffer(TLBMax_MN1, numBars ); EmulateDoubleBuffer(TLBMin_MN1, numBars ); break; }
}
}
void displayPeriod( int mt4Period )
{
if( get_prevBarTime( mt4Period ) == NULL || get_prevBarTime( mt4Period ) != iTime( Symbol(), mt4Period, 0 ) ||
get_prevBarCount( mt4Period ) == NULL || get_prevBarCount( mt4Period ) != iBars( Symbol(), mt4Period ) )
{
set_prevBarTime( mt4Period, iTime( Symbol(), mt4Period, 0 ));
set_prevBarCount( mt4Period, iBars( Symbol(), mt4Period ));
}
else return;
int numBars = iBars( Symbol(), mt4Period );
if( maxBarsForPeriod > 0 && 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) < iClose( Symbol(), mt4Period, limit-1-j))
{
set_max( mt4Period, 0, iClose( Symbol(), mt4Period, limit-1-j));
set_min( mt4Period, 0, iClose( Symbol(), mt4Period, limit-1));
}
for(i = 1; i < LB; i++)
{
while(iClose( Symbol(), mt4Period, limit-j) <= Diap(mt4Period, true, i, TLBBuffShift) && iClose( Symbol(), mt4Period, limit-j) >= 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) < get_min( mt4Period, i-1 ))
{
set_min( mt4Period, i, iClose( Symbol(), mt4Period, limit-j));
set_max( mt4Period, i, get_min( mt4Period, i-1 ));
TLBBuffShift++;
}
}
for(i = LB; i < limit; i++)
{
while(iClose( Symbol(), mt4Period, limit-j) <= Diap(mt4Period, true, LB, TLBBuffShift) && 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_min( mt4Period, i-1 ))
{
set_min( mt4Period, i, iClose( Symbol(), mt4Period, limit-j));
set_max( mt4Period, i, get_min( mt4Period, i-1 ));
TLBBuffShift++;
}
}
double sup = 0, res = 0, supc = 0, resc = 0;
int redCnt=0, blueCnt=0;
int numObj = 0;
for(i = 1; i <= TLBBuffShift; i++)
{
if(get_max( mt4Period, i ) > 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 ) < get_max( mt4Period, i-1 ))
{
if( redCnt >= 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);
}
//+------------------------------------------------------------------+
@dannie
Spotware
15 Sep 2014, 10:26
We can recommend you to contact one of our Partners or post a job in Development Jobs section.
@Spotware
algotrader
28 Aug 2014, 18:15
Code is not complete
@algotrader