!corelation





//+---------------------------------------------------------------------------------+
//|                                                   corelation.mq4                |
//|                                Copyright © 2008, Borys Chekmasov                |
//|                                     http://uatrader.blogspot.com                |
//+---------------------------------------------------------------------------------+
/*
Description:

The indicator is intended for searching the correlations between different symbols. It allows you to overlay 
one chart with another to visually detect how different symbols correlate with each other. It also allows 
you to superimpose moving averages.
Inputs:

    * simbol_name - the ticker of the symbol whose chart will be layed on the current one;
    * bars_for_autoscale - the amount of bars the charts will be scaled on (0 - maximal amount);
    * inverse - inverses the chart upside down;
    * MA - show or not to the moving average for the overlaid chart (true - show; false - do not show);
    * MAPeriod - the period of the moving average;
    * MAOnly - shows only the moving average (hides chart).

The scaling occurs in the way the maximums and minimums at the region of N-bars (bars_for_autoscale variable) coincide with each other.

The indicator can be used for hedging and spread trade strategies on correlating pairs.
*/

#property copyright "Copyright © 2008, Borys Chekmasov"
#property link      "http://uatrader.blogspot.com"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Gold
#property indicator_color2 DodgerBlue
//âõîäíûå ïàðàìåòðû
extern string simbol_name = "EURUSD";
extern int bars_for_autoscale = 200;
extern bool inverse = false;
extern bool MA = false;
extern int MAPeriod =14;
extern bool MAOnly = false;

double simbolBuffer[];
double MABuffer[];

// èíèöèàëèçàöèÿ
int init()
  {
   SetIndexBuffer(0,simbolBuffer);       
   SetIndexStyle (0,DRAW_LINE);
      SetIndexBuffer(1,MABuffer);       
   SetIndexStyle (1,DRAW_LINE);
   return (0);
  }
     
//îñíîâíîé öèêë                              

int start()
  {
double simbol_scale = 1;
double simbol_offset = 0;
 int i,k;
int cb=IndicatorCounted();
i = Bars-cb-1;
k = bars_for_autoscale;
if (bars_for_autoscale==0) k=Bars;
double max_scale=iClose(simbol_name,0,1);
double min_scale=iClose(simbol_name,0,1);
double max_scale2=Close[1];
double min_scale2=Close[1];
while(k>=0) 
      {
      
      if (max_scale<iClose(simbol_name,0,k)) max_scale=iClose(simbol_name,0,k);
      if (min_scale>iClose(simbol_name,0,k)) min_scale=iClose(simbol_name,0,k);
      if (max_scale2<Close[k])max_scale2=Close[k];
      if (min_scale2>Close[k])min_scale2=Close[k];
    
    
      k--;
      }

simbol_scale = (max_scale2 - min_scale2)/(max_scale-min_scale);
      if(!inverse) {
 simbol_offset = max_scale2 - simbol_scale*max_scale;
 }
 else
 {
 simbol_offset = max_scale2 + simbol_scale*min_scale;
 }

while(i>=0) 
      {
      
        if(!inverse) 
        {
         if (!MAOnly) simbolBuffer[i]=simbol_scale*(iClose(simbol_name,0,i))+simbol_offset;
         if (MA)MABuffer[i]=(iMA(simbol_name,0,MAPeriod,0,0,PRICE_CLOSE,i))*simbol_scale+simbol_offset;
         }
        else 
        {
        if (!MAOnly) simbolBuffer[i]=simbol_offset - simbol_scale*(iClose(simbol_name,0,i));
        if (MA)MABuffer[i]=simbol_offset - simbol_scale*(iMA(simbol_name,0,MAPeriod,0,0,PRICE_CLOSE,i));
        }
          i--;
      }

   
   return(0);
  }





Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar


Indicator Curves created:



Indicators Used:

Moving average indicator


Custom Indicators Used:

Order Management characteristics:

Other Features: