АмиБрокер. Индикатор Спирмена

Использование коэффициента Спирмена для определения интенсивности тренда и точек разворота.

коэффициент Спирмена

Чтобы использовать индикатор Спирмена, введите  формулу в редакторе AFL, а затем нажмите кнопку Insert Indicator.

Формула индикатора Спирмена

// Индикатор Спирмена:
// 
// r1  - time series order
// r11 - price (close)
// r21 - internal sort table
// r22 - order of prices (close)
// 
/* Number of periods */
n = Param("Periods: ", 10, 5, 200, 1 );
/* Start loop and computations based on Close */
for( k = n; k <= BarCount-1; k++ )
/* Populate internal tables for n elements */
{
	r1=0; r11 = 0; r2=0; r21=0; r22=0;
	///////////////////////////////////////////////////////////////
	for(i=n; i>=1; i--)
	{
		r1[i]  = i;
		r22[i] = i;
		r11[i] = Close[k-n+i];
		r21[i] = Close[k-n+i];
	}  // for ...
	///////////////////////////////////////////////////////////////
	/* Sort internal table r21 descending */
	changed = 1;
	while(changed > 0)
	{
		changed = 0;
		for(i=1; i<=(n-1); i++)
		{
			if(r21[i+1] < r21[i])
			{
				temp = r21[i];
				r21[i] = r21[i+1];
				r21[i+1] = temp;
				changed = 1;
			}
		}   // for ....
	}   //  while ....
	///////////////////////////////////////////////////////////////
	for(i =1; i<=n; i++)
	{	
		found = 0;
		while(found < 1)
		{
			for(j =1; j<=n; j++)
			{
				if(r21[j] == r11[i])
				{
					r22[i] = j;
					found = 1;
				}
			} // for ...
		}  // while ...
	}   // for ...
	///////////////////////////////////////////////////////////////
	/* Compute Spearman's rank correlation coeficient for n bars */
	absum=0;
	for(i = 1; i<=n; i++)
	{
		ab   = r1[i] - r22[i];
		ab2 = ab*ab;
		absum = absum+ab2;
	} // for ...
	coefcorr[k] = (1-(6*absum)/(n*(n*n-1))); 
	/* coefcorr[k]: Spearman's rank correlation coefficient for current bar k */
	sc[k]=100*coefcorr[k];   // multiplied by 100
///////////////////////////////////////////////////////////////
}  // for k.....
//
/* Plot Spearman's rank correlation coefficient multiplied by 100 */
Plot(sc, "Spearman indicator", colorBlue, styleLine);
/* Plot 3-bar simple moving average */
Plot(MA(sc,3), "SMA(3)", colorRed, styleLine);
Title = Date()+ " " + Interval(2) +"  "+  Name()  +"  Spearman("+n+") = " + sc;
Erenbur

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *