Stock Portfolio Organizer
The ultimate porfolio management solution.
WiseTrader Toolbox
#1 Selling Amibroker Plugin featuring:
Runs Test Indicator for Amibroker (AFL)
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
Indicator / Formula
_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
Leave Comment
Please login here to leave a comment.
Back
Anyone used it yet?? How are the results??