[MT4指标]Corr震荡线
主图指标
mt4指标类型:震荡指标
是否能用在mt4手机版上:否
是否含有未来函数:无
//+------------------------------------------------------------------+
//| 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 = Close - Open;
//----
for(i = 0; i < Bars - CorrLen; i++)
ExtMapBuffer = 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;
m2 = m2 + a[start + i];
m1_2 = m1_2 + a*a;
m2_2 = m2_2 + a[start + i]*a[start + i];
m12 = m12 + a*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))));
}
//+------------------------------------------------------------------+
Corr.jpg
