ma_dex_Angle_MA_v3





//+------------------------------------------------------------------+
//|                                              dex_Angle_MA_v3.mq4 |
//|                                                        GrayMan77 |
//|                                                                  |
//|  Èäåÿ - Akadex.                                                  |
//|                                                                  |
//|  Ïîñòðîåíèå íåêîåãî ïîäîáèÿ ñðåäíåé ïî ñïåöèàëüíûì óñëîâèÿì      |
//|  (íà ïðèìåðå äâèæåíèÿ ñðåäíåé ââåðõ):                            |
//|  - åñëè óãîë íàêëîíà ñðåäíåé óâåëè÷èâàåòñÿ - èíäèêàòîð èäåò      |
//|    çà ñðåäíåé;                                                   |
//|  - åñëè óãîë íàêëîíà ñðåäíåé óìåíüøàåòñÿ - èíäèêàòîð èäåò ïî     |
//|    ïðÿìîé ñ òàêèì æå íàêëîíîì, êàê áûë ðàíåå ó ñðåäíåé;          |
//|  - åñëè öåíà (Close) ïåðåñåêàåò ëèíèþ èíäèêàòîðà, èíäèêàòîð äàëåå|
//|    èäåò ïî ãðîðèçîíòàëüíîé ïðÿìîé äî òåõ ïîð, ïîêà íàêëîí ñðåäíåé|
//|     íå èçìåíèòñÿ íà ïðîòèâîïîëîæíûé (âíèç)                       |
//|                                                                  |
//|  Ïîñòðîåíèå èíäèêàòîðà ïðè äâèæåíèè ñðåäíåé âíèç: ïðîòèâîïîëîæíûå|
//|  óñëîâèÿ.                                                        |
//|                                                                  |
//|  v3 - èçìåíåí àëãîðèòì.                                          |
//|  |
//+------------------------------------------------------------------+
#property copyright "Akadex & GrayMan77"
#property link      ""

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Red
#property indicator_color2 Aqua
#property indicator_color3 Yellow
#property indicator_color4 White

//---- input parameters
extern int       MA_Period=24;
extern int       MA_Method=0;
extern int       MA_Price=0;


//---- buffers
double ExtMapBuffer1[];

double red[],blue[],yellow[],white[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers(5);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,red);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,blue);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,yellow);
   
   SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(3,white);
   
   SetIndexStyle(4,DRAW_LINE);
   SetIndexBuffer(4,ExtMapBuffer1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
  int limit,i;
  int    counted_bars=IndicatorCounted();
  double MA,MA1,MA2,MA3;
  double delta,delta1,delta2;
  double Line;
//----
  
  //---- ïðîâåðêà íà âîçìîæíûå îøèáêè
   if(counted_bars<0) return(-1);
   
   //---- ïîñëåäíèé ïîñ÷èòàííûé áàð áóäåò ïåðåñ÷èòàí
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   if(limit>Bars-MA_Period) 
     {
     limit=Bars-MA_Period-3;
     ExtMapBuffer1[Bars-MA_Period]=iMA(NULL,0,MA_Period,0,MA_Method,MA_Price,Bars-MA_Period);
     ExtMapBuffer1[Bars-MA_Period-1]=iMA(NULL,0,MA_Period,0,MA_Method,MA_Price,Bars-MA_Period-1);
     ExtMapBuffer1[Bars-MA_Period-2]=iMA(NULL,0,MA_Period,0,MA_Method,MA_Price,Bars-MA_Period-2);
     }
   
   for(i=limit;i>=0;i--)
     {
     MA=iMA(NULL,0,MA_Period,0,MA_Method,MA_Price,i);
     MA1=iMA(NULL,0,MA_Period,0,MA_Method,MA_Price,i+1);
     MA2=iMA(NULL,0,MA_Period,0,MA_Method,MA_Price,i+2);
     //MA3=iMA(NULL,0,MA_Period,0,MA_Method,MA_Price,i+3);
     
     delta=MA-MA1;
     delta1=MA1-MA2;
     //delta2=MA2-MA3;
     
     // Ýêñòðåìóì ÌÀ (ìàêñèìóì èëè ìèíèìóì) - âîçâðàøàåì èíäèêàòîð íà ÌÀ
     if((delta>0 && delta1<=0) || (delta<0 && delta1>=0))
       {
       ExtMapBuffer1[i]=MA;
       ExtMapBuffer1[i+1]=MA1;  // ÇÄÅÑÜ ÂÎÇÌÎÆÍÀ ÏÅÐÅÐÈÑÎÂÊÀ (ÍÀ 1-Ì ÁÀÐÅ) !!!!!
                white[i]=MA;
                white[i+1]=MA1;
       
       continue;
       }
     
     // Âû÷èñëèòü çíà÷åíèå êàñàòåëüíîé ê èíäèêàòîðó
     Line=2*ExtMapBuffer1[i+1]-ExtMapBuffer1[i+2];
     //Line=2*MA1-MA2;
     
     // Äâèæåíèå ÌÀ ââåðõ
     if(delta>=0)
       {
       if(MA>Line) 
       {ExtMapBuffer1[i]=MA;  // èäåì ïî ÌÀ
        white[i]=MA;
       }
        else 
         {
         // åñëè 2 áàðà íàçàä èíäèêàòîð áû íèæå ñðåäíåé
         if(ExtMapBuffer1[i+2]<MA2) 
         {ExtMapBuffer1[i]=MA;  // èäåì ïî ÌÀ
                  white[i]=MA;
         }
          else 
          {ExtMapBuffer1[i]=2.*ExtMapBuffer1[i+1]-ExtMapBuffer1[i+2];  // èäåì ïî íàêëîííîé ïðÿìîé
          if(MA1>=MA) red[i]=ExtMapBuffer1[i]; else blue[i]=ExtMapBuffer1[i];
          
          }
         }
       
       // Ïåðåñå÷åíèå ñ öåíîé
       if(Close[i+1]<ExtMapBuffer1[i+1]) 
       {ExtMapBuffer1[i]=ExtMapBuffer1[i+1];  // íà÷èíàåì ãîðèçîíòàëüíóþ ëèíèþ
       yellow[i]=ExtMapBuffer1[i];
       }
       }
     
     // Äâèæåíèå ÌÀ âíèç
     if(delta<0)
       {
       if(MA<Line) {ExtMapBuffer1[i]=MA;  // èäåì ïî ÌÀ
                  white[i]=MA;
                  }
        else
         {
         // åñëè 2 áàðà íàçàä èíäèêàòîð áû âûøå ñðåäíåé
         if(ExtMapBuffer1[i+2]>MA2) 
         {ExtMapBuffer1[i]=MA;  // èäåì ïî ÌÀ
                  white[i]=MA;
         }
          else {ExtMapBuffer1[i]=2.*ExtMapBuffer1[i+1]-ExtMapBuffer1[i+2];  // èäåì ïî íàêëîííîé ïðÿìîé
         if(MA1>=MA) red[i]=ExtMapBuffer1[i]; else blue[i]=ExtMapBuffer1[i];
         }
         }
       
       // Ïåðåñå÷åíèå ñ öåíîé
       if(Close[i+1]>ExtMapBuffer1[i+1]) 
       {ExtMapBuffer1[i]=ExtMapBuffer1[i+1];  // íà÷èíàåì ãîðèçîíòàëüíóþ ëèíèþ
       yellow[i]=ExtMapBuffer1[i];
       }
       }
     
     }
  
  
//----
  return(0);
  }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar


Indicator Curves created:

Implements a curve of type DRAW_LINE


Indicators Used:

Moving average indicator


Custom Indicators Used:

Order Management characteristics:

Other Features: