TRINETRA › Research

Do ROE, Piotroski F-score and margins predict NSE stock returns?

Short answer: On a 1,537-observation panel of SEBI filings, no fundamental metric separated forward returns over the window tested.

Published 2026-10-21 · original backtest on Indian market data by TRINETRA

Date: 2026-10-21 Script: engine/scripts/bench_fundamentals_v2.py Output: data/research/BENCH_fundamentals_v2.json Supersedes: BENCH_fundamentals.json — see "Why the old verdict cannot be carried over"

Verdict

NO METRIC SEPARATED FORWARD RETURNS on this sample. 20 hypotheses (7 metrics × 3
horizons), 1,537 observations across 266 symbols and 6 quarters, with a within-week shuffled
null and Benjamini-Hochberg FDR control. Nothing survived with the predicted sign and a ≥55%
weekly win rate.

This is the answer I expected and the one the section was already written for. It does not mean fundamentals are worthless — it means they do not time entries. No direction field, arrow or rating is earned, and none is shipped.

Why the old verdict could not be carried over

The first bench reported "NO MEASURABLE RELATIONSHIP (−6.3%, −26.5%, +3.0%)". That result was not evidence about this data, for three reasons:

  1. It tested the 6-signal profitability_trend proxy — a score built because the income statement was all that was available. It no longer drives anything on the page.
  2. It had one filing date. One cross-section cannot separate "quality does not predict" from "Dec-2024 was an unusual quarter".
  3. It could not test ROE, ROCE, D/E, FCF, accruals or the real F-score at all — those need the balance sheet the old source did not carry.

So the honest move was to re-run, not to quote the old number about new metrics.

Design

first benchthis one
Observations94 (1 per symbol)1,537 (1 per symbol-quarter)
Filing dates117 filing weeks over 6 quarters
Point-in-timeperiod_end + 45 days (a guess)the actual broadcast_Date, window opens next trading day
Metrics17
Nullshuffle across symbolsshuffle within filing week
Clusteringnonetest on week means, n = weeks
Multiple comparisonsnoneBenjamini-Hochberg over all 20

Three of those changes exist because of earlier retractions in this project:

  • Within-week shuffling (not across) — shuffling across weeks would also scramble which quarter each return came from, making the null too easy to beat. This is the control that retracted Gann R5.
  • n = weeks, not observations — Indian results cluster into ~3 weeks a quarter; hundreds of filings share one market move. Pooling inflates n by ~10×. diag_buy_watch first read −3.79% on "n=121" that was really 23 dates, two of them holding 51 observations.
  • BH across all 20 — at p<0.05, 20 tests expect 1.0 chance hits. Exactly one test came in under 0.05, which is the chance pattern, not a signal.

Results

All figures are mean weekly high-minus-low tercile spread in excess returns, signed so positive = the hypothesis held.

metrich=21h=63h=126sign-consistent?
ROE+0.97% (p=.34)−2.28% (p=.22)−2.29% (p=.46)no
ROCE+1.34% (p=.22)−0.32% (p=.86)+1.79% (p=.57)no
Debt/equity−2.29% (p=.041)−2.30% (p=.28)−4.14% (p=.21)yes
CFO ÷ PAT−0.12% (p=.92)+0.06% (p=.97)+3.06% (p=.34)no
FCF margin+0.04% (p=.97)+0.29% (p=.89)−4.00% (p=.20)no
Piotroski F-score−0.39% (p=.84)−0.44% (p=.91)n/ano
Capex ÷ depreciation−0.63% (p=.54)+1.82% (p=.37)−4.44% (p=.15)no

The one result worth stating carefully

debt_to_equity is the only metric sign-consistent across all three horizons (−2.29%, −2.30%, −4.14%), with weekly win rates of 29%, 29% and 20%. The sign means high-leverage names BEAT low-leverage names on this sample — the opposite of the hypothesis, which was framed lower-is-better per the distress literature.

It is not a finding, and the page says nothing about it:

  • It failed Benjamini-Hochberg (p=.041 against a 20-test correction where 1.0 chance hit was expected).
  • Only the shortest horizon reached p<0.05 at all.
  • Six quarters of 2025-2026 is one broad regime, and a leveraged-beta rally would produce exactly this pattern without any information in the ratio itself.

Recording it because sign-consistency is the pattern that would merit a follow-up on more history — not because it earns anything now. The honest reading is "high-beta names outran low-beta names over this window", which is a statement about the regime, not about leverage as a signal.

Piotroski has the weakest coverage

Only 226 observations across 7 weeks, because the F-score needs four filings (current and year-earlier, each with a balance sheet) and many quarterly filers do not file the sheet every quarter. Its h=126 test was skipped entirely for lack of data. So the F-score here is under-tested rather than tested and cleared.

Limits, stated plainly

  • Six quarters is one regime. 2025-03-31 → 2026-06-30. Nothing here speaks to a bear market.
  • Banks excluded. They file a different schedule; a mixed panel would be incoherent. Bank metrics are untested.
  • Universe is the 611 themed names ∩ price history, sampled to 320. That is the tradeable universe the page is used on, not the whole listed tail — a selection choice, stated.
  • Candle-store defects persist (duplicate sessions, unadjusted splits) and are neutralised by clean(), not fixed at source.
  • A null result at this n is not proof of no effect. With 17 weeks, a genuine 1-2% quarterly edge would likely not clear this bar. The conclusion is "not demonstrated here", not "demonstrated absent".

What this licenses on the page

allowed
Report the metrics as business description✅ yes — what they are for
Show the trailing multiples as facts✅ yes — a P/E is arithmetic, not a forecast
Rank peers on a metric✅ with the peer count shown
Score, rate, or sort by "quality"❌ nothing earned it
A buy/sell/hold or direction arrow❌ explicitly not
Call a stock cheap or expensive❌ that is a judgment this does not support

All research

TRINETRA is a research and education tool. Nothing on this site is investment advice or a recommendation to buy or sell any security. Markets carry risk; do your own research and consult a SEBI-registered adviser before investing.