Author: Raff
SI-2
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
SI-2
//+------------------------------------------------------------------+
//|                                                           SI.mq4 |
//|                                                             Raff |
//|                                                   raff1410@o2.pl |
//+------------------------------------------------------------------+
#property copyright "Raff"
#property link      "just_raff1410@yahoo.com"
//----
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- input parameters
extern double    T          =1;
extern int       CountBars  =10000;
//---- buffers
double ASI[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers(1);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ASI);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    i, counted_bars=IndicatorCounted();
//----
   double pHigh, pLow, pOpen, pClose;
   double pHigh_1, pLow_1, pOpen_1, pClose_1;
   double K, R, R_1, R_2, R_3, R_4, X, SI ;
//----
   if (CountBars>Bars) CountBars=Bars-10;
   i=CountBars-10;
   ASI[i+1]=0;
   while(i>=0)
     {
      pHigh   =High[i];
      pLow    =Low[i];
      pOpen   =Open[i];
      pClose  =Close[i];
      //
      pHigh_1 =High[i+1];
      pLow_1  =Low[i+1];
      pOpen_1 =Open[i+1];
      pClose_1=Close[i+1];
      //
      R_1     =MathAbs(pHigh-pClose_1);
      R_2     =MathAbs(pLow-pClose_1);
      R_3     =MathAbs(pHigh-pLow);
      R_4     =MathAbs(pClose_1-pOpen_1);
      K       =MathMax(R_1,R_2);
//----      
      if (R_1>=MathMax(R_2,R_3))
        {
         R   =R_1 - R_2/2 + R_4/4;
        }
      else
         if (R_2>=MathMax(R_1,R_3))
           {
            R   =R_2 - R_1/2 + R_4/4;
           }
         else
           {
            R   =R_3 + R_4/4;
           }
      if (R==0) SI=0;
      else
        {
         X   =(pClose_1-pClose)+(pClose_1-pOpen_1)/2+(pClose-pOpen)/4;
         SI  =50 * (X/R) * (K/T);
        }
      ASI[i]=ASI[i+1]-SI;
      i--;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+

Comments