/*-----------------------------+ | | | Shared by www.Aptrafx.com | | | +------------------------------*/ //+------------------------------------------------------------------+ //| Correlation_Index.mq4 | //| Copyright © 2006, albedo@email.it | //| | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, albedo@email.it" #property indicator_separate_window //#property indicator_minimum -1 //#property indicator_maximum 1 #property indicator_buffers 1 #property indicator_color1 Red extern int R_Period=13; double R[]; double EurUsd[],UsdJpy[],AudUsd[],UsdCad[],UsdChf[],GbpUsd[]; //---- int ExtCountedBars=0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { int draw_begin; string short_name; //---- drawing settings SetIndexStyle(1,DRAW_LINE); IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)); if(R_Period<2) R_Period=13; draw_begin=R_Period-1; short_name="R("; IndicatorShortName(short_name+R_Period+")"); SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,R); return(0); } int start() { ArrayCopySeries(EurUsd,MODE_CLOSE,"EURUSD"); ArrayCopySeries(GbpUsd,MODE_CLOSE,"GBPUSD"); ArrayCopySeries(AudUsd,MODE_CLOSE,"AUDUSD"); ArrayCopySeries(UsdChf,MODE_CLOSE,"USDCHF"); ArrayCopySeries(UsdJpy,MODE_CLOSE,"USDJPY"); ArrayCopySeries(UsdCad,MODE_CLOSE,"USDCAD"); if(Bars<=R_Period) return(0); ExtCountedBars=IndicatorCounted(); if (ExtCountedBars<0) return(-1); if (ExtCountedBars>0) ExtCountedBars--; //---- double sumX=0; double sumY=0; double sumXY=0; double sumX2=0; double sumY2=0; int a,b,c,d,e,acc=Bars-ExtCountedBars-1; if(acc<R_Period) acc=R_Period; for(a=1;a<R_Period;a++,acc--) sumY+=UsdChf[acc]; for(b=1;b<R_Period;b++,acc--) sumX+=EurUsd[acc]; for(c=1;c<R_Period;c++,acc--) sumXY+=EurUsd[acc]*UsdChf[acc]; for(d=1;d<R_Period;d++,acc--) sumX2+=MathPow(EurUsd[acc],2); for(e=1;e<R_Period;e++,acc--) sumY2+=MathPow(UsdChf[acc],2); while(acc>=0) { sumY+=UsdChf[acc]; sumX+=EurUsd[acc]; sumXY+=EurUsd[acc]*UsdChf[acc]; sumX2+=MathPow(EurUsd[acc],2); sumY2+=MathPow(UsdChf[acc],2); double tmp = MathSqrt((sumX2-(MathPow(sumX,2)/R_Period))*(sumY2-(MathPow(sumY,2)/R_Period))); if (tmp == 0) tmp = Point; R[acc]=(sumXY-((sumX*sumY)/R_Period))/ tmp; // The R correlation factor formula is correct, so why in the hell this indicator // shows alway a null value? >-( sumY-=UsdChf[acc+R_Period-1]; sumX-=EurUsd[acc+R_Period-1]; sumXY-=EurUsd[acc+R_Period-1]*UsdChf[acc+R_Period-1]; sumX2-=MathPow(EurUsd[acc+R_Period-1],2); sumY2-=MathPow(UsdChf[acc+R_Period-1],2); acc--; } return(0); }
Sample
Analysis
Market Information Used:
Indicator Curves created:
Implements a curve of type DRAW_LINE
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Other Features: