How the Trade Finder ranks suggestions
The Trade Finder doesn't return every legal trade — that's noise. It returns the trades both sides actually benefit from. Here's the math.
Step 1: Per-team starting-lineup expected points
For each team we greedy-fill the league's roster slots (QB / RB / WR / TE / FLEX / SUPERFLEX / K / DST) with the highest ROS-projected player on the roster. Sum = SLEP.
Step 2: Position surplus / need
Per position, position_strength = sum(top_K_at_pos) − league_median(top_K_at_pos). Positive = surplus (tradeable). Negative = need (target).
Step 3: Candidate generation
For your team and each potential partner, enumerate 1-for-1, 2-for-1, and 2-for-2 packages where you have surplus at their need and they have surplus at yours. Capped at top-8 surplus assets per side to keep search bounded.
Step 4: Scoring
score = ΔSLEP_user + ΔSLEP_partner − α · |ΔSLEP_user − ΔSLEP_partner| − β · packagePenalty
Filters to min_mutual_gain > 0.5 AND |gap| < 100 ROS pts. Then we multiply by partner trade propensity (from the manager grader) so high- trading GMs surface first.
Why this beats raw "trade value"
Most trade calculators score in points. We score in *mutual lineup gain*. A 2-for-1 dumping bench depth into a star RB might look fair on a value calculator but flunks here unless both starting lineups improve.