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
> >
>


Reply via email to