Author: LenIFCHIK
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
DMA
//+------------------------------------------------------------------+
//|                                                          DMA.mq4 |
//|                                      Copyright © 2010, LenIFCHIK |
//|Èíäèêàòîð DMA (Displaced Moving Averages)îòîáðàæàåò â îñíîâíîì    |
//|îêíå 3 ñêîëüçÿùèõ ñðåäíèõ:                                        |
//| - 3-ïåðèîäíàÿ ïðîñòàÿ ñêîëüçÿùàÿ ñðåäíÿÿ îò öåí çàêðûòèÿ,        |
//|   ñìåùåííàÿ âïåðåä íà òðè ïåðèîäà (âõîäíîé ïàðàìåòð - SR_DSMA);  |
//| - 7-ïåðèîäíàÿ ïðîñòàÿ ñêîëüçÿùàÿ ñðåäíÿÿ îò öåí çàêðûòèÿ,        |
//|   ñìåùåííàÿ âïåðåä íà ïÿòü ïåðèîäîâ (âõîäíîé ïàðàìåòð - MR_DSMA);|
//| -	25-ïåðèîäíàÿ ïðîñòàÿ ñêîëüçÿùàÿ ñðåäíÿÿ îò öåí çàêðûòèÿ,       |
//|   ñìåùåííàÿ âïåðåä íà ïÿòü ïåðèîäîâ(âõîäíîé ïàðàìåòð - LR_DSMA). |
//+------------------------------------------------------------------+
#property copyright "LenIFCHIK"

#property indicator_chart_window                          // â îñíîâíîì îêíå                                 
#property indicator_buffers 3                             // êîëè÷åñòâî áóôåðîâ
#property  indicator_color1  Red                          // öâåò SR DSMA
#property  indicator_color2  Blue                         // öâåò MR DSMA
#property  indicator_color3  Lime                         // öâåò LR DSMA
//---- âíåøíèå ïàðàìåòðû èíäèêàòîðà
//---- äëÿ SR DSMA
extern int SR_DSMA_Period=3;                              // ïåðèîä SR DSMA
extern int SR_DSMA_Shift=3;                               // ñäâèã SR DSMA
//---- äëÿ MR DSMA
extern int MR_DSMA_Period=7;                              // ïåðèîä MR DSMA
extern int MR_DSMA_Shift=5;                               // ñäâèã MR DSMA       
//---- äëÿ LR DSMA
extern int LR_DSMA_Period=25;                             // ïåðèîä LR DSMA
extern int LR_DSMA_Shift=5;                               // ñäâèã LR DSMA
//---- ïàðàìåòðû îòîáðàæåíèÿ ëèíèé (1-on,2-off)
extern string Display_mode="0 - on, 1 - off";
extern int SR_DSMA_disp=1;                                // ðåæèì îòîáðàæåíèÿ SR DSMA 
extern int MR_DSMA_disp=1;                                // ðåæèì îòîáðàæåíèÿ MR DSMA 
extern int LR_DSMA_disp=1;                                // ðåæèì îòîáðàæåíèÿ LR DSMA 
//---- áóôåðû èíäèêàòîðà
double     SR_DSMA_Buffer[];                              // áóôåð SR DSMA
double     MR_DSMA_Buffer[];                              // áóôåð MR DSMA
double     LR_DSMA_Buffer[];                              // áóôåð LR DSMA
//----
int ExtCountedBars=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- ðåæèì îòîáðàæåíèÿ
//---- ðåæèì îòîáðàæåíèÿ SR DSMA   
   switch(SR_DSMA_disp)                                   
     {
      case 0 :   
        SetIndexStyle(0,DRAW_NONE);break;                 // ÍÅ ÎÒÎÁÐÀÆÀÅÒÑß
      case 1 :   
        SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1);break;   // ÎÒÎÁÐÀÆÀÅÒÑß
      default :
        SR_DSMA_disp=1;                                   // ïî óìîë÷àíèþ ÎÒÎÁÐÀÆÀÅÒÑß
     }   
//---- ðåæèì îòîáðàæåíèÿ MR DSMA 
   switch(MR_DSMA_disp)                                   
     {
      case 0 :   
        SetIndexStyle(1,DRAW_NONE);break;                 // ÍÅ ÎÒÎÁÐÀÆÀÅÒÑß
      case 1 :   
        SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1);break;   // ÎÒÎÁÐÀÆÀÅÒÑß
      default :
        MR_DSMA_disp=1;                                   // ïî óìîë÷àíèþ ÎÒÎÁÐÀÆÀÅÒÑß
     }   
//---- ðåæèì îòîáðàæåíèÿ LR DSMA 
   switch(LR_DSMA_disp)                                   
     {
      case 0 :   
        SetIndexStyle(2,DRAW_NONE);break;                 // ÍÅ ÎÒÎÁÐÀÆÀÅÒÑß
      case 1 :   
        SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,1);break;   // ÎÒÎÁÐÀÆÀÅÒÑß
      default :
        LR_DSMA_disp=1;                                   // ïî óìîë÷àíèþ ÎÒÎÁÐÀÆÀÅÒÑß
     }   
//---- ïàðàìåòðû ñìåùåíèÿ
   SetIndexShift(0,SR_DSMA_Shift);                        // ñìåùåíèÿ ëèíèè SR DSMA îòíîñèòåëüíî íà÷àëà ãðàôèêà
   SetIndexShift(1,MR_DSMA_Shift);                        // ñìåùåíèÿ ëèíèè MR DSMA îòíîñèòåëüíî íà÷àëà ãðàôèêà
   SetIndexShift(2,LR_DSMA_Shift);                        // ñìåùåíèÿ ëèíèè LR DSMA îòíîñèòåëüíî íà÷àëà ãðàôèêà
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));     // óñòàíîâêà ôîðìàòà òî÷íîñòè äëÿ âèçóàëèçàöèè çíà÷åíèé èíäèêàòîðà
//---- èìåíà ëèíèé, äëÿ îòîáðàæåíèÿ èíôîðìàöèè â îêíå DataWindow è âñïëûâàþùåé ïîäñêàçêå 
   SetIndexLabel(0,"SR DSMA");                            
   SetIndexLabel(1,"MR DSMA");                            
   SetIndexLabel(2,"LR DSMA");                            
//---- óñòàíîâêà ïîðÿäêîâîãî íîìåðà áàðà îò íà÷àëà äàííûõ, ñ êîòîðîãî äîëæíà íà÷èíàòüñÿ îòðèñîâêà  
   SetIndexDrawBegin(0,SR_DSMA_Period-1);                 
   SetIndexDrawBegin(1,MR_DSMA_Period-1);
   SetIndexDrawBegin(2,LR_DSMA_Period-1);   
//---- ñâÿçü ïåðåìåííîé, îáúÿâëåííîé íà ãëîáàëüíîì óðîâíå, ñ ïðåäîïðåäåëåííûì áóôåðîì èíäèêàòîðà
   SetIndexBuffer(0,SR_DSMA_Buffer);
   SetIndexBuffer(1,MR_DSMA_Buffer);
   SetIndexBuffer(2,LR_DSMA_Buffer);   
//---- êîíåö èíèöèàëèçàöèè
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   if(Bars<=LR_DSMA_Period) return(0);
   ExtCountedBars=IndicatorCounted();
//---- 
   if (ExtCountedBars<0) return(-1);
//---- 
   if (ExtCountedBars>0) ExtCountedBars--;
//---- ðàñ÷¸ò êðàòêîñðî÷íîé ñìåù¸ííîé ïðîñòîé ñêîëüçÿùåé ñðåäíåé
   double sum=0;
   int    i,pos=Bars-ExtCountedBars-1;
   if(pos<SR_DSMA_Period) pos=SR_DSMA_Period;
   for(i=1;i<SR_DSMA_Period;i++,pos--)
      sum+=Close[pos];
   while(pos>=0)
     {
      sum+=Close[pos];
      SR_DSMA_Buffer[pos]=sum/SR_DSMA_Period;
	   sum-=Close[pos+SR_DSMA_Period-1];
 	   pos--;
     }
   if(ExtCountedBars<1)
      for(i=1;i<SR_DSMA_Period;i++) SR_DSMA_Buffer[Bars-i]=0;
//---- ðàñ÷¸ò ñðåäíåñðî÷íîé ñìåù¸ííîé ïðîñòîé ñêîëüçÿùåé ñðåäíåé
   double sum1=0;
   int    pos1=Bars-ExtCountedBars-1;
   if(pos1<MR_DSMA_Period) pos1=MR_DSMA_Period;
   for(i=1;i<MR_DSMA_Period;i++,pos1--)
      sum1+=Close[pos1];
   while(pos1>=0)
     {
      sum1+=Close[pos1];
      MR_DSMA_Buffer[pos1]=sum1/MR_DSMA_Period;
	   sum1-=Close[pos1+MR_DSMA_Period-1];
 	   pos1--;
     }
   if(ExtCountedBars<1)
      for(i=1;i<MR_DSMA_Period;i++) MR_DSMA_Buffer[Bars-i]=0; 
//---- ðàñ÷¸ò äîëãîñðî÷íîé ñìåù¸ííîé ïðîñòîé ñêîëüçÿùåé ñðåäíåé
   double sum2=0;
   int    pos2=Bars-ExtCountedBars-1;
   if(pos2<LR_DSMA_Period) pos2=LR_DSMA_Period;
   for(i=1;i<LR_DSMA_Period;i++,pos2--)
      sum2+=Close[pos2];
   while(pos2>=0)
     {
      sum2+=Close[pos2];
      LR_DSMA_Buffer[pos2]=sum2/LR_DSMA_Period;
	   sum2-=Close[pos2+LR_DSMA_Period-1];
 	   pos2--;
     }
   if(ExtCountedBars<1)
      for(i=1;i<LR_DSMA_Period;i++) LR_DSMA_Buffer[Bars-i]=0; 
  }

//+------------------------------------------------------------------+

Comments