Stock Portfolio Organizer

The ultimate porfolio management solution.

Shares, Margin, CFD's, Futures and Forex
EOD and Realtime
Dividends and Trust Distributions
And Much More ....
For Portfolio Manager Click Here

WiseTrader Toolbox

#1 Selling Amibroker Plugin featuring:

Advanced Adaptive Indicators
Advanced Pattern Exploration
Neural Networks
And Much More ....
Find Out More Here

Runs Test Indicator for Amibroker (AFL)

Rating:
3 / 5 (Votes 2)
Tags:
amibroker

I have compiled a randomness indicator that can show if the current candles are part of a legitimate trend or just likely set of random events. Statistically this is a variation of the RunsTest.

Large parts of the implementations are based on research on what is publicly available online and therefore all credits are due to the original authors where applicable.

The indicator still needs finetuning but can be a supporting indicator to other buy/sell signals.

Similar Indicators / Formulas

Kavach Of Karna v2
Submitted by hbkwarez over 10 years ago
Advanced Elliott Waves
Submitted by MarcosEn about 13 years ago
3_6Day GuaiLiLv
Submitted by motorfly about 13 years ago
Williams Alligator System
Submitted by durgesh1712 about 13 years ago
*Level Breakout system*
Submitted by Tinych about 13 years ago
Horizontal Live Priceline Tool
Submitted by northstar about 13 years ago

Indicator / Formula

Copy & Paste Friendly
_SECTION_BEGIN("Runs Test for Randomness");
/* Implementation of Runs Test for Randomness based on javascript implementation
   by Dr. Hossein Arsham through google search. All Credits duly acknowledged.

	Ported & re-written to AFL by sundarr
*/
function k(x)
{ return 1 / (1+0.2316419*x); }

function HASpre(x)
{ return 1 - (exp(-0.5*x^2)/sqrt(2*3.141592654))*(0.31938153*k(x)-
0.356563782*k(x)^2+1.781477937*k(x)^3-1.821255978*k(x)
^4+1.330274429*k(x)^5); }

function HAS(x)
{ return IIf(x<-6, 0, IIf(x>6, 1, IIf( x>0, HASpre(x), 1 - HASpre(-x)))) ; }

function NORMSDIST(z1)
{
	z=(z1);
	if(z>0) 
		t=z;
	else 
		t=-z;
				
	P1=(1+t*(0.049867347 + t*(0.0211410061 
		+ t*(0.0032776263 + t*(0.0000380036 
		+ t*(0.0000488906 + t*(0.000005383)))))))
		^-16;
	//This is P-value
	p=1-P1/2;
	
	//Rounding the value
	//p=round(100000*p)/100000;
	
	if(z>0)
		t=1-p;
	else
		t=1-(1-p);

	//rounding the value
	t1=round(100000*t);
	t2=t1/100000;	//Rounded P-Value

	return t2;
}

function GetRunsP(Values, E)
{
	//E= Total number of inputs to run the hypothesis on
	//values is array holding the actual input array to process

	N=0;
	N1=0;
	N2=0;
	S=0.0;
	R=1;

	retValue=1;
	RunsP=Null;

	//Calculate the mean
	Mean=MA(Values,E);
	
	//Error check
	if (E<=BarCount)	{
		for(j=E-1;j<BarCount;j++)	{
			x=Mean[j];
			for(i=j-E+1;i<=j;i++)	{
				//if more than mean
				if(Values[i]>x)	{
					N1[j]++;
					a=i;
					while (a>0)	{
						a--;
						if(Values[a]!=x)
							break;
					}//while a>0
					if(Values[a]<x)
						R[j]++;
				}//if values>x		
				// if less than mean
				else if(Values[i]<x)
				{
					N2[j]++;
					a=i;
					while (a>0)	{
						a--;
						if(Values[a]!=x)
							break;
					}//while a>0
					if(Values[a]>x)
						R[j]++;					
				} //else if values<x
			}//for i
			//Compute the expected mean and vaiance of R
			EM=1+(2*N1[j]*N2[j])/(N1[j]+N2[j]); 	//Expected Mean or Mu
			SD1=2*N1[j]*N2[j]*(2*N1[j]*N2[j]-N1[j]-N2[j]);
			SD2=(N1[j]+N2[j])^2;
			SD3=N1[j]+N2[j]-1;
			SD4=SD1/(SD2*SD3);	//Standard Deviation or Sigma
			SD=sqrt(SD4);

			z1=(R[j]-EM)/SD;
			RunsP[j]=NORMSDIST(abs(z1));
			//RunsP[j]=HAS((z1));

		}//for j
	}//if (E<=BarCount)


	return RunsP;

/*
		Conclusions
		t2<0.01 indicates very strong evidence against randomness (strong trend exists)
		t2>=0.01 AND t2<0.05 indicates moderate evidence against randomness (trend exists)
		t2>=0.05 AND t2<0.10 indicates suggestive evidence against randomness (mild trend may exist)
		t2>=0.10 indicates little or no real evidences against randomness (no trend exists)
		Any other (else) t2 value (like negative perhaps?) indicates Strong evidence against randomness (strong trend exists)
*/

}//function GetRunsP()


//Prob1=GetRunsP((O+H+L+C)/4,Param("Prob Period",14,8,200,1));
Prob1=GetRunsP(C,Param("Prob Period",14,8,200,1));

//Plot(((Prob1)),"Prob Slow",ParamColor("Prob Color",colorGrey50),ParamStyle("Prob Style",styleArea));
Plot(0.05,"1",colorRed);
Plot(0.1,"1",colorGrey50);
Plot(0.2,"2",colorGrey50);

AP= MA(Prob1,8);
Plot(AP,"MA of Prob1",colorRed,styleLine|styleArea);

//Plot(log(0.10),"",colorGrey40);
//Plot(log(0.05),"",colorGrey40);

//Prob2=GetRunsP(C,8);
//Plot(Prob2,"Prob Fast",colorRed,styleDashed|styleOwnScale);

//Plot(NORMSDIST(-0.85),"",colorBlue, styleOwnScale);
//Plot(z1,"Z1",colorRed,styleOwnScale);

_SECTION_END();

1 comments

1. NU2014

Anyone used it yet?? How are the results??

Leave Comment

Please login here to leave a comment.

Back