Author: Inkov Evgeni ew123@mail.ru
Price Data Components
Series array that contains the lowest prices of each barSeries array that contains the highest prices of each bar
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
RS_DWM_v01
//+------------------------------------------------------------------+
//|                                                   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