Dear all,
This article from CFA UK is about the development of scoring models. I think the most important line in the article is :
Surprisingly, Mohanram’s G-Score and Piotroski’s F-Score were the only ones surviving an out-of-sample backtesting delivering statistically significant alpha despite the other rejected models being developed at a later date.
Portfolio123 already has F-Score built in.
Here are the 8 formulas for the G-Score (namely G1-G8) that you can setup under formulas.
G1 = Eval(ROA%(0,ANN) > Aggregate(“ROA%(0,ANN)”, #Sector , #Avg),1,0)
G2 = Eval(OperCashFl(0,ANN)/AstTot(0,ANN) > Aggregate(“OperCashFl(0,ANN)/AstTot(0,ANN)”, #Sector , #Avg),1,0)
G3 = Eval(OperCashFl(0,ANN) > NetIncCFStmt(0,ANN),1,0)
G4 = Eval(LoopStdDev(“ROA%(ctr, ANN)”,5) < StdDev(Aggregate(“ROA%(0,ANN)”, #Sector, #Avg),Aggregate(“ROA%(4,ANN)”, #Sector, #Avg), Aggregate(“ROA%(3,ANN)”, #Sector, #Avg), Aggregate(“ROA%(2,ANN)”, #Sector, #Avg), Aggregate(“ROA%(1,ANN)”, #Sector, #Avg)),1,0)
G5 = Eval(LoopAvg(“Sales(ctr,ANN)/Sales(ctr + 1,ANN) - 1”, 5) < StdDev(Aggregate(“Sales(0,ANN)/Sales(1,ANN)-1”, #Sector, #Avg),Aggregate(“ROA%(4,ANN)/Sales(5,ANN)-1”, #Sector, #Avg), Aggregate(“ROA%(3,ANN)/Sales(4,ANN)-1”, #Sector, #Avg), Aggregate(“ROA%(2,ANN)/Sales(3,ANN)-1”, #Sector, #Avg), Aggregate(“ROA%(1,ANN)/Sales(2,ANN)-1”, #Sector, #Avg)),1,0)
G6 = Eval( RandD(0, ANN)/AstTot(0, ANN) > Aggregate(“RandD(0, ANN)/AstTot(0, ANN)”, #Sector, #Avg), 1,0)
G7 = Eval(CapEx(0, ANN)/AstTot(0,ANN) > Aggregate(“CapEx(0, ANN)/AstTot(0,ANN)”, #Sector,#Avg),1,0)
G8 = Eval(SGandA(0, ANN)/AstTot(0,ANN) > Aggregate(“SGandA(0, ANN)/AstTot(0,ANN)”, #Sector,#Avg),1,0)
From my experience, the best way to apply F-Score and G-Score is to use the Frank function.
e.g.
Frank(“$g1+$g2+$g3+$g4+$g5+$g6+$g7+$g8”,#industry,#asc)>25
Frank(“PiotFScore”,#industry,#desc)>25
I am currently using Mohanram G-Score and Piotroski F-Score in all my stock based strategies. I hope other P123 members also find them useful in selecting stocks.
Regards
James