OneSideGaussian





//+------------------------------------------------------------------+
//|                                              OneSideGaussian.mq4 |
//|                                       Copyright © 2007, Tinytjan |
//|                                                 tinytjan@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, Tinytjan"
#property link      "tinytjan@mail.ru"

#define MaxLength 22

// Buffer for one side gaussian blurring. Works like MA but i think 
// this method will work better

// double GaussianBuffer_N 
// N -- number of old ticks used with current one
// The buffer consists of coefs for Gaussian blurring

// Note: use only N + 1 first values of the buffer
// The rest will be zero

double GaussianBuffer_1[MaxLength]; 
double GaussianBuffer_2[MaxLength];
double GaussianBuffer_3[MaxLength];
double GaussianBuffer_5[MaxLength];
double GaussianBuffer_8[MaxLength];
double GaussianBuffer_13[MaxLength];
double GaussianBuffer_21[MaxLength];

//+------------------------------------------------------------------+
//| Gaussian function                                                |
//+------------------------------------------------------------------+
// Counts function Exp((x - x0)^2/s^2)
// x0 - higher point of function
// x  - point function is counted at
// s  - width of function // don't forget about 3-sigma rule

double Gaussian(int Size, int X)
{
   return (MathExp(-X*X*9/((Size + 1)*(Size + 1))));
}

//+------------------------------------------------------------------+
//| Buffers initialization function                                  |
//+------------------------------------------------------------------+
// Note: Place this function into Ur custom initialization function 
// of Ur indicator or expert

void BuffersInit()
{
   int i = 0;
   
   // starting init with zeros
   for (i = 0; i < MaxLength - 1; i++)
   {
      GaussianBuffer_1[i] = 0.0;
      GaussianBuffer_2[i] = 0.0;
      GaussianBuffer_3[i] = 0.0;
      GaussianBuffer_5[i] = 0.0;
      GaussianBuffer_8[i] = 0.0;
      GaussianBuffer_13[i] = 0.0;
      GaussianBuffer_21[i] = 0.0;
   }

   // init with function coefs
   for (i = 0; i < 1; i++)    GaussianBuffer_1[i]  = Gaussian(1, i);
   for (i = 0; i < 2; i++)    GaussianBuffer_2[i]  = Gaussian(2, i);
   for (i = 0; i < 3; i++)    GaussianBuffer_3[i]  = Gaussian(3, i);
   for (i = 0; i < 5; i++)    GaussianBuffer_5[i]  = Gaussian(5, i);
   for (i = 0; i < 8; i++)    GaussianBuffer_8[i]  = Gaussian(8, i);
   for (i = 0; i < 13; i++)   GaussianBuffer_13[i] = Gaussian(13, i);
   for (i = 0; i < 21; i++)   GaussianBuffer_21[i] = Gaussian(21, i);
   
   double sum;
   
   //normalization
   sum = 0.0;
   for (i = 0; i < 1; i++)    sum += GaussianBuffer_1[i];
   for (i = 0; i < 1; i++)    GaussianBuffer_1[i] /= sum;

   sum = 0.0;
   for (i = 0; i < 2; i++)    sum += GaussianBuffer_2[i];
   for (i = 0; i < 2; i++)    GaussianBuffer_2[i] /= sum;

   sum = 0.0;
   for (i = 0; i < 3; i++)    sum += GaussianBuffer_3[i];
   for (i = 0; i < 3; i++)    GaussianBuffer_3[i] /= sum;

   sum = 0.0;
   for (i = 0; i < 5; i++)    sum += GaussianBuffer_5[i];
   for (i = 0; i < 5; i++)    GaussianBuffer_5[i] /= sum;

   sum = 0.0;
   for (i = 0; i < 8; i++)    sum += GaussianBuffer_8[i];
   for (i = 0; i < 8; i++)    GaussianBuffer_8[i] /= sum;

   sum = 0.0;
   for (i = 0; i < 13; i++)    sum += GaussianBuffer_13[i];
   for (i = 0; i < 13; i++)    GaussianBuffer_13[i] /= sum;

   sum = 0.0;
   for (i = 0; i < 21; i++)    sum += GaussianBuffer_21[i];
   for (i = 0; i < 21; i++)    GaussianBuffer_21[i] /= sum;
}

double CountPrice(int PriceMode, int index)
{
   switch (PriceMode)
   {
      case PRICE_CLOSE     : return (Close[index]);
      case PRICE_OPEN      : return (Open[index]);
      case PRICE_HIGH      : return (High[index]);
      case PRICE_LOW       : return (Low[index]);
      case PRICE_MEDIAN    : return ((High[index] + Low[index])/2);
      case PRICE_TYPICAL   : return ((High[index] + Low[index] + Close[index])/3);
      case PRICE_WEIGHTED  : return ((High[index] + Low[index] + Close[index] + Close[index])/4);
   }

   return ((High[index] + Low[index] + Close[index] + Open[index])/4);
}

double Smooth_1(int PriceMode, int Index)
{
   if (Bars <= Index + 1) return(0);
   
   double sum = 0;
   
   for (int i = 0; i <= 1; i++)
      sum += GaussianBuffer_1[i]*CountPrice(PriceMode, i + Index);
      
   return (sum);
}

double Smooth_2(int PriceMode, int Index)
{
   if (Bars <= Index + 2) return(0);
   
   double sum = 0;
   
   for (int i = 0; i <= 2; i++)
      sum += GaussianBuffer_2[i]*CountPrice(PriceMode, i + Index);
      
   return (sum);
}

double Smooth_3(int PriceMode, int Index)
{
   if (Bars <= Index + 3) return(0);
   
   double sum = 0;
   
   for (int i = 0; i <= 3; i++)
      sum += GaussianBuffer_3[i]*CountPrice(PriceMode, i + Index);
      
   return (sum);
}

double Smooth_5(int PriceMode, int Index)
{
   if (Bars <= Index + 5) return(0);
   
   double sum = 0;
   
   for (int i = 0; i <= 5; i++)
      sum += GaussianBuffer_5[i]*CountPrice(PriceMode, i + Index);
      
   return (sum);
}

double Smooth_8(int PriceMode, int Index)
{
   if (Bars <= Index + 8) return(0);
   
   double sum = 0;
   
   for (int i = 0; i <= 8; i++)
      sum += GaussianBuffer_8[i]*CountPrice(PriceMode, i + Index);
      
   return (sum);
}

double Smooth_13(int PriceMode, int Index)
{
   if (Bars <= Index + 13) return(0);
   
   double sum = 0;
   
   for (int i = 0; i <= 13; i++)
      sum += GaussianBuffer_13[i]*CountPrice(PriceMode, i + Index);
      
   return (sum);
}

double Smooth_21(int PriceMode, int Index)
{
   if (Bars <= Index + 21) return(0);
   
   double sum = 0;
   
   for (int i = 0; i <= 21; i++)
      sum += GaussianBuffer_21[i]*CountPrice(PriceMode, i + Index);
      
   return (sum);
}



Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar
Series array that contains open prices of each bar
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:



Custom Indicators Used:

Order Management characteristics:

Other Features: