Author: Copyright � 2010, LeMan.
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
Ouartiles
//+------------------------------------------------------------------+
//|                                                    Ouartiles.mq4 |
//|                                         Copyright © 2010, LeMan. |
//|                                                 b-market@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, LeMan."
#property link      "b-market@mail.ru"

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 Green
//----
extern int N=20;
extern int SetPrice=0;
extern double p1 = 0.25;
extern double p3 = 0.75;
//----
double q1Buffer[];
double q2Buffer[];
double q3Buffer[];
//+------------------------------------------------------------------+
int init() 
  {
//----  
   IndicatorBuffers(3);
   IndicatorDigits(Digits);
//---- indicators
   SetIndexBuffer(0,q1Buffer);
   SetIndexBuffer(1,q2Buffer);
   SetIndexBuffer(2,q3Buffer);
//---   
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexStyle(2,DRAW_LINE);
//----
   if(N<=0) N=3;
//----
   SetIndexDrawBegin(0,N);
   SetIndexDrawBegin(1,N);
   SetIndexDrawBegin(2,N);
//----
   IndicatorShortName("Ouartiles");
   SetIndexLabel(0,"q1");
   SetIndexLabel(1,"q2");
   SetIndexLabel(2,"q3");
//----
   return(0);
  }
//+------------------------------------------------------------------+
int deinit() 
  {
//----

//----
   return(0);
  }
//+------------------------------------------------------------------+
int start() 
  {
   int i,j;
   int counted_bars = IndicatorCounted();
   if(counted_bars < 0)  return(-1);
   if(counted_bars > 0)   counted_bars--;
   int limit = Bars - counted_bars;
   if(counted_bars==0) limit-=1+N;
//----
   double PriceArray[];
   ArrayResize(PriceArray,N);

//----
   for(i = 0; i< limit; i++) 
     {
      for(j = 0; j < N; j++) 
        {
         PriceArray[j]=GetPrice(i+j);
        }
      ArraySort(PriceArray);

      if(N%2>0) 
        {
         int n2=(N+1)/2;
         double q2=PriceArray[n2-1];
           } else {
         n2 = N/2;
         q2 = (PriceArray[n2-1]+PriceArray[n2])/2;
        }

      int n1=MathRound(N*p1);
      double q1=PriceArray[n1-1];
      int n3=MathRound(N*p3);
      double q3=PriceArray[n3-1];

      q1Buffer[i] = NormalizeDouble(q1, Digits);
      q2Buffer[i] = NormalizeDouble(q2, Digits);
      q3Buffer[i] = NormalizeDouble(q3, Digits);
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
double GetPrice(int Shift) 
  {
   double price;
//----
   switch(SetPrice) 
     {
      case 0:  price = Close[Shift]; break;
      case 1:  price = Open[Shift]; break;
      case 2:  price = High[Shift]; break;
      case 3:  price = Low[Shift]; break;
      case 4:  price = (High[Shift]+Low[Shift])/2.0; break;
      case 5:  price = (High[Shift]+Low[Shift]+Close[Shift])/3.0; break;
      case 6:  price = (High[Shift]+Low[Shift]+2*Close[Shift])/4.0; break;
      case 7:  price = (Open[Shift]+High[Shift]+Low[Shift]+Close[Shift])/4.0; break;
      case 8:  price = (Open[Shift]+Close[Shift])/2.0; break;
      default: price = 0.0;
     }
//----
   return(price);
  }
//+------------------------------------------------------------------+

Comments