
Run this strategy
Copy the prompt to reproduce the evidence above with the article’s data, assumptions, and risk checks.
Tell your AI:
Help me set up FinLab and reproduce the U.S. free-cash-flow strategy backtest in this article. Please read: https://finlab.finance/en/setup?relatedUrl=/en/blog/us-quality-value-strategy
Quality and value screens are the most widely repeated advice in fundamental investing, and the least tested. This is a quality value investing strategy backtest that puts three US fundamental composites through the same examination: a quality-growth screen, a value-plus-quality screen, and a free-cash-flow / balance-sheet strength screen, each validated at the stock level (decile sorts, rank ICs, long-short spreads) and then run as a tradable strategy on identical execution. Comparing them side by side is the point: where they agree, where they diverge, and where the returns actually come from.
The lead strategy, built on free cash flow strength, compounded at 31.5% CAGR with a 1.52 monthly Sharpe and a -21.1% maximum drawdown from May 2016 to October 2026, versus 20.7% / 1.09 / -35.1% for buying and holding the Nasdaq-100 (QQQ). It also passes all three robustness checks further down (neighbouring parameters, two halves of the window, and a 0.1% cost on every trade); those checks were run on the FCF version only. One finding changes how you should read that headline: over this period, these fundamentals were weak at picking individual winners. Their measurable power was as market breadth gates that time leveraged-ETF exposure. The evidence for both halves of that claim is below. These three systems share one execution engine with seven sibling strategies; the US quant trading strategies overview explains that shared engine in full and compares all ten.
The numbers at a glance
Full period, May 2016 to October 2026. Benchmarks use total-return (dividend-adjusted) prices over the identical window. Sharpe and Sortino ratios use no risk-free rate, on both sides. Daily Sharpe is the measure the robustness checks below compare against QQQ.
| Metric | FCF strength (lead) | Value + quality | Quality growth | QQQ (buy & hold) | SPY (buy & hold) |
|---|---|---|---|---|---|
| CAGR | 31.5% | 30.4% | 27.2% | 20.7% | 15.1% |
| Monthly Sharpe | 1.52 | 1.47 | 1.37 | 1.09 | 1.01 |
| Daily Sharpe | 1.45 | 1.40 | 1.31 | 0.95 | 0.87 |
| Monthly Sortino | 4.17 | 4.09 | 3.68 | 1.75 | 1.45 |
| Max drawdown | -21.1% | -21.1% | -21.1% | -35.1% | -33.7% |
| Annualized volatility | 19.9% | 20.0% | 19.6% | 22.0% | 17.5% |
| Growth of $1 | $17.7 | $16.1 | $12.5 | $7.2 | $4.4 |
Two patterns in this table preview the whole study. The three strategies share an identical -21.1% maximum drawdown (the February to April 2020 crash) because they hold the same leveraged ETFs under the same 8% stop; the drawdown is a property of the execution engine. And the spread between the best and worst variant is modest (31.5% vs 27.2% CAGR), and all of it was set before September 2017, as the out-of-sample section shows.
See the U.S. quality-value strategy page for more details.
Three definitions of "quality" and "value"
Each variant screens the same liquid universe, the top 500 US stocks by 60-day average dollar volume (price above 10M, both measured on the unadjusted close, with point-in-time membership). Fundamentals are quarterly and aligned to SEC filing dates, with trailing-twelve-month (TTM) values built from rolling four quarters.
| Variant | Entry filter (all conditions must hold) | Breadth threshold |
|---|---|---|
| Quality growth | TTM EPS > 0; revenue growth > 8% YoY; EPS growth > 0; gross margin expanding YoY; positive 6-month price momentum | 1% |
| Value + quality | Positive earnings yield; ROE > 10%; debt/equity < 1.5; 6-month momentum > -10% | 5% |
| FCF / balance-sheet strength (lead) | TTM free cash flow > 0; FCF margin > 5%; debt/equity < 1.2; price above 200-day moving average | 5% |
Each filter has an academic lineage. The quality-growth screen leans on the gross profitability premium documented by Novy-Marx (2013), who showed that profitable firms earn higher returns than unprofitable ones despite richer valuations. The value-plus-quality combination follows the logic of Piotroski (2000), whose F-score filtered cheap stocks by fundamental health to separate recovering firms from value traps, and of Fama & French (2015), whose five-factor model added profitability and investment to size and value. The free-cash-flow screen rests on Sloan (1996), who showed that earnings backed by cash flow are more persistent than earnings built on accruals, which is the case for preferring FCF margin over reported EPS as a quality measure.
The literature establishes the anomalies. Whether these specific screens picked winning US stocks over 2016-2026 is an empirical question, and the answer is less flattering than the strategy curves suggest.
Copy this prompt to your AI agent
FinLab's setup path is now one prompt. Paste it into Codex app or Claude cowork, and the AI will read https://finlab.finance/en/setup, install the FinLab skill when needed, then run or modify the strategy in this article.
Show Code
Help me set up FinLab and build a quality-value strategy: https://finlab.finance/en/setupThe setup page is https://finlab.finance/en/setup.
Stock-level test: do these fundamentals pick winners?
The first layer of validation sorts the universe into deciles by each composite score and measures the next month's average return. If a factor selects stocks, returns should rise from D1 (weakest fundamentals) to D10 (strongest).

| Variant | D1 (weakest) | D10 (strongest) | Long-short spread (annualized) | Top decile beat universe |
|---|---|---|---|---|
| Quality growth | 0.95%/mo | 1.86%/mo | +10.9%/yr | 55.9% of months |
| Value + quality | 1.62%/mo | 1.16%/mo | -5.6%/yr | 51.2% of months |
| FCF strength | 1.45%/mo | 1.40%/mo | -0.6%/yr | 54.5% of months |
Only quality growth behaves the way factor investing textbooks promise: a clear premium in the top decile (1.86% per month, the tallest bar in the chart) and a long-short spread of about 11% per year with a 55.9% monthly hit rate. The value-plus-quality composite fails the test outright over this period. Its long-short spread is negative, and its weakest-fundamentals decile (D1, the names failing the ROE, leverage, and earnings-yield screens) earned the highest next-month return of its ten deciles, 1.62% per month. Low-quality, beaten-down names rallied hardest in this growth-led decade. The FCF composite shows the same shape in milder form: its D1 (1.45%) slightly out-earned its D10 (1.40%), leaving a long-short spread of roughly zero. These figures moved from the June version of this article, partly because the liquid universe no longer admits small reverse-split stocks (see the method table).
The rank information coefficient, the cross-sectional rank correlation between this month's factor value and next month's return, condenses each factor into one number: mean 1-month rank ICs of 0.006 (quality growth), 0.013 (value + quality), and 0.009 (FCF strength), with information ratios of only 0.04 to 0.11. Those ICs rank the factors in the opposite order to the decile spreads, because the IC averages the ordering across all stocks while the spread compares only the two extremes, and the extreme D1 decile is exactly where the value-plus-quality composite breaks down.

The rolling ICs are small, cyclical, and cross zero repeatedly. The value-plus-quality IC peaked near 0.10 during the 2022 bear market and fell below zero in the late-2020 and 2025 rallies, the signature of a defensive tilt; the quality-growth IC did roughly the opposite. For comparison, the 12-1 momentum factor tested the same way in the US momentum strategy study has a mean 1-month IC of similar size (0.012) but a far stronger top-decile separation, a long-short spread of about 22% a year. As cross-sectional stock pickers over 2016-2026, these fundamental composites were weak.
The unlevered portfolio test makes it concrete. Holding each factor's top decile equal-weight, rebalanced monthly, with no leverage and no timing:

Only the quality-growth top decile keeps pace with QQQ buy-and-hold, finishing roughly level with it. The FCF top decile ends well behind QQQ, though ahead of the equal-weight universe, and the value-plus-quality top decile ends below even the equal-weight universe. If your plan was "screen for quality value stocks and hold them," this decade would have rewarded you less than an index fund in two of the three definitions and only matched it in the third.
Where the factors do work: breadth as a regime gate
The second layer asks a different question. Instead of ranking stocks against each other, measure how many stocks pass each filter: the breadth of fundamental health across the market. When a large share of the liquid universe is generating free cash flow, growing revenue, or trading above trend with sound balance sheets, the market regime tends to support risk-taking. When that share collapses, it does not.

Each strategy is risk-on only when its breadth exceeds its threshold and QQQ trades above its 200-day average with positive 6-month momentum. Breadth averaged 8.4% for quality growth (against its 1% threshold), 30.4% for value + quality, and 29.5% for FCF strength (both against 5% thresholds), putting the strategies in risk-on mode 55.3%, 62.3%, and 60.7% of days respectively.
The comparative result is the most useful finding in this study. At the stock level, the three composites barely agree: the average Jaccard overlap between their top deciles is just 8% to 18%, so they are mostly holding different names. At the regime level, they almost always agree: all three gates were in the same state on 93.0% of all days, and value + quality and FCF strength matched on 98.4% of days. Three different definitions of fundamental health, applied to mostly different stocks, deliver one shared message about the market's condition. That convergence is why the strategies below perform so similarly, and it is the strongest evidence that breadth, rather than stock selection, carries the signal.
One data caveat: finlab's US fundamental history starts in 2015-Q1, and TTM plus year-over-year comparisons need up to eight quarters, so breadth readings start near zero in 2016. Value and FCF breadth climbed past the 5% line in the second half of 2016, while quality-growth breadth only crossed its 1% threshold around mid-2017 and stayed at about 3% or less until early 2018. The strategies spent that stretch mostly in defensive assets. That is a data-coverage artifact baked into the backtest, it makes the early-period returns conservative rather than flattering, and it is also the only stretch in which the three variants held different assets.
The lead strategy in finlab code
The tradable version gates leveraged-ETF exposure with fundamental breadth. This is the readable core of the lead FCF variant; the full script is downloadable at the end.
Show Code
import finlab
from finlab import data
from finlab.backtest import sim
finlab.login()
# 1. Liquid US universe: top 500 by 60-day average dollar volume
data.set_market("us")
close = data.get("us_price:adj_close") # adjusted: for trend and returns
raw_close = data.get("us_price:close") # unadjusted: matches the unadjusted volume
volume = data.get("us_price:volume")
dollar_volume = (raw_close * volume).rolling(60, min_periods=20).mean()
universe = dollar_volume.is_largest(500) & (dollar_volume > 10_000_000) & (raw_close > 10)
# 2. TTM free cash flow and balance-sheet strength (filing-date aligned)
ocf = data.get("us_cash_flow:operating_cash_flow")
capex = data.get("us_cash_flow:capital_expenditure")
revenue = data.get("us_income_statement:revenue")
debt = data.get("us_balance_sheet:total_debt")
equity = data.get("us_balance_sheet:total_stockholders_equity")
fcf = (ocf + capex).rolling(4).sum() # trailing twelve months
fcf_margin = fcf / revenue.rolling(4).sum()
debt_to_equity = debt / equity
passes = (
universe
& (close > close.average(200))
& (fcf > 0)
& (fcf_margin > 0.05)
& (debt_to_equity < 1.2)
)
# 3. Breadth gate: what share of the liquid universe passes the filter
breadth = passes.sum(axis=1) / universe.sum(axis=1)
qqq = data.get("us_fund_price:adj_close")["QQQ"]
qqq_trend = qqq > qqq.rolling(200, min_periods=100).mean()
qqq_momentum = qqq / qqq.shift(126) - 1
risk_on = (breadth > 0.05) & (qqq_trend & (qqq_momentum > 0)).reindex(breadth.index)
# 4. Execution (full logic in strategy.py below), monthly rebalance, 8% stop:
# risk-off months hold the strongest of IEF / GLD / SHY at 100%;
# risk-on months add TQQQ and TECL, and the backtest's trade list shows
# about 25% in each beside the defensive ETF at about 50%.us_price:adj_close is dividend- and split-adjusted, so trend and momentum calculations are not distorted by corporate actions. Dollar volume and the $10 price floor use the unadjusted us_price:close, because the volume series is reported unadjusted and the two need to match. The quarterly statement datasets are aligned to filing dates, so each day's screen uses only information that was public at the time. In risk-off months the book holds a single defensive ETF. In risk-on months the published script keeps that defensive ETF and adds the two leveraged ETFs beside it: after reindex(...).fillna(False) the risk-on series has object dtype, so ~ does not invert it and the defensive leg is never switched off. The trade list therefore shows TQQQ and TECL at about 25% each next to the defensive ETF at about 50% in most risk-on months, roughly half the leveraged exposure that "hold two 3x ETFs" would imply. Every number in this article comes from this version of the script. The execution layer is identical across all three variants and across the wider family, and the strategy family overview covers its mechanics and trade-offs once for all of them.
Here is the interactive finlab report for the lead FCF strategy, with drawdowns, monthly returns, and the full trade list:
Out-of-sample: three strategies become one trade
Parameters were calibrated on 2016-2021 and left untouched on 2022-present, an unseen period that includes the 2022 bear market.

| Metric | Quality growth | Value + quality | FCF strength | QQQ |
|---|---|---|---|---|
| CAGR, research (2016-2021) | 26.4% | 32.2% | 34.4% | 27.2% |
| Monthly Sharpe, research | 1.31 | 1.48 | 1.57 | 1.53 |
| CAGR, out-of-sample (2022-) | 28.1% | 28.1% | 28.1% | 13.3% |
| Monthly Sharpe, out-of-sample | 1.50 | 1.50 | 1.50 | 0.82 |
| Max drawdown, out-of-sample | -19.3% | -19.3% | -19.3% | -34.8% |
The repeated out-of-sample values are the finding, not a formatting error: all three variants post identical statistics since 2022 because their regime gates agreed on every out-of-sample day, so they held the same ETFs at the same times. In this run the overlap reaches back further. The three daily return series are identical from September 2017 onward (FCF and value + quality from February 2017), so every difference between the variants was set in the first 16 months, while the fundamental history was still too short for the trailing and year-over-year screens. They are effectively one trade, which is the reason this comparison is published as a single article rather than three. The FCF variant's research-period lead (34.4% CAGR and a 1.57 Sharpe, against 26.4% and 1.31 for quality growth) was earned entirely in that start-up window.
Against QQQ, the research period reads mixed: the FCF variant edged QQQ's research-period Sharpe (1.57 vs 1.53) and beat its 27.2% CAGR, value + quality beat the CAGR but not the Sharpe, and quality growth trailed on both. The larger gap opened out of sample: 28.1% vs 13.3% CAGR and a -19.3% vs -34.8% maximum drawdown, with the strategies losing 7.9% in calendar 2022 while QQQ lost 32.6%. The path was uneven, though. In some strong up years the strategies lagged badly: -2.5% vs +39.0% for QQQ in 2019 and +19.9% vs +54.9% in 2023. That is encouraging behavior on unseen data, and it is still one market cycle, not a guarantee.
Robustness checks: neighbouring parameters, two halves, trading costs
These checks were run on the FCF version, the one in the downloadable strategy.py; the quality-growth and value-plus-quality variants were not separately checked. "Beats QQQ" in this section means a higher daily Sharpe ratio (mean daily return divided by its standard deviation, annualized with √252, no risk-free rate) than buying and holding QQQ with dividends over exactly the same dates.

Neighbouring parameters. The two gate parameters were each moved one step either side of the original: the FCF-breadth threshold, the share of liquid stocks that must pass the FCF screen before the strategy may go risk-on (4%, 5%, 6%; original 5%), and the length of QQQ's trend average (150, 200, 250 days; original 200). All 9 of the 9 combinations beat QQQ, against a pass mark of 7. Daily Sharpe ranges from 1.37 (4% threshold, 250-day average) to 1.45, against QQQ's 0.95 in every cell, and the original setting scores 1.45. One observation from the grid: the 150-day and 200-day columns give identical results in this run.
Two halves. Cutting the backtest in half by trading days:
| Half | Dates | Strategy daily Sharpe | QQQ daily Sharpe |
|---|---|---|---|
| First half | 2016-05-02 to 2021-07-08 | 1.62 | 1.20 |
| Second half | 2021-07-08 to 2026-10-26 | 1.29 | 0.71 |
Both halves beat QQQ on their own. The second half is weaker in absolute terms, but its margin over QQQ (0.58) is wider than the first half's (0.42).
Trading costs. finlab's US-market default charges zero commission and zero tax, matching zero-commission brokers, so the headline run carries no cost at all. Charging 0.1% on every buy and every sell (fee_ratio=0.001) as a stand-in for spread and slippage, the strategy still compounds at 30.0% a year, down from 31.5%, with a daily Sharpe of 1.39 against QQQ's 0.95.
Verdict: the FCF version passes all three checks (9 of 9 neighbouring settings, both halves, and the cost test). To reproduce every number in this section, run python strategy.py --validate with the downloadable script.
Backtest method and limits
| Item | This backtest |
|---|---|
| Transaction costs | The headline run assumes zero cost: finlab's US default is fee_ratio=0, tax_ratio=0, no slippage, reflecting commission-free brokerage. The cost check above charges 0.1% per buy and per sell: CAGR 30.0%, daily Sharpe 1.39 vs QQQ 0.95. |
| Leverage decay | Already reflected: the TQQQ/TECL price series embed daily-reset drag and expense ratios. |
| Universe / point-in-time | Top 500 US stocks by 60-day dollar volume; price > 10M; names with a single-day move of 50%+ excluded for a year (data-artifact guard); each date uses only then-available data. Dollar volume and the price floor use the unadjusted close (us_price:close), because finlab's US volume is not split-adjusted: multiplying it by the split-adjusted close overstated the earlier dollar volume of stocks that later did a reverse split and let some tiny names into the top 500. Returns still use the adjusted close. |
| Fundamentals timing | Quarterly statements aligned to SEC filing dates; TTM = rolling 4 quarters; no restatement lookahead. |
| Data coverage | US fundamental history starts 2015-Q1, so breadth starts near zero in 2016 (quality-growth breadth stays at about 3% or less until early 2018) and the strategies sat mostly in defensive assets early on. This window is the only period in which the three variants held different assets. |
| Turnover | About 3.9x to 4.0x per year; 244 to 261 trades over the decade. |
| Position rule | From the trade list (121 monthly rebalances): 49 risk-off months held one defensive ETF at 100%. Of the 72 months with leverage, 65 held TQQQ and TECL at 25% each plus the strongest defensive ETF at 50%, 4 held only the two leveraged ETFs at 50% each, and 3 held one leveraged ETF at 33% beside the defensive ETF at 67%. Leveraged ETFs were held on 45% of trading days. 8% touched stop; a stopped position sits in cash until the next rebalance. |
| Sample | 2016-2021 calibration; 2022-present out-of-sample; plus the two-halves check above (FCF version). |
| Capacity | Not estimated. Leveraged ETF liquidity is deep, but real impact depends on your size. |
The publication bar for this strategy family is a risk-adjusted ratio of at least 1.5 on at least one standard measure. On the convention used for every comparison in this article (no risk-free rate, same dates as the benchmarks), the lead FCF variant clears it over the full period with a 1.52 monthly Sharpe and a 4.17 monthly Sortino, and its out-of-sample monthly Sharpe sits right at the line (1.50). One reporting note: finlab's own report statistic (get_stats, also what python strategy.py prints) subtracts a 2% annual risk-free rate and shows a 1.42 full-period monthly Sharpe for the same curve; it is not comparable with the no-rate benchmark figures above. Both values are recorded in the downloadable metrics.json linked at the end.
The leveraged-ETF risk you must understand
The returns above come from holding 3x products part-time, and the leverage is the main thing that can hurt you:
- Daily reset and path dependency. A 3x daily ETF compounds daily, so a choppy, sideways market erodes value even if the index ends flat. None of these strategies hold leverage unconditionally for exactly this reason.
- The actual worst case was -21.1%, shared by all three variants over the full period (February to April 2020), with about 20% annualized volatility. If a one-in-five drawdown on your whole position is intolerable, this sizing is wrong for you.
- Fundamental breadth moves slowly. Quarterly filings update with a lag, so breadth can stay positive while leveraged ETFs reprice violently, can lag a sudden liquidity shock, and in the FCF variant can deteriorate only after the price trend has already turned. The QQQ trend condition and the 8% stop are the faster brakes, and a gap through the stop can fill worse in live trading than in the backtest.
- Monthly switching is not crash protection. A fast crash inside a month hits the leveraged half of the book in full until the stop or the next rebalance. In the backtest, 46 of 141 leveraged positions were stopped out, and the worst of them lost 12.9% against the 8% stop level.
- Concentration. The leveraged half of the book is two ETFs on one theme (large-cap US growth and technology), whatever the screen that timed the entry.
A reasonable conservative reading of this study: take the regime-gate finding, ignore the leverage, and apply breadth gating to unlevered index exposure. The compounding will be lower and the risk profile far gentler.
Who this is for
This comparison fits an investor who wants rules-based US exposure, cares whether a screen's stock-picking claims actually survive a decile test, understands leveraged ETFs, can hold through a 20% drawdown, and can sit through a year like 2019 or 2023 trailing QQQ by 35 percentage points or more. It does not fit anyone who needs capital stability, wants a buy-and-hold quality portfolio (the unlevered test above shows what that earned), or is uncomfortable holding 3x products at any time.
FAQ
Does a quality value strategy beat the market in this backtest? The tradable, breadth-gated versions did: 27.2% to 31.5% CAGR versus QQQ's 20.7%, with smaller drawdowns (-21.1% vs -35.1%). The plain stock-picking versions did not: unlevered, no top decile beat QQQ, and only the quality-growth top decile kept pace with it.
Is the result just a lucky parameter choice? For the FCF version, the checks above say no: all 9 neighbouring combinations of breadth threshold and QQQ trend length beat QQQ on daily Sharpe, both halves of the window beat QQQ on their own, and a 0.1% cost per trade still leaves 30.0% CAGR. The other two variants were not separately checked.
Which fundamental factor was best? For the tradable strategy, FCF strength (31.5% CAGR, 1.52 monthly Sharpe, full period), though its whole lead over the other two was earned before September 2017. For stock-level selection, quality growth, the only variant with a real top-decile premium (+10.9%/yr long-short).
Why do all three variants have identical out-of-sample results? Their risk-on gates agreed on every out-of-sample day, and in this run the three daily return series are identical from September 2017 onward. The factor definitions differ at the stock level (top-decile overlap of only 8-18%) but converge at the regime level.
Is free cash flow factor investing different from value investing? Yes in construction: value ranks on price multiples, while FCF factor investing ranks on whether earnings are backed by cash, following Sloan (1996). In this test neither earned a stock-level premium: the FCF spread was about zero (-0.6%/yr) and the value-tilted spread negative (-5.6%/yr).
What data does this need?
FinLab's us_price:* for prices, us_income_statement / us_balance_sheet / us_cash_flow for filing-date-aligned fundamentals, and us_fund_price:* for the ETFs. All are in a standard FinLab account.
Can I run and modify this myself? Yes. Use the AI-assisted setup flow and ask your agent to rebuild any variant, or download the script below and run it after setup.
Reproduce it yourself
Three files reproduce the lead strategy, the comparison curves, and every number quoted above:
- strategy.py: the full FCF / balance-sheet strength strategy, ready to run after the AI-assisted setup flow.
python strategy.pyruns the backtest;python strategy.py --validateruns the three robustness checks. - data.csv: daily equity curves for the FCF strategy, QQQ, and SPY.
- metrics.json: the complete metrics for all three variants and both benchmarks: CAGR, drawdown, daily and monthly Sharpe/Sortino under both conventions discussed above, the research/out-of-sample splits, turnover, and the factor-validity statistics.
A natural next experiment is to hand the script to your AI agent and swap the entry filter: tighten the FCF margin, drop the trend condition, or combine the quality-growth screen with the 5% threshold, then re-run the decile test before trusting the equity curve. To see how these three sit among ten related US systems, read the US quant trading strategies comparison; for the strongest stock-level factor in the family, see the US momentum study. For metric definitions, see the glossary; for more write-ups, the FinLab research blog; and for the team and what users build, the about page and use cases.
Last updated: 2026-10 | Backtest window: 2016-05 to 2026-10 | Benchmark: QQQ total return | Author: FinLab Quant Research (reviewed by a quantitative researcher)
Investing involves risk, and past performance does not represent future results. Leveraged ETFs carry additional risks including volatility decay and amplified losses. This content is for educational purposes only and is not investment advice and does not constitute investment advice; evaluate any strategy against your own risk tolerance.
FinLab AI
Want to build your own strategy?
Describe your stock-picking ideas in natural language. AI automatically validates, backtests, and gives you answers
Start Free


