Financebotresearch desk研究台

Playbook › Playbook

Vendor forward P/E silently uses the wrong fiscal year, and it flips verdicts

static 2026-09-24

Claim

Twice on the same day, on two different names, the reported forward P/E was built on the wrong fiscal year — and in both cases it was the number the verdict rested on.

ticker vendor fwd P/E vendor implied EPS true forward EPS true fwd P/E error
TSM 19.31x ~$21.60 $15.91 (2026 consensus) 26.2x EPS 36% too high
QCOM 14.8x $10.30 ~$8.60 (FQ4 guide annualised) 18.9x Used a year already 3/4 reported

TSM is the cleaner illustration. The company's own prints settle it: Q1 2026 EPS was NT$22.08 (≈$3.49/ADR) and Q2 2026 was US$4.31/ADR — so H1 delivered ~$7.80. A full year near $16 is arithmetically consistent; a full year near $21.60 is not. Independent vendors agreed with the corrected figure (GuruFocus 25.3x, others 24.5x); Yahoo was the outlier, not the consensus.

What breaks

  • The verdict moves a full step. The 2026-08-04 tech sweep called TSM "ACCUMULATE, cheapest quality in the list, FV $432–518" on 19.3x. At the correct 26.2x the fair value fell to $350–480 and the verdict became WATCH — the stock sat at fair value, not below it.
  • The watchlist trim convention inherits it directly. Trim NNx fwd computes its dollar level as NN × (price ÷ forward P/E), so a forward EPS that is 36% too high sets a trim 36% too high and instructs holding through the exit. Compounds with [[pitfall-multiple-trim-inverts-on-peak-cycle-cyclicals]].
  • It always errs toward "cheap." A forward EPS drawn from a later year on a growing company is too high, so the multiple looks too low. The error manufactures false bargains, which is the direction that costs money.
  • Screens are worst affected: a --screen-style pass ranks on the vendor field with no chance to sanity-check it.

How to apply

  • Reconstruct the year from reported quarters before quoting any forward multiple. Sum the reported quarters of the fiscal year, add the guide for the rest, compare to the vendor's implied EPS. Two minutes, and it is the check that would have caught both cases.
  • Tripwire: an implied forward EPS more than ~25% above TTM EPS on a company not in a step-change. TSM's implied $21.60 against $11.64 TTM was an 86% jump — visible without any research.
  • Cross-check one independent vendor. GuruFocus/stockanalysis/finbox disagreeing with Yahoo by more than ~15% means Yahoo is using a different year. When they disagree, the majority is usually right and Yahoo is usually the outlier.
  • Never let a screen-level forward multiple carry a verdict. A screen produces nominations, not findings — see the tool-hierarchy note in CLAUDE.md on fin.py --screen. This pitfall is the concrete reason that rule exists.
  • Related: [[pitfall-adr-book-value-corrupts-price-to-book]] (same day, same ticker, different field) · [[principle-primary-source-beats-vendor]] · [[pitfall-gate-cleared-by-adjective-not-arithmetic]].

✅ Amendment 2026-08-12 — the medtech peer set refines the claim in two ways

Checked all six names in the BSX medtech peer set against company guidance. The original claim said the vendor year is "not a consistent one across tickers." That is too pessimistic — within a single sector-and-calendar peer set it was perfectly consistent, and that consistency is itself the finding.

(1) The offset-fiscal-year trap — a genuinely new mechanism. Yahoo's forward P/E points at the next fiscal year for every name. Three matched next-FY consensus to the penny (ABT $6.06, SYK $16.76, EW $3.38). But Medtronic's fiscal year ends in April, so its "next FY" ends Apr-2028 — roughly 20 months out and a full year beyond the Dec-2027 calendar-year peers.

Yahoo implied EPS What year that actually is Current-FY guide Vendor fwd P/E True cur-FY P/E
MDT $6.41 FY2028 (ends Apr-2028) $5.90–6.00 (FY2027) 14.15x 15.25x
ABT $6.06 FY2027 $5.45–5.60 18.30x 20.07x
SYK $16.76 FY2027 $14.95–15.10 20.72x 23.11x
EW $3.38 FY2027 $2.95–3.05 27.53x 31.02x
ISRG ~$11.70–12.07 FY2027 no company guide exists 33–34x ~37–38.5x

Dropping a vendor forward P/E for an offset-fiscal-year company into a peer table compares a 20-months-out estimate against 12-months-out estimates, and it flatters the odd one out — MDT looked ~7% cheaper than it is. This is invisible unless you check fiscal year ends, and it is not the same as the original TSM/QCOM failure (a wrong year on one name); it is a wrong horizon on one row of an otherwise-correct table.

(2) A uniform error preserves the relative signal. Because the vendor was on next-FY for all six, the ranking survived even though every level was wrong — which is the opposite of [[pitfall-half-corrected-peer-table-invents-a-discount]], where correcting some rows manufactured a fake discount. The rule that reconciles them: correct every row or none, and check fiscal year ends before believing "every row is on the same basis."

(3) The circularity tripwire. During this run an analyst "confirmed" BSX's forward year by citing FY2027 consensus of $3.44 — which was simply $51.42 ÷ Yahoo's 14.95, i.e. the vendor's own implied EPS fed back as independent corroboration. A vendor's implied EPS can never verify that vendor's multiple. Verification requires a company guide or a genuinely independent aggregator.

How this run applied it: BSX's guided FY2026 adj. EPS is $3.28–3.32, so the correct current-year multiple is 15.6x, not the 14.95x Yahoo showed. Because BSX screens as the "cheap" name, this is the direction the original note warned about — the error again pointed toward a false bargain.

History

  • 2026-08-04 — found twice in one day (TSM, QCOM) during the tech sweep.
  • 2026-08-12 — extended during /analyze BSX. Added the offset-fiscal-year mechanism (MDT's April year end putting its vendor forward a full year past its calendar-year peers), the finding that a uniform year error preserves relative ranking while a partial correction does not, and the circularity tripwire (vendor-implied EPS cannot verify the vendor's own multiple). Softened the original "not consistent across tickers" claim — within one sector/calendar cohort it was consistent.

  • 2026-08-19 — fired again on LEN during /analyze; see Output/Stocks/Consumer/LEN/analyze-2026-08-19.md.


Amendment 2026-08-27 - two names in one session, and the vendor field is self-documenting

/analyze AMD, ANET fired this pitfall on both names, in the same direction, on the same day.

ticker vendor forwardPE implied EPS true current-year true fwd P/E understated by
AMD 30.85x $15.45 (FY2027) $7.57 (FY2026 non-GAAP) 63.0x ~2.0x
ANET 38.97x $5.16 (FY2027) $4.11 (FY2026 non-GAAP) 48.9x ~1.25x

The AMD tripwire was extreme and visible without any research: implied forward EPS $15.45 against TTM EPS of $3.94 - a +292% jump on a company not in a step-change.

The upgrade: Yahoo carries the correct number in a different field, and nobody reads it

This is the most useful thing in the amendment. get_stock_info returns both years simultaneously, and the current-year pair is right there:

AMD epsCurrentYear : 7.56794 priceEpsCurrentYear : 62.99 <- FY2026, CORRECT epsForward : 15.45073 forwardPE : 30.85 <- FY2027, what everyone quotes ANET epsCurrentYear : 4.11295 priceEpsCurrentYear : 48.89 <- FY2026, CORRECT epsForward : 5.15956 forwardPE : 38.97 <- FY2027, what everyone quotes

The fix is therefore cheaper than the original note implies. The prescribed remedy was to reconstruct the year from reported quarters - sound, and still the authoritative check. But the first move should now be:

Read epsCurrentYear / priceEpsCurrentYear alongside forwardPE on every name. If they disagree by more than a rounding difference, forwardPE is the next fiscal year and priceEpsCurrentYear is the number you want. Then confirm with the quarter-sum.

Yahoo's nextFiscalYearEnd does not resolve it - ANET's reads 2026-12-31, i.e. "forward" should mean FY2026, and it does not.

.mcp/fin.py prints only PE(fwd) in its snapshot block, so the compact bundle inherits the defect silently. Worth adding priceEpsCurrentYear to that block.

New failure mode: one vendor, two different forward P/Es, same page-set, same day

The original guard says "cross-check one independent vendor." Insufficient. On 2026-08-27 stockanalysis.com published, for AMD, at the same price:

page figure basis
Forecast 62.99x FY2026
Statistics 43.30x NTM blended

46% apart, both correct, neither labelled. A cross-check that lands on the wrong page of the right vendor confirms the wrong number.

Revised guard: check which year or window each number is on - including within a single vendor - before comparing anything. Three distinct bases now circulate routinely: current fiscal year, NTM blended, and next fiscal year.

A second independence trap found the same day

For ANET, Yahoo and stockanalysis.com agreed to five decimal places ($4.11295) - because they share the LSEG feed. Agreement between them is not corroboration; they are one source. The only genuine confirmation was a bottom-up reconstruction from the company's own guidance. Before counting a cross-check, establish that the second vendor has a different feed.

The verdict impact, restated

Both names' watchlist lines carried the vendor figure and both understated the multiple. AMD's "32.2x fwd" was the number the file had used for months to describe a stock at 63x, and it fed directly into a Trim $360+ level that sat 25% below the fair value a corrected analysis produces - see [[pitfall-stale-entry-zone-suppresses-a-name]] and [[pitfall-multiple-trim-inherits-the-broken-vendor-field]]. The error again manufactured a false bargain, which remains the direction that costs money.

Amendment 2026-08-27 (2) — DPZ, and the priceEpsCurrentYear shortcut confirmed again

/analyze-from-before DPZ hit the same trap the same day as the AMD/ANET amendment above, independently. Yahoo's forwardPE 15.91x prices forwardEps $20.87 — FY2027, not FY2026. priceEpsCurrentYear 17.46x on epsCurrentYear $19.02 is the correct current-year read, exactly as the AMD/ANET fix prescribes. The baseline report (written 2026-04-29, before this note existed) had independently quoted "15.6x fwd" on the same defect. Three names in one calendar month (WDAY 8/27, AMD/ANET 8/27, DPZ 8/27) is no longer an occasional trap — check priceEpsCurrentYear against forwardPE on every name, every time, before quoting any forward multiple, and set watchlist trims on ttm rather than fwd whenever they disagree (see [[pitfall-multiple-trim-inherits-the-broken-vendor-field]]).

Amendment 2026-08-27 (3) — EMR, and a mislabel that was latent at the moment of writing

/analyze-from-before EMR found the baseline (analyze-2026-03-21.md) had written "Forward EPS (FY2026) ~$7.15 (consensus), forward P/E 17.9x" — labelling the number as the current-under-way fiscal year. It was not. EMR's FY2026 ends Sep 30, 2026; in March 2026 that was already the "current" fiscal year by Yahoo's own convention (last completed FY was FY2025, ended Sep 2025), so whatever Yahoo returned in forwardEps in March was already FY2027 — one year past the year the baseline named it. The true FY2026 figure was always the company's own guide ($6.40–6.55, later confirmed $6.55), never the ~$7.15 the baseline quoted.

This is a new variant worth naming: the mislabel does not require a fiscal-year rollover to happen between the write and the read. Every prior case in this note (TSM, QCOM, AMD, ANET, DPZ) was caught reading a stale or wrong-year figure at the moment of analysis. Here the figure was wrong on the day it was written — the baseline never reconstructed the year from quarters, so the error sat latent in the file for five months until this pass's epsCurrentYear / priceEpsCurrentYear cross-check (per the AMD/ANET amendment's revised guard) caught it by matching Yahoo's own current-year field ($6.5554) against the company's guide almost to the cent.

No verdict damage this time — the baseline's fair-value work ran on FCF/DDM/DYT, not on the mislabeled multiple, so the error was cosmetic in March. It would not have stayed cosmetic: had a Trim NNx fwd been set against the $7.15 figure, it would have inherited a number one fiscal year too far out, the same failure the TEAM case describes in [[pitfall-stale-entry-zone-suppresses-a-name]]. Caught and corrected before that could happen. Four names fired this pitfall in the same calendar month (WDAY, AMD, ANET, DPZ) plus EMR now a fifth, on a five-month-old file — this is not a screening-day-only risk, it is a standing check every /analyze and /analyze-from-before needs regardless of when the number was first written.

Amendment 2026-08-27 (4) — the batch result: it is not "occasional," it is the default

A single 2026-08-27 batch ran /analyze-from-before on 19 watchlist names (the Tier-1/2/3 staleness queue). The vendor forward field mapped to the wrong fiscal year on essentially every one that had a positive, guidable EPS — AVGO, ADP, V, VEEV, SHOP, DOCU, ETN, ACN, MSFT, MANH, META, TGT, SAP, GPN, plus the WDAY/DPZ/EMR already recorded above. LEU is the informative exception: its earnings are too lumpy/negative for the vendor P/E to mean anything at all, so the field was discarded, not corrected. The hit rate is not a coincidence to note case-by-case; it is the field's normal behaviour. Stop treating each instance as a fresh discovery.

Two standing consequences: 1. Never quote a vendor forwardPE/forwardEps without first cross-checking priceEpsCurrentYear/epsCurrentYear. If they disagree, the current-year field is the true forward and the forwardPE is one fiscal year too far out — which always reads cheaper than reality, the direction that costs money. 2. Tooling fix worth doing: promote the epsCurrentYear / priceEpsCurrentYear current-year multiple into fin.py's snapshot output directly, beside the raw forwardPE, so the correct number is on the page and the manual cross-check is no longer the only thing standing between the analyst and the trap. Fifteen-plus manual catches in one month is the signal that the guard belongs in the tool, not the checklist.

Amendment 2026-08-27 (5) — when the name just reported, BOTH forward fields can be stale

The /analyze batch on the 8/26 reporters (CRM, CRWD, OKTA) surfaced a sharper failure: when a company reported within the last one or two trading days, the epsCurrentYear/priceEpsCurrentYear fix from the AMD/ANET amendment is not enough — both the forwardPE/forwardEps pair AND the epsCurrentYear pair can lag the just-issued guidance at once, because the vendor has not re-based either to the new fiscal-year guide yet. On CRM the two fields even disagreed with each other while both trailed the raised FY27 guide. OKTA showed the trailing-side version: the morning after an after-close print, trailingEps/trailingPE/totalRevenue still carried the pre-print window, missing the just-reported quarter entirely.

Rule addition: if the name reported within ~2 trading days, do not trust ANY vendor EPS field — forward or trailing. Read the company's own issued guidance and compute the multiple from it. The vendor cross-check resolves the wrong-fiscal-year case; it does not resolve the just-reported case.

Source: Output/Stocks/Infrastructure/EMR/analyze-from-before-2026-08-27.md.


Amendment 2026-09-22 — three hits in a single session, on a six-name batch

A portfolio-specific passage was removed from the public build.

Ticker Vendor forward P/E True forward P/E Vendor's basis Effect
KLAC 27.6x 34.1x FY2028 EPS ($6.71) A full rating step — 27.6x reads cheap for the best business in WFE; 34.1x reads full
META 21.5x — FY2027 EPS ($34.84) The 23x fwd trim renders ~$801 while the fair value was built on ~$27 of current-year EPS → the site showed a stock 14% ABOVE fair value as comfortably below trim
INTU 12.56x — implies EPS $27.64, matching no guided year (FY27 non-GAAP $22.88-23.12, GAAP $20.12-20.36) A 20x fwd trim would render $553, ~20% too high — which is why that file deliberately uses 28x ttm

The META case is the new one, and it is a rendering bug, not just a reading error

The other instances are analysts quoting a wrong multiple. META's is worse: the fair value and the trim were computed on EPS from two different fiscal years and then printed side by side. Nothing in either number is individually wrong. The comparison is meaningless, and the site renders it as an actionable pair.

Rule addition: a fair value and a trim must be stated on the SAME EPS basis, and the basis must be written down. When a trim is expressed as a multiple, record which fiscal year's EPS it multiplies. A multiple without a stated basis is not a level.

Why 28x ttm keeps winning

Three files have now independently chosen a trailing multiple for the trim specifically to escape this field (INTU, DT, and VICI's dollar-form AFFO trim). That is not a workaround any more — prefer ttm, or an explicitly-labelled forward year, whenever the vendor forward cannot be reconstructed from issued guidance.