dex_HeLMA_v2.0





//+------------------------------------------------------------------+
//|                                                 dex_HeLMA v2.mq4 |
//|                                         Copyright © 2007, akadex |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2007, akadex"
#property link      "Shambala"

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Gray
#property indicator_color2 Gray
#property indicator_color3 Aqua
#property indicator_color4 Red

extern string a="Ñòåïåíü ôèëüòðàöèè";
extern int FiltrPeriod=6;

int fs,ai,bi,k,Points;
double zz[],ha[],la[],sa[],DIR[],UpBuffer[],DnBuffer[];
double P,R1,R5,R10,R20,RAvg,currday,di,hm,lm;

int init() 
{

   IndicatorBuffers(6);
   
   SetIndexBuffer(0,ha);
   SetIndexStyle (0,0,2,1);
   SetIndexBuffer(1,la);
   SetIndexStyle (1,0,2,1);
   SetIndexBuffer(2,UpBuffer); 
   SetIndexStyle (2,0,0,2);
   SetIndexBuffer(3,DnBuffer); 
   SetIndexStyle (3,0,0,2);
   SetIndexBuffer(4,sa);
   SetIndexBuffer(5,DIR); 

   return(0); 
}

int start() 
{
    
   int i,n;
   int counted_bars=IndicatorCounted();
   if (counted_bars<0) {Print("Indicator Error (Counted bars < 0)!" ); return(-1); }
   if (Bars<100) {Print("Indicator Error (Bars < 100)!" ); return(-1); }
   int cbi=Bars-2;
   if (counted_bars>2) {cbi=Bars-counted_bars-1; }

   for (i=cbi; i>=0; i--) 
   {
  	currday=i*Period()/PERIOD_D1;
   R1 =  (iHigh(NULL,PERIOD_D1,currday+1)-iLow(NULL,PERIOD_D1,currday+1))/Point;
   for(k=1;k<=5;k++)    R5    =  R5  +  (iHigh(NULL,PERIOD_D1,currday+k)-iLow(NULL,PERIOD_D1,currday+k))/Point;
   for(k=1;k<=10;k++)   R10   =  R10 +  (iHigh(NULL,PERIOD_D1,currday+k)-iLow(NULL,PERIOD_D1,currday+k))/Point;
   for(k=1;k<=20;k++)   R20   =  R20 +  (iHigh(NULL,PERIOD_D1,currday+k)-iLow(NULL,PERIOD_D1,currday+k))/Point;

   R5    = R5/5;
   R10   = R10/10;
   R20   = R20/20;
   Points  =  NormalizeDouble((R5+R10+R20+R1)/4,0);
   if (Points!=0) di=Points*Point;  
   
   Comment("\nØèðèíà êàíàëà òðåíäà: "+Points+" ïóíêòîâ.");

   if (i>Bars-1) {hm=High[i]; lm=hm-di; ai=i; bi=i+1; fs=0;}
   if (High[i]-Low[i]>=di) 
      { 
   if ((High[i]+Low[i])/2>=(ha[i+1]+la[i+1])/2) 
      {
       hm=High[i]; lm=hm-di; ai=i; fs=1;
       } 
       else 
       { 
       lm=Low[i]; hm=lm+di; bi=i; fs=2;
       }
      } 
       else 
      if (High[i]>hm) 
      {
      hm=High[i]; lm=hm-di; ai=i; fs=1;
      }
      else
      if (Low[i]<lm) 
      { 
      lm=Low[i]; hm=lm+di; bi=i; fs=2;
      }
      ha[i]=hm; 
      la[i]=lm;
      sa[i]=(ha[i]+la[i])/2;
      if (i==0) 
      {
      if (ai!=0 || bi!=0) 
      {
      for (n=0; n<=ai+1; n++) if (ha[n]>ha[n+1]) {ai=n; break;}
      for (n=0; n<=bi+1; n++) if (la[n]<la[n+1]) {bi=n; break;}
      }
      }
      }
    
   for (i=cbi; i>=0; i--) 
   {
   DIR[i] = DIR[i + 1];
   if (sa[i] - sa[i + 1] > 0 && (iMA(NULL,0,FiltrPeriod,0,MODE_EMA,PRICE_CLOSE,i) > iMA(NULL,0,FiltrPeriod,0,MODE_EMA,PRICE_CLOSE,i+1))) DIR[i] = 1;
   if (sa[i + 1] - sa[i] > 0 && (iMA(NULL,0,FiltrPeriod,0,MODE_EMA,PRICE_CLOSE,i) < iMA(NULL,0,FiltrPeriod,0,MODE_EMA,PRICE_CLOSE,i+1))) DIR[i] = -1;

      if (DIR[i] > 0) 
         {
         UpBuffer[i] = sa[i];
         if (DIR[i + 1] < 0) UpBuffer[i + 1] = sa[i + 1];
         DnBuffer[i] = EMPTY_VALUE;
         }
         else
         {
     if (DIR[i] < 0)
         {
         DnBuffer[i] = sa[i];
         if (DIR[i + 1] > 0) DnBuffer[i + 1] = sa[i + 1];
         UpBuffer[i] = EMPTY_VALUE;
         }
         }
   } 
   return(0); 
}






Sample





Analysis



Market Information Used:

Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar


Indicator Curves created:



Indicators Used:

Moving average indicator


Custom Indicators Used:

Order Management characteristics:

Other Features: