You need first to define a function showing distance from 52 week high
 
FromHigh = hhv(C,252) - c;
 
Then you need to redefine this
 
mOwnROC = ROC(C, 14);

to mHi = FromHigh;

Then you need to substiture properly into the code.
If you do not understand the code or how to use it, then trying to modifiy
it will probably not work.
 
Ken

  _____  

From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf
Of Louis Préfontaine
Sent: Friday, July 11, 2008 12:08 PM
To: [email protected]
Subject: Re: [amibroker] What a Great Ranking Tool


Hi,

Let's say I want to sort them by how close they are to their 52 weeks high.
How would you do that?   I am not sure to understand the code.

Thanks,

Louis


2008/7/6 Ken Close <[EMAIL PROTECTED]>:




Louis:
 
The short answer is Yes.
 
How to do it depends on what you consider Best?
 
Assume Rank is the variable holding the rank value.
 
Then Buy = Rank <= 500 AND some other buying condition.
 
Ken

  _____  


From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf
Of Louis Préfontaine

Sent: Saturday, July 05, 2008 10:17 PM 

To: [email protected]
Subject: Re: [amibroker] What a Great Ranking Tool


Hi Ken,

But is it possible to do this scanning 8000 tickers to find the best 500 and
automatically includ them in the backtester?  I understand that it is
possible to manually select the best one thanks to the ranking, but is it
possible to do all this automatically to make the backtest as reliable as
possible?

Thanks,

Louis


2008/7/5 Ken Close <[EMAIL PROTECTED]>:




Louis:
 
The code needs additional statements added to it before it can be made into
a backtestable system.  The numbers represent ordinal rankings, and you
intuitively think that low ranking values mean "better" symbols.  Well,
depending on what indicators you have chosen, the low value ranks may or may
not be the best ones to buy.  Thus, you really need to think of a set of
conditions which should be in Buy situations and which should be in Sell
situations.  Another way to backtest such a system is to set up a Rotational
Trading model and use the Rank as the PositionScore.  Even in this, you have
to alter the ranking (or reverse it) before it can be a good PositionScore
variable.  There are so many ways to possibily use this kind of ranking to
make a trading system, that more specifics are hard to give.  I know this is
not what you wanted or expected to hear but that is what the situation is.
 
HTH,
 
Ken
 

  _____  

From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf
Of Louis Préfontaine
Sent: Saturday, July 05, 2008 8:17 PM
To: [email protected]
Subject: Re: [amibroker] What a Great Ranking Tool


Hi everyone,

This seem interesting.  Is there a way to add this to a backtest so the
backtest would consider let's say the 500 best results?

I'll try to be more clear: if I can spot a condition for having a symbol in
my watchlist but I want a maximum of 500 tickers in my watchlist, can I do
this by using some ranking that would go automatically in the backtest?

Thanks,

Louis


2008/7/5 Ken Close <[EMAIL PROTECTED]>:




Paul Ho has come up with a supurb ranking tool.  I have expanded it to two
indicators.  Feel free to expand the code structure to any number of
indicators.
 
Possible next step: stick the Tot_Rank values into the OI field for the
symbols, then Plot the Ranks for a visual representation of "where the
symbol is over time".
 
The possibilities are endless (or at least enlarged because of Paul's code
idea).  Thanks Paul for your creative input.
 
Ken
 
//  Ranking_Alt01.afl    KSC    07/05/2008

//  Original code by Paul Ho, Amibroker list 07/05/2008

//  Modifications and expansions by Ken Close 07/05/2008

 

//  Will ordinal rank every symbol in watchlist for every bar.

 

 

mOwnROC = ROC(C, 14);

mOwnRSI = RSIa(C, 14);

mRoc = 0;

mRSI = 0;

list = CategoryGetSymbols(categoryWatchlist, 16);

ROCcount[0] = rocrank[0] = 0;

RSIcount[0] = RSIrank[0] = 0;

for(i = 0; (sym = StrExtract(list, i)) != ""; i++)

  {

   SetForeign(sym);

   mRoc = ROC(C, 14);

   mRSI = RSIa(C, 14);

   RestorePriceArrays(); 

   n = !IsNull(mRoc);

   m = !IsNull(mRSI);

   roccount += n;

   rsicount += m;

   rocrank = IIf(Nz(mRoc) > mOwnROC, Rocrank + n, rocrank);

   rsirank = IIf(Nz(mRsi) > mOwnRSI, Rsirank + m, rsirank);

   Totrank = rocrank + rsirank;

  }

ROCn = ROC(C, 14);

RSIn = RSIa(C, 14);

Filter = 1;

Buy = Sell = 0;

AddColumn(ROCn, "ROCn",1.2);

AddColumn(RSIn, "RSIn",1.2);

AddColumn(mRoc, "MROC", 1.2);

AddColumn(ROCrank, "ROCRank", 1.0);

AddColumn(RSIrank, "rsirank",1.0);

AddColumn(Totrank, "Totrank", 1.0);

 

//  To check the sorting, run on a watchlist, then click once on the date
column, 

//  Then shift click on one of the indicators, ie, RSIn, and you will see
the 

//  ordinal values in order.

 

 

 












 

Reply via email to