TENNISEDGE.GG

F. Cobolli vs Y. Hanfmann — Prediction & Analysis

Montreal · ATP Montreal - 1/32-finals · Aug. 4, 2026 · 23:30 UTC

TennisEdge's AI model finds no betting value in F. Cobolli vs Y. Hanfmann (Montreal on 2026-08-04) — the market is efficient, with F. Cobolli favoured at 1.67.

Surface hard Odds F. Cobolli 1.67 · Y. Hanfmann 2.20

Verdict: no bet

The model found no value at current prices — the market has this one priced about right. That verdict is part of the public record too.
Profiles: F. Cobolli · Y. Hanfmann · head-to-head record · Montreal

Model probabilities

Independent estimates of who wins, each from a different method. The blend is what the bot prices against the market.

Method F. Cobolli Y. Hanfmann
Elo
ratings-based, surface-weighted
52.7% 47.3%
Machine learning
29-feature gradient-boosted model
58.0% 42.0%
Serve / return
point-by-point simulation
40.0% 60.0%
Blend
what the bot actually prices off
52.7% 47.3%
Market implied
de-vigged from the opening odds
56.8% 43.2%

We publish how well these score against the closing market, including where they lose: how accurate are tennis predictions?

Elo ratings

PlayerSurfaceEloRecordMatches
F. Cobolli clay1896 132–82214
Y. Hanfmann clay1810 123–82205

Our own ratings, computed from match results since 2018. Players with fewer than 5 rated matches are omitted rather than shown at a provisional starting value. Last updated July 15, 2026.

Recent form

F. Cobolli

L R. A. Burruchaga 0 - 2 July 15, 2026
L A. Fery 0 - 3 July 8, 2026
W A. De Minaur 0 - 3 July 6, 2026
W K. Khachanov 2 - 3 July 4, 2026
W J. Duckworth 1 - 3 July 2, 2026

Y. Hanfmann

W B. Bonzi 1 - 2 Aug. 3, 2026
L Q. Halys 0 - 2 July 24, 2026
W S. Baez 2 - 0 July 23, 2026
W M. Trungelliti 0 - 2 July 22, 2026
W L. Neumayer 0 - 2 July 20, 2026

All Aug. 4, 2026 results & picks →

Full analysis

F. COBOLLI (A) vs Y. HANFMANN (B) — ATP Montreal, hard, 1/32-finals

═══ MODELS vs MARKET ═══
  ELO:              A 52.7%
  ML:               A 58.0%
  Model (blend):    A 52.7%
  Betfair ML:       A 1.71 / B 2.32  → A 59.7% comm-adj (the executable baseline)
  Book:             A 1.67 / B 2.20  → A 56.8%
  Pinnacle:         A 1.69 / B 2.27  → no-vig A 57.3% (fetched 10:55Z, ~fresh)
                    drift_a_pp +0.53 → sharp money drifting mildly TOWARD Cobolli
  Sim (baseline):   A 40.0% — hard divergence from ELO/ML/market/sharp (see MARKET CHOICE)

Market, sharps and ML cluster A 57–60%; ELO is the lone dissenter at 52.7%. Cobolli is
ranked 22 vs Hanfmann 59, yet ELO gives him only 52.7% — no farmed-rating flag on either
side (Hanfmann's clay wins came against 1750–1790 opponents, legitimate), rather Cobolli's
ELO is weighed down by a poor clay stretch after Roland Garros. ELO/rank divergence is
mild; ELO is credible but is the outlier here.

═══ RECENT FORM (5 most recent each) ═══
F. COBOLLI (24, rank 22) — LAST MATCH 07-15, i.e. 20 DAYS IDLE
  07-15 Umag       clay  1/8  LOST  Burruchaga (1782 Strong)  2-6 4-6  — beaten in straights
  07-08 Wimbledon  grass QF   LOST  Fery (1766 Strong)        4-6 6-7 0-6
  07-06 Wimbledon  grass 1/8  WON   De Minaur (1907 ELITE)    GRIND (tb) — over-performance
  07-04 Wimbledon  grass 1/16 WON   Khachanov (1788 Strong)   GRIND (5 sets, 2 tb)
  07-02 Wimbledon  grass 1/32 WON   Duckworth (1571 Avg)      GRIND (2 tb)
  Shape: FADING. The Wimbledon QF run (GRIND wins over Elite/Strong) was genuine
  over-performance, but it is now a month old and the most recent data point is a
  straight-sets loss to a 1782 on clay. Nothing since.

Y. HANFMANN (34, rank 59) — played YESTERDAY, at this venue
  08-03 Montreal   hard  1/64 WON   Bonzi (1760 Strong)       3 sets, no tb
  07-24 Kitzbuhel  clay  SF   LOST  Halys (1796 Strong)       4-6 6-7
  07-23 Kitzbuhel  clay  QF   WON   Baez (1789 Strong)        6-3 6-1 DOM — over-performance
  07-22 Kitzbuhel  clay  1/8  WON   Trungelliti (1750 Strong) GRIND (6-7)
  07-20 Kitzbuhel  clay  1/16 WON   Neumayer (1698 Strong)    GRIND (6-7)
  Shape: STABLE. DOM over Baez (1789), SF run at Kitzbuhel, then converted R1 here on the
  hard court. Grinding but beating Strong-bracket opponents consistently.

═══ PATH & SHARPNESS (Step 1b) ═══
  Hanfmann: 1 match at this venue, ON this surface, WON yesterday → match-sharp,
            conditions-adjusted, timing grooved.
  Cobolli:  seeded direct entry, FIRST match at the venue, 20 days since any match, and
            his last competitive tennis was on CLAY → rust risk + TRANSITION (clay→hard),
            depressed level and wider margin variance in match one.
  This path read cuts AGAINST the favourite, i.e. against the side the schedule story
  would otherwise favour. It is two-sided with the fatigue read below, not additive to it.

═══ FATIGUE (Step 2) ═══
  Cobolli:  matches_14d 0, court time 0, no last-match date → fully rested (but rusty).
  Hanfmann: matches_14d 4, matches_7d 1, 456 min / 12 sets, back_to_back 2, last 08-03.
  EXTREME SPOT: won a 3-SET match YESTERDAY → calibrated −4.5pp hangover haircut applies
  (surface-agnostic; extra-set toll only, applied once, not stacked with cumulative load).
  Age modulation: Hanfmann is 34 (≥30, recovers slowly) → harden one tier. Real
  disadvantage, not context.
  BUT: this is precisely the visible-fatigue story markets over-price, and here it is
  offset by Hanfmann being the played-in, surface-adjusted player facing a 20-day-idle
  opponent walking in off clay. Directionally pro-Cobolli, magnitude contested — and per
  G1 it may only confirm or kill an edge, never create one.

═══ NARRATIVE (Step 3) ═══
  Let-down: Cobolli lost the Roland Garros FINAL on 06-07 — 58 days ago, far outside any
            let-down window. None active.
  Title recency: none for either player in the window.
  Venue momentum: Montreal appears only in Hanfmann's list (1-0 this week).
  Surface transition: BOTH came off clay; Hanfmann has already played through it here,
            Cobolli has not. Transition risk sits on Cobolli, which is also why a tight
            Cobolli cover is unattractive (looser margins in match one cut both ways).

═══ MARKET CHOICE ═══
  Sim validation (Step 4b): baseline sim has Hanfmann favourite at 60.0% (SPW A .583 /
  B .593) against ELO 52.7%, ML 58%, market 59.7%, Pinnacle 57.3% — a ~17pp divergence, so
  the sim's INPUTS are the broken number, not the market. Cause is visible: Cobolli's
  serve/return average is dragged down by a bad clay stretch and 5-set grass marathons,
  while Hanfmann's was built on a clay SF run vs 1698–1789 opponents; neither is
  opponent-adjusted or hard-court weighted. Calibrated the one input I can defend:
  spw_a 0.583 → 0.613 (used 0.613, clamped: FALSE) → win A 55.7%, landing inside the
  ELO(52.7)–ML(58)–Pinnacle(57.3) band. All markets below are priced off THAT single
  coherent distribution.

  Edges vs commission-adjusted Betfair (0.95 factor):
    ML  A  1.71 → imp 59.7%  vs sim 55.7%  = -3.98%   (min 1.884, price is 1.71) ✗
    ML  B  2.32 → imp 44.4%  vs sim 44.3%  = -0.11%   (min 2.372, price is 2.32) ✗
    AH  A -1.5 @1.92 → imp 53.4% vs 51.0%  = -2.40%   ✗
    AH  B +1.5 @1.98 → imp 51.8% vs 49.0%  = -2.75%   ✗
    TOT O 22.5 @1.91 → imp 53.6% vs 49.2%  = -4.45%   ✗
    TOT U 22.5 @2.02 → imp 50.8% vs 50.8%  = +0.03%   ✗ (nil)
  AH: B +1.5 @ 1.98
  Sharp cross-check (Pinnacle, GAMES lines, same scale): AH A -1.5 no-vig 51.3% vs my
  51.0% — near-identical, corroborating the calibration and confirming there is no margin
  edge. Totals no-vig UNDER 48.8% vs my 50.8% — sharps are slightly MORE over-leaning than
  me, so the only nominally non-negative bet (Under 22.5) is contradicted by the sharp
  line. That kills it outright rather than making it marginal.
  Every priced market is negative or nil. Nothing to express.
  refutation_check: n/a — PASS decision, no web access taken.

═══ GATES ═══
GATES
  G1 edge-origin: [FAIL] — pre-narrative best edge is +0.03% (Under 22.5) and every other
    market is negative; A-side ML is -3.98% at the executable 1.71 vs min 1.884. Nothing
    reaches even the 3% probe band. The ONLY route to a Cobolli edge is adding the -4.5pp
    Hanfmann hangover haircut, which is a fatigue adjustment and is forbidden from
    creating the staked edge.
  G2 consensus:   [tier: n/a — no bet] — ML/market/Pinnacle agree A 57-60%; ELO dissents at
    52.7%; calibrated sim sits at 55.7%. Broad consensus with the price = classic no-edge.
  G3 fatal-risk:  [none — no bet] — margin numbers encoded via the sim calibration rather
    than asserted; Pinnacle agrees with them, so no unencodable risk to flag.

═══ VERDICT: PASS ═══
The interesting feature of this match is real but unbettable. Hanfmann carries a genuine
extreme fatigue spot (3-set win yesterday, age 34, 4 matches in 14 days), which is exactly
the kind of signal that would justify backing Cobolli — except the market has already
priced Cobolli at 1.71 on the exchange, which demands 59.7% while every trustworthy
probability estimate sits at 52.7–58%. Buying a fatigue narrative at a price that already
assumes it is how the audited losses were made. On the other side, Hanfmann at 2.32 is
within 0.1% of fair, and the qualitative case for him (match-sharp, already through a
round on this surface, facing a 20-day-idle opponent arriving off clay) is precisely why
his price is not longer. The calibrated distribution agrees with Pinnacle on the handicap
to within 0.3pp and the sharps contradict my only non-negative total. No edge in any
market — pass.