Equal-weighted, gross of costs. Benchmark is the equal-weight average of the same universe. Universe is the current S&P 500, so results carry survivorship bias — see the About tab.
A fully static stock-screening and factor-backtesting app. Scheduled
GitHub Actions jobs pull the current S&P 500 universe, ~15 years of
prices and company fundamentals from Yahoo Finance (via
yfinance), plus point-in-time historical
fundamentals from SEC EDGAR, compute metrics, and commit compact
JSON into data/. The browser does all ranking and
backtesting client-side — there is no server.
Pick a preset or toggle individual metrics. Each selected metric is converted to a cross-sectional z-score (winsorised at ±3σ), signed by its direction (cheap / high-quality / high-momentum / low-risk = good), and equally averaged into a composite score. Sort by any column; export the ranked table to CSV.
At each rebalance date the universe is ranked by the chosen factor. The portfolio goes long the top quantile and short the bottom quantile (equal-weighted), held to the next rebalance. Period returns chain into an equity curve with CAGR, volatility, Sharpe, max drawdown, and hit rate, versus an equal-weight benchmark.
Price factors (momentum, low-volatility, reversal) are computed from the monthly price matrix. Fundamental factors (earnings/book/sales yield, FCF & dividend yield, ROE/ROA, margins, debt) are computed point-in-time: at each date we use only SEC figures already filed by then, combined with that month's price — so a value factor reprices monthly without look-ahead.
Not investment advice. For research and education only.