//+------------------------------------------------------------------+
//| RS_DWM_v01.mq4 |
//+------------------------------------------------------------------+
#property copyright "Inkov Evgeni ew123@mail.ru"
#property link "+7-918-600-11-33"
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 3
//+------------------------------------------------------------------+
extern int Day_Hist = 3;
extern int Week_Hist = 3;
extern int Month_Hist = 3;
extern color color_Day = Magenta;
extern color color_Week = Green;
extern color color_Month = Blue;
//+------------------------------------------------------------------+
double ExtBufferD0[]; // öåíà ëèíèè äíÿ
double ExtBufferD1[]; // âðåìÿ íà÷àëà ëèíèè äíÿ
double ExtBufferW0[]; // öåíà ëèíèè íåäåëè
double ExtBufferW1[]; // âðåìÿ íà÷àëà ëèíèè íåäåëè
double ExtBufferM0[]; // öåíà ëèíèè ìåñÿöà
double ExtBufferM1[]; // âðåìÿ íà÷àëà ëèíèè ìåñÿöà
//+------------------------------------------------------------------+
int init()
{
IndicatorBuffers(6);
SetIndexBuffer(0,ExtBufferD0);
SetIndexBuffer(1,ExtBufferW0);
SetIndexBuffer(2,ExtBufferM0);
SetIndexBuffer(3,ExtBufferD1);
SetIndexBuffer(4,ExtBufferW1);
SetIndexBuffer(5,ExtBufferM1);
SetIndexStyle(0,DRAW_NONE);
SetIndexStyle(1,DRAW_NONE);
SetIndexStyle(2,DRAW_NONE);
SetIndexStyle(3,DRAW_NONE);
SetIndexStyle(4,DRAW_NONE);
SetIndexStyle(5,DRAW_NONE);
ArrayResize(ExtBufferD0,Day_Hist*2+1);
ArrayResize(ExtBufferD1,Day_Hist*2+1);
ArrayResize(ExtBufferW0,Week_Hist*2+1);
ArrayResize(ExtBufferW1,Week_Hist*2+1);
ArrayResize(ExtBufferM0,Month_Hist*2+1);
ArrayResize(ExtBufferM1,Month_Hist*2+1);
ArrayInitialize(ExtBufferD0,0);
ArrayInitialize(ExtBufferD1,0);
ArrayInitialize(ExtBufferW0,0);
ArrayInitialize(ExtBufferW1,0);
ArrayInitialize(ExtBufferM0,0);
ArrayInitialize(ExtBufferM1,0);
IndicatorDigits(Digits);
return(0);
}
//+------------------------------------------------------------------+
int deinit()
{
for (int i=0;i<Bars;i++)
{
if (ObjectFind("D"+i)>=0)ObjectDelete("D"+i);
if (ObjectFind("W"+i)>=0)ObjectDelete("W"+i);
if (ObjectFind("M"+i)>=0)ObjectDelete("M"+i);
}
return(0);
}
//+------------------------------------------------------------------+
int start()
{ // íàéòè ëèíèè
find_High_Low(Day_Hist, PERIOD_D1, ExtBufferD0,ExtBufferD1);
find_High_Low(Week_Hist, PERIOD_W1, ExtBufferW0,ExtBufferW1);
find_High_Low(Month_Hist,PERIOD_MN1,ExtBufferM0,ExtBufferM1);
// âûâåñòè ëèíèè
int delta=NormalizeDouble((WindowBarsPerChart()-WindowFirstVisibleBar())/4.0,0);
out_line("D",PERIOD_D1, Day_Hist, color_Day, delta*60, ExtBufferD0, ExtBufferD1);
out_line("W",PERIOD_W1, Week_Hist, color_Week, delta*120,ExtBufferW0, ExtBufferW1);
out_line("M",PERIOD_MN1,Month_Hist, color_Month, delta*180,ExtBufferM0, ExtBufferM1);
return(0);
}
//+------------------------------------------------------------------+
void find_High_Low(int max, int per, double& mas_ext0[],double& mas_ext1[])
{
int n0,n1,k1,k2;
for (int i=0;i<=max;i++)
{
if (Period()==per)
{
k1=i;
k2=i;
}
else
{
n0=0;
if (i>0)n0=iBarShift(Symbol(), Period(),iTime(Symbol(),per,i-1));
n1=iBarShift(Symbol(), Period(),iTime(Symbol(),per,i));
k1=iHighest(Symbol(), Period(), MODE_HIGH, n1-n0, n0);
k2=iLowest (Symbol(), Period(), MODE_LOW, n1-n0, n0);
}
mas_ext0[2*i]=iHigh(Symbol(),Period(),k1);
mas_ext1[2*i]=iTime(Symbol(),Period(),k1);
mas_ext0[2*i+1]=iLow (Symbol(),Period(),k2);
mas_ext1[2*i+1]=iTime(Symbol(),Period(),k2);
}
}
//----------------------------------
void out_line(string name,int per, int max, color col, int d, double& ExtBuffer0[], double& ExtBuffer1[])
{
for (int i=2*max+1;i>=0;i--)
if (Period()<=per)
out_TL(name+i, ExtBuffer0[i], ExtBuffer0[i], ExtBuffer1[i], iTime(Symbol(),Period(),0)+Period()*d, col, 1, i);
else
if (ObjectFind(name+i)>=0)ObjectDelete(name+i);
}
//---------------------------------
void out_TL(string name, double pr1, double pr2, datetime t1, datetime t2, color col, int width, int nom_Style)
{
int style=STYLE_DASH;
if (nom_Style<2)style=STYLE_SOLID;
if (ObjectFind(name)<0)ObjectCreate(name, OBJ_TREND, 0, t1, pr1, t2, pr2);
ObjectSet(name,OBJPROP_COLOR, col);
ObjectSet(name,OBJPROP_RAY, false);
ObjectSet(name,OBJPROP_WIDTH, width);
ObjectSet(name,OBJPROP_STYLE, style);
ObjectSet(name,OBJPROP_TIME1, t1);
ObjectSet(name,OBJPROP_TIME2, t2);
ObjectSet(name,OBJPROP_PRICE1,pr1);
ObjectSet(name,OBJPROP_PRICE2,pr2);
}
//--------------------------------------
Comments