While my own research focus has generally shifted towards the technology of combining multi-indicator/multi-variable models, ultimately I depend on various single indicator inputs for this approach. Therefore, having indicators that capture something that is slightly different or can reduce the complexity of a model by condensing a concept into one number is still highly desirable. A good post by Quantum Financier highlights the importance of these issues: http://quantumfinancier.wordpress.com/2010/10/22/considerations-in-systemindicator-design/ .

In this case, I was looking for a support and resistance indicator that captured the typical or middle price over a short to intermediate time frame.  I also wanted something that could be normalized so that I could avoid having the inflexibility of binary rules, or specific levels for entry and exits.  This was something very simple that I came up with that performed well on the S&P500 (SPY), achieving nearly a 10% cagr which is impressive for a short-term indicator.

MSR= (10-day median of (H, L, C) – 20-day  MAX (H, L, C))/(20-day  MAX (H, L, C))

then take the 252-day percentrank of MSR or percentile ranking

October 27, 2010 10:58 am

Some clarification needed on the formula….

Median H,L,C – take the median of each and divide by 3?

MAX H,L,C – take the highest value of H, L and C; or the highest value of H, the Lowest value of L, and the ? of C? ; and divide by 3?

And for the numerator – use absolute value or allow negatives?

Thanks,
Carl

• October 28, 2010 1:07 am

Hi Carl,
My understanding is that Median(H,L,C) is the median taken from the 3 arrays combined, i.e. as if the three arrays were concatenated.
I am working on a Amibroker translation, which I will post as soon as I am done.
-QD-

• October 29, 2010 12:02 am

Carl, it’s going to take some more time. I have build a first version, but it is very slow because of looping in looping. I am now looking to program a .dll to calculate the median of multiple arrays() in AB.
-QD-

October 29, 2010 12:23 am

hi there, that is correct, the H,L,and C are all considered as one sample for purposes of deriving the median. Carl the number is always negative and thus needs to be normalized. thank you very much Quanting for sharing–I will link over the weekend.
best
dv

October 29, 2010 11:48 am

hi QD,
you do not need loops in loops as you are not sorting, simply calculating percentrank.
i remember Ramon Cummins had posted a percentrankHLC sometime, and I believe this is the code he posted ( i am taking the liberty of posting it again, but his is the credit ). As with anything else, test before using !
See if this meets your needs.

function PercentRankHLC( Data1,Data2,Data3,Periods )
{
Count = 0;
for ( i = 0; i Ref( Data1, -i ), 1, 0 );
Count = Count + IIf ( Ref( Data3, 0 ) > Ref( Data2, -i ), 1, 0);
Count = Count + IIf ( Ref( Data3, 0 ) > Ref( Data3, -i ), 1, 0
);
}
return 100 * Count / (Periods*3-1);
}

• October 31, 2010 1:09 pm

Hi BGPL, this code calculates the percentrank of data3 in the combined data1, data2 and data3 arrays. The problem is that it does not calculate the Median of the 3 arrays combined. That is, testing if data3==50 won’t give the true median (as it does not test data1, data2 elements’. I hope this comes across.
I am currently considering to built a dll for this problem.
QD

• November 4, 2010 5:14 pm

Hi, it took a while to complete the Amibroker translation as I did end up writing a .dll for the Median function across 2 or 3 arrays.
The translation is available at my Blog.
QD

October 29, 2010 11:50 am

this got messed up in the formatting…