Скачать MetaTrader 5

Индикаторы: Correlation

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
MetaQuotes Software Corp.
Модератор
184343
MetaQuotes Software Corp.  

Correlation:

Индикатор считает корреляцию валютных пар.

Author: John Smith

Дима
552
Дима  

Разве корридор значений корреляции не от 0 до 1 ??????

MQL4 Comments
16319
MQL4 Comments  
mpeugep:

Разве корридор значений корреляции не от 0 до 1 ??????

Не от 0 до 1, а от -1 до +1,но не у всех пар корреляция гуляет в таком диапозоне..Да и значения у самых сильноскоррелированных пар до еденицы не доходят...0.96-0.98.

MQL4 Comments
16319
MQL4 Comments  

Спасибо за индюк, немного поправил его

else{
  z=iBarShift(OtherChart,0,iTime(Symbol(),0,i+k),false);
  y=(iOpen(OtherChart,0,z)*UseOpen+iClose(OtherChart,0,z)*UseClose+iHigh(OtherChart,0,z)*UseHigh+iLow(OtherChart,0,z)*UseLow)/(UseOpen+UseClose+UseHigh+UseLow);
  }

Что отслеживает соответствие баров не по номеру, а по времени

Ну и цветовую раскраску добавил 

//+------------------------------------------------------------------+
//|                                                  Correlation.mq4 |
//|                                               Безбородов Алексей |
//|                                                   AlexeiBv@ya.ru |
//+------------------------------------------------------------------+
#property copyright "Безбородов Алексей"
#property link      "AlexeiBv@ya.ru"
//----
#property indicator_separate_window
#property  indicator_buffers 3
#property  indicator_color1  Black
#property  indicator_color2  Green
#property  indicator_color3  Red
//----
extern string OtherChart="EURUSD";
extern int n=20;
extern bool UseOpen=true;
extern bool UseClose=false;
extern bool UseHigh=false;
extern bool UseLow=false;
extern int CalcBars=400;
//----
double     ExtBuffer0[];
double     ExtBuffer1[];
double     ExtBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   string short_name;
//---- 1 additional buffer used for counting.
   IndicatorBuffers(3);
   IndicatorDigits(Digits+1);
//---- indicator line
   SetIndexStyle(0,DRAW_NONE);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtBuffer0);
   SetIndexBuffer(1,ExtBuffer1);
   SetIndexBuffer(2,ExtBuffer2);
   //  SetIndexBuffer(1,TempBuffer);
//---- name for DataWindow and indicator subwindow label
   short_name="Correlation("+n+")";
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   // Print("True "+true+" false "+false  );
   int i,k,counted_bars=IndicatorCounted();
   double sx,sy,x,y,cor1,cor2,cor3, z;
   double prev,current;
//----
   if(Bars<=n) return(0);
//----
   int limit=Bars-counted_bars;
   if(counted_bars>0) limit++;
   for(i=0; i<CalcBars; i++)
     {
      sx=0; sy=0;
      for(k=0; k<n; k++)
        {
         if((UseOpen+UseClose+UseHigh+UseLow)==0) x=0;
         else x=(Open[i+k]*UseOpen+Close[i+k]*UseClose+High[i+k]*UseHigh+Low[i+k]*UseLow)/(UseOpen+UseClose+UseHigh+UseLow);
         if((UseOpen+UseClose+UseHigh+UseLow)==0) y=0;
         else{
         z=iBarShift(OtherChart,0,iTime(Symbol(),0,i+k),false);
         y=(iOpen(OtherChart,0,z)*UseOpen+iClose(OtherChart,0,z)*UseClose+iHigh(OtherChart,0,z)*UseHigh+iLow(OtherChart,0,z)*UseLow)/(UseOpen+UseClose+UseHigh+UseLow);
             }
         sx+=x;sy+=y;
        }
      sx/=n;sy/=n;
      cor1=0;cor2=0;cor3=0;
      for(k=0; k<n; k++)
        {
         if((UseOpen+UseClose+UseHigh+UseLow)==0) x=0;
         else x=(Open[i+k]*UseOpen+Close[i+k]*UseClose+High[i+k]*UseHigh+Low[i+k]*UseLow)/(UseOpen+UseClose+UseHigh+UseLow);
         if((UseOpen+UseClose+UseHigh+UseLow)==0) y=0;
         else{
         z=iBarShift(OtherChart,0,iTime(Symbol(),0,i+k),false);
         y=(iOpen(OtherChart,0,z)*UseOpen+iClose(OtherChart,0,z)*UseClose+iHigh(OtherChart,0,z)*UseHigh+iLow(OtherChart,0,z)*UseLow)/(UseOpen+UseClose+UseHigh+UseLow);
             }  
         cor1+=(x-sx)*(y-sy);
         cor2+=(x-sx)*(x-sx);
         cor3+=(y-sy)*(y-sy);
        }
      ExtBuffer0[i]=cor1/MathSqrt(cor2)/MathSqrt(cor3);
     }
     bool up=true;
   for(i=limit-1; i>=0; i--)
     {
      current=ExtBuffer0[i];
      prev=ExtBuffer0[i+1];
      if(current>prev) up=true;
      if(current<prev) up=false;
      if(!up)
        {
         ExtBuffer2[i]=current;
         ExtBuffer1[i]=0.0;
        }
      else
        {
         ExtBuffer1[i]=current;
         ExtBuffer2[i]=0.0;
        }
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+


Оч интересно выглядят корреляции Евро-Золото, Индексы акций-Облигации

Виктор Александрович
39
Виктор Александрович  

Зависимость с фунтфранком (при другой Евродоллар) есть немного - даже иногда с опережением, остальные основные пары - непонятно как воспользоваться зависимостями. Смотрел М30. Большие периоды неинтересны. Чисто ИМХО. Автору скажу, что такой труд даром не пропадет. Идею есть смысл развивать.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий