FIR_MA_001





//+------------------------------------------------------------------+
//|                                                       FIR_MA.mq4 |
//|                           v.1  09/04/2006                        |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
#property indicator_width1 2
//Global constants
#define pi 3.141592653589793238462643383279502884197169399375105820974944592
//Input parameters
extern int  Periods = 4;   // 1/(2*Periods) sets the filter bandwidth
extern int  Taps    = 21;  // must be an odd number
extern int  Window  = 4;   // selects windowing function
//Indicator buffers
double FIRMA[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   ArrayInitialize(FIRMA, EMPTY_VALUE);
   IndicatorBuffers(1);
   SetIndexBuffer(0, FIRMA);
   SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 2);
   IndicatorShortName("FIRMA");
   SetIndexShift(0, -(Taps - 1) / 2);
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
    return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   double w[];
   ArrayResize(w, Taps);
   double wsum = 0.0;
   for(int k = 0; k < Taps; k++)
     {
       switch(Window)
         {
           // Rectangular window
           case 1: w[k] = 1.0; break; 
           // Hanning window
           case 2: w[k] = 0.50 - 0.50*MathCos(2.0*pi*k / Taps); break;
           // Hamming window
           case 3: w[k] = 0.54 - 0.46*MathCos(2.0*pi*k / Taps); break;
           //Blackman window
           case 4: w[k] = 0.42 - 0.50*MathCos(2.0*pi*k / Taps) + 
                          0.08*MathCos(4.0*pi*k / Taps); break;
           //Blackman-Harris window 
           case 5: w[k] = 0.35875 - 0.48829*MathCos(2.0*pi*k / Taps) + 
                          0.14128*MathCos(4.0*pi*k / Taps) - 
                          0.01168*MathCos(6.0*pi*k / Taps); break;
           //Rectangular window 
           default: w[k] = 1;break;
         }
       if(k != Taps / 2.0) 
           w[k] = w[k]*MathSin(pi*(k - Taps / 2.0) / Periods) / pi / (k - Taps / 2.0);
       wsum+=w[k];
     }
   int i = Bars - 1 - IndicatorCounted();
   while(i >= 0)
     {
       if(i <= Bars - Taps)
         {
           FIRMA[i] = 0.0;
           for(k = 0; k < Taps; k++) 
               FIRMA[i] += Close[i+k]*w[k] / wsum;
         }
       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:



Custom Indicators Used:

Order Management characteristics:

Other Features: