
#property  copyright "Ralome"
#property  link      ""
//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 3

#property indicator_color1 Black     
#property indicator_width1 2     

#property indicator_maximum 1
#property indicator_minimum -1

//---- indicator parameters
extern int LookBackBars = 1000;
extern int ComparisonPeriod = 60;
extern int MA_Method = 0;
extern int MA_Period = 240;

//---- indicator buffers
double     SlopeDifference[],DataSet1[],DataSet2[];

//---- variables

double d1_avgx,d1_avgx2,d2_avgx,d2_avgx2,d1_avgy,d2_avgy,d1_sumx2,d2_sumx2,d1_sumxy,d2_sumxy,d1_slope,d2_slope;
double cp;
int i,z,StartShift;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- drawing settings
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_NONE);
   SetIndexStyle(2,DRAW_NONE);
//---- indicator buffers mapping
   SetIndexBuffer(0,SlopeDifference);
   SetIndexBuffer(1,DataSet1);
   SetIndexBuffer(2,DataSet2);

   SetLevelValue (0, 0);       // The horizontal line level is set
   SetLevelStyle(STYLE_SOLID,1,Black);

 
   d1_avgx=ComparisonPeriod*(ComparisonPeriod+1)/2/ComparisonPeriod;
   d2_avgx=d1_avgx;
   
   d1_sumx2 = 0.0;
   d2_sumx2 = 0.0;
   
   for (z=1;z<=ComparisonPeriod;z++)
      {
      d1_sumx2 = d1_sumx2 + (z - d1_avgx) * (z - d1_avgx);
      }
   
   d2_sumx2=d1_sumx2;   

//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| now do the dance.                           |
//+------------------------------------------------------------------+
int start()
  {
   int limit;
   int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   
   //handle=FileOpen("MadMoney_SlopeComparison.csv", FILE_CSV|FILE_READ|FILE_WRITE,';');
   
//---- calculate values

   for(i=limit-1; i>=0; i--)
      { 
      
      if (i<LookBackBars)
         {
         DataSet1[i]=iMA(NULL,0,MA_Period,0,MA_Method,PRICE_CLOSE,i);
         DataSet2[i]=iStochastic(NULL,0,240,1,1,MODE_SMA,STO_LOWHIGH,MODE_MAIN,i);
         }
      }
      
   for(i=limit-1; i>=0; i--)
      { 
      if (i<LookBackBars-ComparisonPeriod)
         {
         
         d1_avgy = iMAOnArray(DataSet1,0,ComparisonPeriod,0,MODE_SMA,i);
         d2_avgy = iMAOnArray(DataSet2,0,ComparisonPeriod,0,MODE_SMA,i);
         
         d1_sumxy = 0.0;
         d2_sumxy = 0.0;
     
         StartShift=i+ComparisonPeriod-1;
              
         for (z=StartShift;z>=i;z--)
            {
            d1_sumxy = d1_sumxy + ((StartShift-z+1) - d1_avgx) * (DataSet1[z] - d1_avgy);
            d2_sumxy = d2_sumxy + ((StartShift-z+1) - d2_avgx) * (DataSet2[z] - d2_avgy);
            }

         d1_slope=d1_sumxy/d1_sumx2*10000;
         d2_slope=d2_sumxy/d2_sumx2;
        
         SlopeDifference[i]=d1_slope-d2_slope;
         
         //FileWrite(handle,Time[i],Close[i],DataSet1[i],d1_slope,DataSet2[i],d2_slope);
         
         }
         
      }

      //FileClose(handle);   
   return(0);
  }
  