Skip to content
Back to guides
Model checks

A UFC Round-Simulation Brick You Can Fork

Shark Snip Editorial 12 min read

Read the price, role, and market first

Build a UFC round-by-round Monte Carlo simulator in the browser. Style matchups, takedown rate, finish probability, and round-prop edges.
17 sections
A UFC Round-Simulation Brick You Can Fork cover art

UFC prop markets are some of the softest live markets in legal U.S. sportsbooks. The lines move on tiny volume, the books rely on one or two providers (mostly Don Best and an in-house style matrix), and the public bets parlays and method-of-victory props using vibes. A round-by-round simulation engine, even a modest one, finds bettable edges on every card if you know what to look for. This post walks through a forkable UFC round-simulation brick on Tinker — what it computes, what features feed it, and how to use the output without blowing up your bankroll.

What the brick does

For each scheduled fight, the brick takes both fighters' historical statistics, the fight's scheduled rounds (3 or 5), and a small set of priors (cage size, altitude, late notice, weight cut concerns) and runs 10,000 Monte Carlo simulations of the fight at the round-by-round level. Each simulation produces:

  • Round-by-round significant strikes landed and attempted, per fighter.
  • Takedown attempts, completions, and time of takedowns.
  • Submission attempts and finishes.
  • KO/TKO events, with round and time.
  • Decision scoring if the fight goes the distance.

From those 10,000 trajectories, the brick aggregates probabilities for every commonly-priced prop:

  • Method of victory (KO/TKO, submission, decision) per fighter.
  • Round of finish probabilities.
  • Total fight time over/under (with implied vig-free probabilities).
  • Significant-strike props per fighter (over/under thresholds).
  • Takedown props per fighter.
  • Will the fight reach round 2/3/4 probabilities.
  • Joint props: fight goes the distance + Method X + Round Y combinations for same-fight parlays.

The point of the brick is the joint distribution

Most public UFC models price props one at a time. The sportsbook does too, with a generic correlation matrix. That means same-fight parlays are usually mispriced by 5 to 15 percent of their fair value — sometimes in your favor, often against. The simulation gives you the full joint distribution, so you can spot when "fight goes the distance + Fighter A wins by decision" is priced as two independent props when in reality they are 92% correlated.

Core data inputs

The brick consumes the following per-fighter inputs from the public UFC Stats archive:

  1. Career significant strikes per 15 minutes (SLpM × 15). Standardized to fight time so we can compare 3-round to 5-round records cleanly. Top strikers like Max Holloway and Israel Adesanya land 5.5 to 7.0 significant strikes per minute (so 82–105 per 15). Wrestlers like Khabib (historically) sat at 3.5–4.0 SLpM.
  2. Significant strikes absorbed per 15 minutes (SApM × 15). Defensive quality, post-style adjustment.
  3. Takedowns landed per 15 minutes (TDpM × 15). Common range 0 to 6.
  4. Takedown defense percent (TDD %). 50% is average, 80%+ is elite.
  5. Submission attempts per 15 minutes (SubAtt × 15).
  6. KO/TKO percent of wins. Style proxy.
  7. Decision percent of fights. Inverse style proxy — high decision rate signals a fighter who does not finish.
  8. Reach and height differential.
  9. Orthodox vs southpaw stance.
  10. Last-3-fight rolling versions of each of the above. Recent form often beats career average.

The brick also keeps a small lookup of style adjustments:

  • Orthodox vs southpaw: roughly +5% strikes thrown for the southpaw and +3% for the orthodox over a neutral matchup, due to lead-leg kick opportunities for both. Net effect on totals is small.
  • High-takedown wrestler vs low-TDD striker: time distribution shifts to 60% grappling, total significant strikes drops by 25–35%, submission probability rises 8–12%.
  • Two strikers with high defense: standing time approaches 90%, but total strikes can still be low because clean entries are rare. Decision rate spikes.
  • Pressure-fighter vs counter-puncher: counter-puncher absorbs more strikes than their SApM suggests; total significant strikes overshoots the naive average.

The simulation loop

For each round of each simulation, the brick:

  1. Samples a time-distribution split (standing vs clinch vs ground) using the style-weighted prior.
  2. For each 30-second tick of that round, samples KO hazard, submission hazard, and significant strike Poisson draws using the prior rates.
  3. If a finish event fires, terminates the simulation, records method and round.
  4. If no finish, accumulates strikes, takedowns, and sub attempts to the round totals.
  5. At end of round, scores it 10-9 unless one fighter has dominantly outlanded (10-8) or the round was a 10-10 toss-up (uncommon, ~3% of rounds in elite matchups).
  6. After all scheduled rounds, applies the scorecard.

The whole simulation for one fight takes about 1.2 seconds in the browser on a modern laptop. Sub-second on a desktop with WebAssembly enabled. The brick caches simulation results per fight-version (data hash) so re-querying the same card is instant.

Why the simulation isn't more complex

You could model individual punch types, fatigue per minute, corner adjustments between rounds, and referee tendencies. Those are real factors. They are not bettable factors at the precision public UFC priors will support. A model with 30 features and 10,000 simulations beats a model with 200 features and the same simulation count because the extra 170 features are noise relative to the data we have. Keep the brick simple, trust the joint distribution, and resist the temptation to engineer features the underlying data can't support.

Worked example: Cejudo vs Aldo (hypothetical rematch)

Setup: 3-round bantamweight fight, Cejudo as orthodox wrestler (TDpM 3.8, TDD 78%, SApM 2.4), Aldo as orthodox striker (SLpM 4.2, SApM 2.1, KO/TKO 47% of wins). The sportsbook prices:

  • Fight to go the distance: +110.
  • Total significant strikes over 110.5: -115.
  • Cejudo by decision: +180.
  • Cejudo takedowns over 2.5: -130.

Brick output after 10,000 simulations:

  • Distance probability: 64% (fair price -178, market is +110, big edge).
  • Total significant strikes mean: 98 (fair under -115, market under -115 fair, small edge).
  • Cejudo decision probability: 41% (fair price +144, market +180, edge).
  • Cejudo takedowns mean: 3.4, P(over 2.5) = 58% (fair -138, market -130, push).

Two bettable edges (distance, Cejudo by decision), and they correlate at about 0.81 — same-fight parlay at +320 (market) vs fair at +260. Real value, but size the parlay smaller than the sum of the two single bets because correlated outcomes don't carry the full diversification benefit. Use Kelly on the joint, not on the legs.

Forking the brick

The brick is published on Build as a forkable starting point. Once you fork:

  1. Replace the data pull with your own provider (we default to UFC Stats; some bettors prefer Tapology or a custom scraper).
  2. Add features the base brick doesn't include — fight camp changes, late-notice flag, weight-miss penalty.
  3. Tweak the style-adjustment matrix to your priors. The brick exposes the matrix as JSON.
  4. Increase simulation count if you want tighter standard errors on long-tail props.
  5. Publish your fork back to the catalog so other bettors can fork yours.

The whole pipeline runs client-side; nothing uploads. If you want to backtest the fork against last season's UFC card-by-card, the brick has a backtest mode that replays every fight in the database against the simulation output and tabulates ROI by prop type. Pair it with the reproducible backtest checklist to keep the workflow honest.

Where bettors get UFC props wrong

  1. Treating significant-strikes props as additive. If Fighter A's o-50.5 sig strikes is -110 and Fighter B's o-45.5 is -110, the joint "both over" is not -110 × -110. Style determines time, time determines strikes, and the two strikes counts are positively correlated. The simulation prices this correctly.
  2. Ignoring late-notice replacements. A fighter on five-day notice has measurably lower output across every category. The brick has a flag for this; use it.
  3. Trusting style matrices from non-UFC fights. Bellator and ONE data is noisier; some fighters look very different against weaker opposition. Filter to UFC fights only for the rolling features unless the fighter has fewer than three UFC fights.
  4. Betting heavyweight totals like lightweight totals. Heavyweight finishes early roughly two-thirds of the time. The strikes-thrown distribution is short-tailed and lumpy. Different feature engineering, different simulation calibration.
  5. Same-fight parlay sizing as if legs were independent. The brick gives you the joint probability. Use it. Don't kelly-stake each leg separately and parlay.

Where this brick fits in your stack

The UFC sim is one brick in a stack. Pair it with a closed-form significant-strikes model for single-fighter strikes props, and use the joint distribution from the simulation for everything else. Track results per prop type on the picks dashboard and recalibrate the style matrix every two months. UFC card composition rotates fast — the prior that worked at lightweight in March may be wrong at heavyweight in May.

Calibrating against historical fights

The brick comes pre-calibrated against the last six years of UFC fight outcomes, but you can recalibrate on a subset for your priors. The flow:

  1. Pull all UFC main-card fights from a chosen date range.
  2. For each fight, run the simulation against the lines that closed at major sportsbooks at the time.
  3. Bin the simulated probabilities into 10 buckets and compare to actual outcomes.
  4. If a bucket is systematically over- or under-confident, adjust the corresponding component of the simulation (style-matrix weight, finish-hazard rate, time-distribution prior).
  5. Re-run and confirm calibration improves.

This is the same recipe as the broader calibration plots article, applied to simulation outputs instead of regression outputs.

Common miscalibration patterns

  • Finish rates overstated at heavyweight: easy to fix by reducing the KO hazard prior for HW.
  • Decision rates understated for fights with a champion: champions are slightly more decision-prone than the prior suggests; add a small "title fight" feature.
  • Strike-volume undershoot in opposite-stance bouts: stance multiplier needs to be slightly larger than the default 1.03.
  • Submission probability inflated for any BJJ black belt: black belts don't sub as often as the matrix expects in the modern UFC; reduce the prior.

Live in-fight updating

The brick can also run in live mode — after each round, plug in the actual round result and re-simulate the remaining rounds with updated priors:

  1. Round 1 ends. Input the strikes-thrown, takedown-attempts, and finish-attempt counts.
  2. The brick updates each fighter's effective rate using Bayesian shrinkage toward the round-1 observed values.
  3. Re-runs 10K simulations of rounds 2 through end with the updated priors.
  4. Outputs revised round-by-round and method-of-victory probabilities for the live market.

Live UFC props are notoriously slow to reprice between rounds, especially at smaller sportsbooks. The 30 seconds between rounds is enough to spot a +EV live bet if the brick is already loaded and warm.

Track record and what to expect

From running this brick against historical UFC cards, the realistic expectation is:

  • Method-of-victory props: ~57% ROI-positive at -110 in our backtests, but only when the simulation edge is >5%.
  • Distance-going props: ~54% hit on the bets where edge >3%.
  • Round-of-finish props: highly variable; play only when simulation gives >15% edge over implied.
  • Significant-strike props: see the closed-form strikes model article; the sim agrees with the closed-form 90%+ of the time and is mainly useful for joint pricing.
  • Same-fight parlays: where the sim delivers the most value; correlations are non-trivial and books mostly use independence priors.

Expect 8–15 bettable edges per UFC card. Most cards have at least one same-fight parlay edge worth a small Kelly fraction. Avoid prop chasing on the prelim card — data on lower-ranked fighters is thinner and the sim is less reliable.

Workflow integration

Final workflow once the brick is calibrated to your priors:

  1. Pull the upcoming card 2–3 days before bell.
  2. Run simulations for every fight.
  3. Cross-check single-fighter props against the closed-form model.
  4. Flag joint props (method + round, distance + decision-winner, double sig-strike overs) where the sim disagrees with implied by >5%.
  5. Bet at Kelly fractions, joint sizing for correlated bets.
  6. Log results and CLV per prop type via picks.
  7. Recalibrate the style matrix once per quarter or after a major rule change (e.g., point-deduction rule shifts).

Bottom line

UFC props are the most consistently soft market in legal sportsbooks, and a forkable in-browser simulation engine is the cleanest way to capture that. Fork the brick on Build, calibrate the style matrix to your priors, run 10K simulations per fight, and bet only the joint probabilities — not the marginals the book prices. The sim takes a second and gives you every prop on the card.

Bet responsibly — set limits, never chase losses.

UFC example board

A fight-night model should describe paths, not just winners. Islam Makhachev is the clean grappling-control example: takedown success, top time, and submission threat can all point in the same direction. Alex Pereira is the striking-power example where knockout equity can outrun minute-by-minute control metrics. Ilia Topuria and Tom Aspinall are useful pressure and early-finish examples because the model must respect both ceiling and fragility.

  • Grappler path: takedown entries, control time, opponent get-up rate, and submission exposure.
  • Striker path: knockdown power, defensive responsibility, five-round cardio, and judging volatility.
  • Market trigger: weigh-in misses, short-notice replacements, and camp-change rumors deserve their own line-move tag.
  • Prop filter: finish props need a different threshold from moneyline bets because time and method matter.

UFC update rules

Do not freeze a UFC take before weigh-ins. A bad cut, opponent change, missed limit, or short-notice travel spot can rewrite both the win probability and the finish probability. Keep the modeling workflow tied to fight-night modeling and review the price movement through CLV after the close.

Sport-specific model signals

Use names as evidence, not decoration. The useful SEO win is that Josh Allen, Ja'Marr Chase, Bijan Robinson and Puka Nacua and Chiefs, Bills, Eagles and Lions appear inside decisions, thresholds, and internal links instead of being dumped into a keyword list.

  • Prop EV example: Luka Doncic points or PRA at 32.5 should be checked against projected minutes, usage without key teammates, pace, spread, and back-to-back fatigue before price.
  • MLB: a Dodgers at Rockies first-five total of 5.5 should account for starter xFIP, K-BB%, handedness, Coors Field run environment, wind, bullpen rest, and umpire zone.
  • NHL: a Maple Leafs puck-line price at +160 needs confirmed goalie, 5v5 expected-goal share, special-teams edge, and empty-net probability before the margin bet makes sense.
  • UFC: an Islam Makhachev-style grappling favorite needs takedown entries, control time, get-up rate, and submission exposure; an Alex Pereira-style striker needs knockdown equity and round-by-round cardio risk.
  • DFS value example: NBA showdown builds need projected minutes, usage, salary, ownership, and late-swap flexibility before a star salary is worth paying.
  • Stack example: an NBA same-game entry with Doncic points, teammate assists, and opponent threes needs one coherent pace script instead of three unrelated legs.

The goal is not to mention every star. It is to show how the model changes when the example changes from Doncic to Shohei Ohtani, Igor Shesterkin, Connor McDavid, or Tom Aspinall. Revisit and update the board when lineups, minutes, starters, goalie confirmations, weigh-ins, or market prices change.

Research note board

Use this model-audit board to keep features, validation, and bet sizing from collapsing into one confidence score.

Model layerWhat to inspectExample inputDowngrade when
FeatureWhether the variable maps to the sport and marketJosh Allen role data or PPR price movementThe feature is a proxy for something you can measure directly
ValidationOut-of-sample error, CLV, calibration, missing dataChiefs market movement after injury newsWins come without beating the close or improving calibration
SizingBankroll, confidence interval, correlation, market limitCLV exposure compared with related ticketsMultiple bets repeat the same thesis at full stake

Prop OVER hit rate vs line distance from median

Empirical hit rate of OVER bets as the prop line moves away from the player projection median, measured in standard deviations. A line set 1sd below the median hits ~84% of the time — but books price the juice to match.

Breakeven win % at common American odds

The win rate you need to break even at each price. Pick odds shorter than -150 and you must win >60% just to stay flat — a hurdle most casual handicappers never sustain.

Frequently asked questions

How many simulations do I need per fight?
10,000 rounds per fight is the standard. With 10K simulations, the standard error on a 50% probability is about 0.5%, which is tighter than the typical sportsbook margin on UFC props (3–5%). 100K is overkill for most bets and just slows the iteration loop. 1K is too noisy — you can see the variance swing the recommended side back and forth on rerun, which is a sign you are under-sampling.
What is the right finish probability distribution to use?
Fit a competing-risks model to each fighter's historical data: for each minute of fighting time, what is the hazard rate of (a) KO win, (b) KO loss, (c) submission win, (d) submission loss, (e) decision-progress? Heavyweight finish rates are around 65% by fight end; flyweight is closer to 25%. Style modifies this dramatically — a wrestler vs a striker raises submission hazard from the wrestler and lowers KO hazard from the striker. Use historical fight-time-to-finish data from UFC Stats, not the broader MMA database, which mixes regional and Bellator finish rates.
How do I handle striker-vs-grappler style matchups?
Decompose each fighter into striker-share and grappler-share based on their last 8 fights' time distribution (standing vs in clinch vs on the ground). The match's expected time distribution is roughly a weighted blend determined by takedown attempts, takedown defense, and stand-up tendencies. A wrestler vs a striker will look like 65% grappling time if the wrestler is the better takedown artist; that flips the strikes-thrown and significant-strikes-landed expectations dramatically. The brick lets you toggle the time-distribution prior to see how sensitive each prop is.
Why simulate at all instead of using a closed-form prop model?
Closed-form models work for univariate props (over/under significant strikes for one fighter), but UFC has correlated props everywhere: total fight time, method of victory, round of finish, both fighters' strikes thrown, double-prop parlays. A simulation engine prices all of these jointly. For a single significant-strikes prop you can use the closed-form version in our sig-strikes prop article; for fight-of-the-night props, method-and-round, or any parlay across the same fight, you need the sim.

Build a free model in 60 seconds →

Go →
12m read time
10 players/teams
8 key angles
Angles in this read 6 angles

UFC style and market context

UFC modeling examples should connect style, cardio, takedown defense, finishing equity, and judging risk before leaning into a price.
Islam MakhachevAlex PereiraIlia TopuriaSean O'MalleyTom AspinallAmerican Top TeamCity KickboxingKings MMAAKATeam Alpha Maleclosing line valuetarget shareair yardsred-zone roleroute participation
A UFC Round-Simulation Brick You Can Fork data infographic
Chart view of the article's core numbers. Source: inline-lib-propHitRateLadder-ufc-round-simulation-brick.

Get picks in your inbox

One email, every slate — ranked edges, no touts. Unsubscribe any time.

Start free — pick a sport

Go →

We use cookies for essential site functionality. With your consent, we also use cookies for analytics and performance monitoring. See our Privacy Policy.