//+------------------------------------------------------------------+ //| Corr.mq4 | //| Nike | //| http://www.mql4.com | //+------------------------------------------------------------------+ #property copyright "Nike" #property link "http://www.mql4.com" //---- #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 Red //---- input parameters extern int CorrLen = 7; //---- buffers double ExtMapBuffer[]; double Buffer1[]; double Buffer2[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { IndicatorBuffers(3); SetIndexStyle(0, DRAW_LINE, EMPTY, 2); SetIndexBuffer(0, ExtMapBuffer); SetIndexBuffer(1, Buffer1); SetIndexBuffer(2, Buffer2); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator start function | //+------------------------------------------------------------------+ int start() { for(int i = 0; i < Bars; i++) ExtMapBuffer[i] = Close[i] - Open[i]; //---- for(i = 0; i < Bars - CorrLen; i++) ExtMapBuffer[i] = corr(ExtMapBuffer, i, CorrLen); return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double corr(double& a[], int start, int len) { double m1 = 0; double m2 = 0; double m1_2 = 0; double m2_2 = 0; double m12 = 0; //---- for(int i = 0; i < len; i++) { m1 = m1 + a[i]; m2 = m2 + a[start + i]; m1_2 = m1_2 + a[i]*a[i]; m2_2 = m2_2 + a[start + i]*a[start + i]; m12 = m12 + a[i]*a[start + i]; } m1 = m1/len; m2 = m2/len; m1_2 = m1_2/len; m2_2 = m2_2/len; m12 = m12/len; if((m1_2 - m1*m1)*(m2_2 - m2*m2) == 0) return(0); return((m12 - m1*m2) / MathSqrt(MathAbs((m1_2 - m1*m1)*(m2_2 - m2*m2)))); } //+------------------------------------------------------------------+