PureBytes Links
Trading Reference Links
|
...Just to make the thing a bit more efficient, you can replace
If Ties=1 then myRank=HiCount;
If Ties>1 then begin
Tot=0;
For z=1 to Ties-1 begin
Num=HiCount+1;
Tot=Tot+Num;
HiCount=Num;
End;
myRank=Tot/(Ties-1);
End;
with
myRank=HiCount+(Ties-1)/2
-Alex
-----Original Message-----
From: Michael E Songer [mailto:songer@xxxxxxxxxxxxx]
Sent: Friday, March 01, 2002 2:16 PM
To: Omega-list (E-mail)
Subject: Rank Correlation Function for Arrays
List,
Several people expressed an interest in a rank correlation function to be
used with arrays. Here is the function: msCorrel_Rank_a. I have also
included a sample indicator.
Mike
{SAMPLE INDICATOR}
{*************************************************************************}
Arrays: IndArray[50](0), DepArray[50](0);
VARS: x(0);
for x=0 to 50 begin
IndArray[x]=c[x] of data2;
DepArray[x]=c[x] of data1;
End;
value1=msCorrel_Rank_a(DepArray, IndArray);
plot1(value1,"rankCor");
plot2(0,"zero");
{**************************************************************************}
{FUNCTION}
{*************************************************************************
Fill [0] element in array being evaluated.
Limit 100 elements. Change to larger value if you like.
Michael E. Songer
songer@xxxxxxxxxxxxx
*************************************************************************}
INPUTS: DepArray[Dsize](NumericArrayRef), IndArray[Isize](NumericArrayRef);
VARS: x(0),y(0),z(0),HiCount(0),Ties(0),myRank(0),Tot(0),Num(0);
VARS:Sum(0),Diff(0),Diff2(0),N(0);
ARRAYS: DepRankArray[100](0),IndRankArray[100](0);
{Fill DepRankArray}
For x = 0 to Dsize Begin
HiCount=1;
Ties=0;
For y= 0 to Dsize begin
If DepArray[x]>DepArray[y] then HiCount=HiCount+1;
If DepArray[x]=DepArray[y] then Ties=Ties+1;
End;
If Ties=1 then myRank=HiCount;
If Ties>1 then begin
Tot=0;
For z=1 to Ties-1 begin
Num=HiCount+1;
Tot=Tot+Num;
HiCount=Num;
End;
myRank=Tot/(Ties-1);
End;
DepRankArray[x]=myRank;
End;
{Fill IndRankArray}
For x = 0 to Isize Begin
HiCount=1;
Ties=0;
For y= 0 to Isize begin
If IndArray[x]>IndArray[y] then HiCount=HiCount+1;
If IndArray[x]=IndArray[y] then Ties=Ties+1;
End;
If Ties=1 then myRank=HiCount;
If Ties>1 then begin
Tot=0;
For z=1 to Ties-1 begin
Num=HiCount+1;
Tot=Tot+Num;
HiCount=Num;
End;
myRank=Tot/(Ties-1);
End;
IndRankArray[x]=myRank;
End;
{CALCULATE RANK CORRELATION}
Sum=0;
For x=0 to Dsize begin
Diff=IndRankArray[x]-DepRankArray[x];
Diff2=square(Diff);
Sum=Sum+Diff2;
End;
N=Dsize+1;
value1= 1 - ( ( 6*Sum ) / ( N*(square(N)-1) ) );
msCorrel_Rank_a=value1;
{*******************************************************************}
|