//+------------------------------------------------------------------+
//| DynamicRS_3CLines.mq4 |
//| Copyright © 2007, Nick A. Zhilin |
//| mtf: ForexTSD.com 2007 rebus58@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, Nick A. Zhilin"
#property link "rebus58@mail.ru"
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Gold
#property indicator_color2 DodgerBlue
#property indicator_color3 Crimson
#property indicator_width1 2
//---- buffers
extern int TimeFrame = 0;
extern int DRS_Line_Shift=1;
extern string ____ = "_____";
extern string note_TimeFrames = "M1;5,15,30,60H1;240H4;1440D1;10080W1;43200MN";
extern string IndicatorCorrectName = "DynamicRS_3CLinesM_mtf";
double DRS_Line[];
double TopLine[];
double BottomnLine[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
IndicatorShortName("DynamicRS_3CLines");
//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,DRS_Line);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,TopLine);
SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2,BottomnLine);
if(TimeFrame==0) TimeFrame = Period();
SetIndexShift(0,DRS_Line_Shift*TimeFrame/Period());
SetIndexLabel(0,"DRS_Line");
SetIndexLabel(1,"DRS_TopLine");
SetIndexLabel(2,"DRS_BottomLine");
if (TimeFrame < Period()) TimeFrame = Period();
//----
return(0);
}
//+------------------------------------------------------------------+
//| DynamicRS |
//+------------------------------------------------------------------+
int start()
{
int limit1,i1;
int counted_bars1 = IndicatorCounted();
if(counted_bars1 < 0) return(-1);
limit1 = Bars-counted_bars1;
if (TimeFrame != Period())
{
limit1 = MathMax(limit1,TimeFrame/Period());
datetime TimeArray[];
ArrayCopySeries(TimeArray ,MODE_TIME ,NULL,TimeFrame);
for(i1=0,int y=0; i1<limit1; i1++)
{
if(Time[i1]<TimeArray[y]) y++;
DRS_Line[i1] = iCustom(NULL,TimeFrame,IndicatorCorrectName,0,y);
TopLine[i1] = iCustom(NULL,TimeFrame,IndicatorCorrectName,1,y);
BottomnLine[i1] = iCustom(NULL,TimeFrame,IndicatorCorrectName,2,y);
// DRS_Line[i1] = iCustom(NULL,TimeFrame,IndicatorCorrectName,DRS_Line_Shift,0,y);
// TopLine[i1] = iCustom(NULL,TimeFrame,IndicatorCorrectName,DRS_Line_Shift,1,y);
// BottomnLine[i1] = iCustom(NULL,TimeFrame,IndicatorCorrectName,DRS_Line_Shift,2,y);
}
return(0);
}
int i,counted_bars=IndicatorCounted();
i=Bars-counted_bars-1;
while(i>=0)
{
if(High[i]<High[i+1] && High[i]<DRS_Line[i+1])
{
DRS_Line[i]=High[i];
BottomnLine[i]=High[i];
TopLine[i]=TopLine[i+1];
}
else if(Low[i]>Low[i+1] && Low[i]>DRS_Line[i+1])
{
DRS_Line[i]=Low[i];
TopLine[i]=Low[i];
BottomnLine[i]=BottomnLine[i+1];
}
else
{
DRS_Line[i]=DRS_Line[i+1];
if(DRS_Line[i+1]==TopLine[i+1])
{
TopLine[i]=DRS_Line[i+1];
BottomnLine[i]=BottomnLine[i+1];
}
else if(DRS_Line[i+1]==BottomnLine[i+1])
{
BottomnLine[i]=DRS_Line[i+1];
TopLine[i]=TopLine[i+1];
}
}
i--;
}
//----
return(0);
}
//+------------------------------------------------------------------+
Comments