DynamicZoneStoch





//+------------------------------------------------------------------+
//|                                           Dynamic Zone Stoch.mq4 |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|                                             Dynamic Zone RSI.mq4 |
//|                                Copyright © 2005-07, Pavel Kulko. |
//|                                                  polk@alba.dp.ua |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005-07, Pavel Kulko"
#property link      "polk@alba.dp.ua"

#property indicator_separate_window
#property indicator_buffers 5
#property indicator_color1 Lime //Stoch K% line
//#property indicator_color2 DarkGreen //Stoch D% line
#property indicator_color2 DarkGray //upper band
#property indicator_color3 DimGray //lower band
#property indicator_color4 Red // BB median line
#property indicator_color5 Blue //EMA

extern string note1 = "Stochastic";
extern int StochPeriod = 14;
extern int DPeriod = 3;
extern int Slowing = 3;
extern bool DrawStochastic = true;
extern string note2 = "Bollinger Band";
extern int BandPeriod = 18;
extern bool DrawBollingerBand = true;
extern string note3 = "Exponential Moving Average";
extern int EMAPeriod = 3;
extern bool DrawEMA = true;

double StochK[],StochD[],BBUpperBand[],BBLowerBand[], BBMedianLine[], ExpMA[];
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(5);
   if (DrawStochastic) {
      SetIndexStyle(0,DRAW_LINE);
      SetIndexBuffer(0,StochK);
   }
//   SetIndexStyle(1,DRAW_LINE);
//   SetIndexBuffer(1,StochD);
   if (DrawBollingerBand) {
      SetIndexStyle(1,DRAW_LINE);
      SetIndexBuffer(1,BBUpperBand);
      SetIndexStyle(2,DRAW_LINE);
      SetIndexBuffer(2,BBLowerBand);
      SetIndexStyle(3,DRAW_LINE);
      SetIndexBuffer(3,BBMedianLine);
   }
   if (DrawEMA) {
      SetIndexStyle(4,DRAW_LINE);
      SetIndexBuffer(4,ExpMA);
   }
   IndicatorShortName("Dynamic Zone Stoch("+StochPeriod+","+DPeriod+","+Slowing+") BB("+BandPeriod+") EMA("+EMAPeriod+") values: ");  
   return(0);
  }
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
double Variance(double& Data[], int Per)
{
  double sum, ssum;
  for (int i=0; i<Per; i++)
  {
    sum += Data[i];
    ssum += MathPow(Data[i],2);
  }
  return((ssum*Per - sum*sum)/(Per*(Per-1)));
}

double StDev(double& Data[], int Per)
{
  return(MathSqrt(Variance(Data,Per)));
}
//+------------------------------------------------------------------+
int start()
  {
   double MA, Stoch[];
   ArrayResize(Stoch,BandPeriod);
   int i, counted_bars=IndicatorCounted();
   int limit = Bars-counted_bars-1;

   for(i=limit; i>=0; i--)
   {
      StochK[i] = iStochastic(NULL,0,StochPeriod,DPeriod,Slowing,MODE_SMA,0,MODE_MAIN,i);
//      StochD[i] = iStochastic(NULL,0,StochPeriod,DPeriod,Slowing,MODE_SMA,0,MODE_SIGNAL,i);
      MA = 0;
      for(int j=i; j<i+BandPeriod; j++) {
         Stoch[j-i] = StochK[j];
         MA += StochK[j]/BandPeriod;
      }
      BBUpperBand[i] = MA + (1.3185 * StDev(Stoch,BandPeriod));
      BBLowerBand[i] = MA - (1.3185 * StDev(Stoch,BandPeriod));  
      BBMedianLine[i] = MA;
   }
   for(i=limit; i>=0; i--) {
      ExpMA[i] = iMAOnArray (StochK,0,EMAPeriod,0,MODE_EMA,i); }
   return(0);
  }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:



Indicator Curves created:

Implements a curve of type DRAW_LINE


Indicators Used:

Stochastic oscillator


Custom Indicators Used:

Order Management characteristics:

Other Features: