No. of Recommendations: 10
A P123 screen from their library of 48 pre made screens:
I believe if you are serious about mechanical investing P123 has evolved to be the best platform over the last 20 years. It isn’t inexpensive but for the individual investor this is the only place with a team of individuals are continually improving their methods including an machine learning platform with methods to train and test out of sample data. The following is an example of one of their screens with excellent results. But be forewarned, “Don’t expect to just pick a single example screen and consistently get anywhere near this type of return”. It isn’t all that simple to develop systems that outperform the SP500 but P123 has been making an effort to educate users and give them the tools to make it less difficult.
I have no connection to P123 other than a paid subscription.
A P123 Example “Weighted Value”
Weighted Value
Sharpe Ratio: 1.24
Annual return: 27.23%
5 year return: 246.88%
3 year return: 99.70%
1 year return: 18.15%
Statistics Updated: Oct 12, 2025
Holding Period: Every 4 Weeks
Slippage: 0.25%
Top # Stocks: 20
# Holdings: 20
Rather than set absolute limits in the screener rules, this screen calculates the rank for 3 value factors and requires each to be above a minimum rank. It then calculates the average of those 3 ranks and requires that average be higher than 80% of all the other stocks in the screen's universe. Any one of the factors could have a somewhat low rank and the stock can still pass the screen if the stock had high ranks for the other 2 factors. The numerator in these valuation ratios contains formulas which calculate the weighted sum from the last 4 quarters with more weight given to the more recent quarters. They then rank those ratios using FRank(). The ratios selected were Sales/EV, EBITDA/EV and FCF/EV. Notice that quarters 1 and 3 use the IsNa() function. This was done so these formulas would work with companies that report semi-annually so this screen would also work correctly if a user wanted to switch the universe to Europe. Semi-annual companies will return NA for odd numbered quarters, so the IsNa() function is used to return 0 instead because any NA value would have caused the entire ratio to return NA. Using EV in the denominator works better then market cap because our universe contains companies in the financial sector. Enterprise value takes into account not just the equity value (market cap) but also the debt and other obligations of a company. Since financial sector companies often have significant debt, using EV provides a more comprehensive picture of the company's financial health. The next rule helps reduce the slippage experienced when trading small, less liquid stocks. The first rule has 2 parts. The inner section uses the LoopAvg function to calculate the average ask-bid spread over the last 20 days. The outer section uses the FRank() function to rank all the stocks in the universe based on the average ask-bid spread value that was calculated in the inner section. It then filters out the bottom 5% which are those with the largest spreads. Many value stocks are cheap for a reason and the small cap universe contains a lot of poor-quality, high-risk companies. We will use the AltmanZOrig factor to remove the stocks in the worst financial condition. The FRank("AltmanZOrig",#All) > 20 < 5 rule ranks all stocks in the universe based on AltmanZOrig and filters out the bottom 20%. The final rule uses the FOrder() function with the Scope parameter set to #Previous which means it looks at only the stocks that passed all the rules above it in the Screener. The formula used inside the FOrder() function is LoopStdDev("EBITDA(CTR,TTM)",8,0,1) < 5 . In loop functions like LoopStdDev(), the CTR means 'counter' and the 8 is the number of iterations in the loop. This will retrieve the EBITDA value for the last 8 TTM periods and calculate the standard deviation of those values. Notice that the 'increment' parameter is set to 1. This means it will use Q0,Q1,Q2,Q3 as the first TTM period and Q1,Q2,Q3,Q4 as the 2nd TTM period and Q2,Q3,Q4,Q5 as the 3rd TTM period, etc. The FOrder() function then selects the 50 stocks with the lowest standard deviation. At this point, there are no more than 50 stocks remaining in the Screen results. The Screen is using a Quick rank rule on the Settings tab which will rank the stocks based on EBITDA growth for the current quarter vs the same quarter last year. The Max # Stocks field is set to 20 so the Screen will return the 20 stocks with the highest EBITDA growth.
No. of Recommendations: 4
Don’t get too over excited by the 27.2% CAGR of the P123 “Weighted Value” screen above. It is a good screen but as it is a published screen based on an easy to trade stock universe which means you would have competition with some with significant money competing with you over some lightly traded stocks. However, I have backtested this against other larger universes and it still does well just not that spectacularly.
No. of Recommendations: 0
Another question...
Are you trading pre-built P123 screens or developing your own screens there for actual trading?
No. of Recommendations: 4
Ges:
Is 5 years as far back as their test period goes?
On the p123 website their backtest shown goes back to 10/2015.
I put some more constraints on the universe:
AvgDailyTot(50) > 250000
Country("USA,CAN") = TRUE
Universe(MasterLP) = FALSE
RBICS (INSURANCE, REALESTATE, BANKS) = FALSE //Industries that use slightly different financial statements
StaleStmt = 0 //True when there’s no data in the database for the latest period that is publicly available
!CoName("*Trust")
I then tested it back to 10/2007 to include the 2008 drawdown.
CAGR 22%
Sharp 0.9
MaxDD 47.8%
Alpha 10%
The $250K minimum average daily total means larger portfolios might have to spread buys out over a few days.
Ges:
Are you trading pre-built P123 screens or developing your own screens there for actual trading?
I would never use a prebuilt screen unless it used only very liquid equities.
Until 3 months ago I had been building a ML (machine learning) system using P123’s tools. But DW’s health and old age intervened, and I put active investing on hold while we are moving into a continuing care retirement community. Yesterday was the first time I opened up p123 to see my ML and other simulations were doing.
For the last 3 months and probably the next month or two, I’m temporarily investing in an automatic diversified TAA strategy using Allocate smartly. My plans are to return to more active investing and start using my ML system on P123 which still looks very promising when I have more time.
No. of Recommendations: 1
I looked into p123. Is the 25.00 a month subscription good enough which contains only screens, or do you need the 84/month one that includes ranks.