Thank you for getting back to me with some information on
how to tackle the Percentile Rank of P/S Ratio code.
I was thinking of using Yahoo! historical data but
your comments make me think their data may not be
accurate enough? Any thoughts on good data?
I will think over and try to implement your idea
about using PositionScore.
What I was working on is a for a cycle to calculate
the percentile. (Most of the code I found in back
posts of this group. )
Right now the code seems to work in an exploration.
I've pasted it below. (As I am new to coding it may
not be the prettiest.)
I'll continue to work on the code to try to make it
useful for actually testing the idea.
---
Var = C / GetFnData("SalesPerShare");
/* PERCENTILE RANK */
/* set watchlist , and indicator twice */
//Adapted From Count tickers in watchlist function - Anthony Faragasso
listNum=1; // DEFINE WATCHLIST
function CountTickersInWatchList( Listnum )
{
// retrive comma-separated list of symbols in watch list
list = GetCategorySymbols( categoryWatchlist, listnum );
for( i = 0; ( sym = StrExtract( list, i ) ) != ""; i++ )
{
if( i == 0 ) i = 0;
else i = i ;
}
return i;
}
// Adapted from Ranking Ticker List - Nenapacwanfr
list = GetCategorySymbols( categoryWatchlist, listnum );
for( i = 0; ( sym = StrExtract( list, i ) ) != ""; i++ )
{
SetForeign(sym);
VarSet("MyInd"+i, (C / GetFnData("SalesPerShare"))); //INDICATOR - DEFINE
Rank =1;
for( j = 0; ( item = StrExtract( list, j ) ) != ""; j++ )
{
SetForeign(item);
VarSet("ThisInd"+j, (C / GetFnData("SalesPerShare"))); //INDICATOR - DEFINE
Rank=Rank + IIf( VarGet("MyInd"+i) < VarGet("ThisInd"+j),1,0);
RestorePriceArrays();
}
VarSet("Rank"+i,Rank);
}
Count=0;
BreakLoop = False;
for( k = 0; NOT(BreakLoop) &&( ticker = StrExtract( list, k ) ) != ""; k++ )
{
if(Name()==ticker)
Breakloop=True;
else
Count=Count+1;
}
Rank = VarGet("Rank"+ Count);
PercentRank = (1 - rank/CountTickersInWatchList(Listnum))*100;
Filter = PercentRank > 17 AND PercentRank < 42;
AddColumn(RANK,"Rank");
AddColumn(CountTickersInWatchList(Listnum),"Total");
AddColumn(Close,"Close");
AddColumn(PercentRank,"Percentile Rank");
AddColumn(C / GetFnData("SalesPerShare"), "P/S Ratio");
---
Thanks again for your help,
Abbie
--- In [email protected], "Paolo" <pcavat...@...> wrote:
>
> First of all you need P/S data (or Sales per share and calculate the ratio)
> with enough historical range and clean data. A rare combination especially
> when talking about fundamentals.
>
> Secondly you can use Rotational backtesting with PositionScore being equal to
> the inverse of the P/S (the higher the better).
>
> Otherwise I would recommend using a for cycle calculating the percentile for
> each stock in your universe and use it to both rank your stocks for proper
> buy/sell rules and plot also the ranking as an indicator. Be careful 'cause
> for large number of stocks (>500) it tends to be very slow.
>
> I hope it helps,
>
> Paolo
>
> --- In [email protected], "sendfreetest" <sendfreetest@> wrote:
> >
> > Hi,
> >
> > I really need coding assistance.
> >
> > I am attempting to code into AmiBroker Charles Kirkpatrick's
> > trading methodology for testing.
> >
> > Kirkpatrick creates a percentile rank of stocks' price-to-sales
> > ratio and uses it as a filter. He purchases only stocks
> > with a percentile rank between the 17th and 42nd level.
> >
> > When a stocks price-to-sales percentile rank goes above 67
> > he sells.
> >
> > With AmiBroker's PERCENTILE function it seems to evaluate
> > only one market's array to determine the percentile.
> >
> > Is their an AmiBroker funtion to evaluate say 100+
> > stocks P/S Ratio and give each a percentile rank.
> >
> > Thanks in advance for any help.
> >
> > Abbie
> >
>