GTS Bet Assessment Calculations
- 1 Summary
- 2 Assessment against selection status and price
- 3 Assessment against liabilities and limits
- 4 What is the Maximum Allowed Stake?
- 5 Player Bet Factor
- 6 Liability Reservation
- 7 Fixed Multiple Number of Winner Markets
- 8 Dynamic Number of Winner Markets
- 9 Fallback when Market Type Information is Missing
Summary
This document explains how GTS Bet Assessment assesses bets, and how it calculates its responses.
Bet assessment supports the following features:
Singles, Multis and System bets with Static Stake Apportionment
Separate liabilities and limits for PreMatch and InPlay
Liability Reservation
Multiple Number of Winner Markets
Dynamic Number of Winner Markets
Bet Delay
Assess a bet against the current status of the selection(s)
Assess a bet against the current price of the selection(s)
Assess a bet against per-player liability limits - limit set per user on a liability or risk that punter can have per one selection of the market. If the limit is exceeded every further bet on that selection by the punter will be rejected. The punter risk is multiplied by the punters individual Bet Factor. Example: With a punter risk limit of 100 Euros, the punter risk stands at 100 Euros on the market with a Bet Factor of 1, 200 Euros with Bet Factor 2 and 50 Euros with Bet Factor 0.5.
Assess a bet against market-level liability limits - limit set on the overall liability on each market. It determines the maximum amount a sportsbook is willing to lose or take risk on any selection across all customers. If that limit is exceeded every further bet on that market will be rejected unless the limit is increased or liability will decrease.
Assess a bet against per-bet maximum stake limits - the maximum allowed stake per user allowed per one bet, regardless if it's single or multibet. The stake limit on the market is multiplied by the punters individual Bet Factor. Example: With a stake limit of 100 Euros, the punter can bet maximum 100 euros with Bet Factor 1 but 200 Euros with Bet Factor 2 and 50 Euros with bet factor 0.5
Player's bet factor - an individual percentage of a limit attached to each customer. By changing the bet factor we can decrease or increase the betting limits for each specific customer individually. By default every customer BF is 1, meaning that if Limit Per Player is set to 100 Euros and stake limit is set to 100 Euros then the customer will have the same limits. However if we change a customer's BF to 0.5 then limits for that player would be cut to 50%, so new limits are 50 Euros.
Assessment against selection status and price
Selection status check
If the selection or all selections in multi bet are opened then selection(s) price(s) and liabilities will be checked
If the selection or any of the selections in multi bet is suspended/closed then the bet is rejected with the reason suspended/closed
Selection price check
The selection price check is done based on the priceChangeRule value sent in the bet assessment request.
AcceptAny
- if the selection price or all selections prices in multi and system bet are the same or changed in any direction within the configured threshold then accept bet if it doesn't breach any liability limitsAcceptHigher
- if the selection price or all selections prices in multi and system bet are the same or have become higher within the configured threshold then accept bet if it doesn't breach any liability limitsAcceptNone
- if the selection price or any selection price in multi and system bet changes then accept bet if it doesn't breach any liability limits
If priceChangeRule is not defined, there will be no price check made and assessment is done only against the current liability and limits on player and selection(s).
Assessment against liabilities and limits
Example 1 - Single Bet Assessment (Allowed)
A player strikes their first bet on a market, in this instance Chelsea to win the match. Other players have already placed bets on various selections of the market, corresponding to a market-level liability of -685 for this particular selection.
Leg | Stake | Odds | Bet 1 Liability | Per-Player Liability | Market-Level Liability | Player Limit | Player Bet Factor | Market Limit |
---|---|---|---|---|---|---|---|---|
Chelsea Win | 10 | 25 | =10 - (25 * 10) = -240 | 0.00 | -685 | -500 | 1.0 | -1000 |
| Bet 1 | Per-Player Liability | Market-Level |
---|---|---|---|
Existing Liability |
| 0 | -685 |
New Liability | -240 | -240 | -925 |
Liability Limit |
| -500 | -1000 |
Assessment | ALLOW | ALLOW : -500 < -240 | ALLOW: -1000 < -925 |
Example 2 - Single Bet Assessment (Rejected)
The player immediately tries to place another 10 Euro bet on this market, again on Chelsea to win the match. Note that the liability from the first bet has now altered both the per-player liability and the market-level liability. As such, the market limit is breached and so the bet is assessed as not allowed.
Leg | Stake | Odds | Bet 2 Liability | Per-Player Liability | Market-Level Liability | Player Limit | Player Bet Factor | Market Limit |
---|---|---|---|---|---|---|---|---|
Chelsea Win | 10 | 25 | =10 - (25 * 10) = -240 | -240 | -925 | -500 | 1.0 | -1000 |
| Bet 2 | Per-Player Liability | Market-Level |
---|---|---|---|
Existing Liability |
| -240 | -925 |
New Liability | -240 | -480 | -1165 |
Liability Limit |
| -500 | -1000 |
Assessment | REJECT | ALLOW : -500 < -480 | REJECT : -1000 > -1165 |
What is the Maximum Allowed Stake?
The Assessment service calculates the maximum stake that the bet could have in order to not breach the limit. Often this value is returned to the customer, and auto-populated in their bet slip so that they can immediately place the bet at a reduced stake in case their stake is not allowed.
Note about Rounding
We do not applying rounding to the final maximum allowed stake as this would incorrectly assume that we know the minimum unit size of bet able to be placed by the calling betting platform. Theoretical minimum unit sizes :
1 cent
25 cents
1,000 satoshis (fraction of a bitcoin)
Instead, we return the calculated decimal value and provide the assertion that the figure is accurate to at least 10 significant figures. It is up to the caller to round this value down to the nearest unit that makes sense to them.
Example 3 - Maximum Allowed Stake Calculation ( Single Bet )
| Per-Player Liability | Market-Level |
---|---|---|
Assessment | ALLOW : -500 < -480 | REJECT : -1000 > -1165 |
Existing Liability | -240 | -925 |
Maximum Allowed Liability* | 500 - 240 = 260 | 1000 - 925 = 75 |
Maximum Allowed Stake (for each Liability) | 260 / 24 = 10.83 | 75 / 24 = 3.12 |
Maximum Allowed Stake | Min (10.83, 3.12) = 3.12 |
*for clarity’s sake i have removed the double negatives and am displaying magnitudes only. The actual calculation is -1000 - -925 = -75
The odds for the selection are 25, meaning that the liability is 24 times the stake. Only -75 extra liability is allowed before the Market-level limit is reached, thus the punter may only place a 3.12 bet on this selection at this time.
Bet Types and Stake Apportionment
Singles, Multis and System Bets can be assessed. We assess each leg (selection) individually, and if any of the legs breach their corresponding limit the bet is rejected.
Singles are straightforward as they consist of only one leg, and the full stake of the bet is assigned to that leg.
Multis consist of multiple legs, and each leg is assessed against the corresponding limits set for each selection. In order to do this, for each leg we must calculate the proportion of the bet’s total stake that should be assigned to each leg. We call this apportionment, please see this page for examples and details of the apportionment algorithm.
System Bets can be considered as a bundle of individual multis - there is one multi for each combination that makes up the System Bet. For the purposes of assessment, we also need to calculate how much stake should be assigned to each leg (noting that each leg may be a participant in many of the constituent multis). Please see this page for examples and details of the system bet apportionment algorithm.
Regardless of the type of bet to be assessed, we end up with a list of legs, and their corresponding apportioned stakes. These are the main inputs used for bet assessment and the calculations are applied in the usual way.
Example 4 - Multi Bet Assessment (Multi, Rejected)
In this example we have a 3-leg Multi. The original stake is 100, and the apportionment algorithm has distributed the stake among the 3 legs based on the price of each leg. The corresponding takeout is calculated as per usual as Price * Apportioned Stake.
Note I have included the calculated apportionment factor in this table as well for reference. This is because it is required later to calculate the maximum allowed stake (see example 5, below)
Leg | Selection | Price (when struck) | Apportionment Factor (Ak) | Apportioned Stake | Takeout |
---|---|---|---|---|---|
1 | Market 141515 : Selection Home | 1.5 | 0.12 | 12.00 | 18.00 |
2 | Market 157967 : Selection Draw | 6.5 | 0.5545 | 55.45 | 360.42 |
3 | Market 131093 : Selection 4 or More Goals | 3.0 | 0.3255 | 32.55 | 97.65 |
Here are the corresponding Liabilities and Limits for each of the 3 legs. In this example, note that Leg 2 already has pre-existing player liability of -400 while leg 3 has existing liability of -450 and a low market-level limit set.
Leg | Stake | Odds | Per-Leg Liability | Per-Player Liability | Market-Level Liability | Player Limit | Player Bet Factor | Market Limit |
---|---|---|---|---|---|---|---|---|
1 | 12.00 | 1.5 | = 12.00 - 18.00 = -6.00 | 0 | -430 | -500 | 1.0 | -500 |
2 | 55.45 | 6.5 | = 55.45 - 360.42 = -304.97 | -400 | -600 | -500 | 1.0 | -1000 |
3 | 32.55 | 3.0 | = 32.55 - 97.65 = -65.10 | 0 | -450 | -150 | 1.0 | -500 |
Leg 1 will not breach any limits as its liability is relatively low. Leg 2 will breach the player limit, while leg 3 will breach the market limit. Because 1 or more legs breached the corresponding limit, the bet as a whole is rejected.
| Leg 2 | Per-Player Liability | Market-Level |
---|---|---|---|
Existing Liability |
| -400 | -600 |
New Liability | -304.97 | -704.97 | -904.97 |
Liability Limit |
| -500 | -1000 |
Assessment | REJECT | REJECT: -500 > -704.97 | ALLOW: -1000 < -904.97 |
| Leg 3 | Per-Player Liability | Market-Level |
---|---|---|---|
Existing Liability |
| -0 | -450 |
New Liability | -65.10 | -65.10 | -515.10 |
Liability Limit |
| -150 | -500 |
Assessment | REJECT | ALLOW: -150 < -65.10 | REJECT: -500 > -515.10 |
Example 5 - Maximum Allowed Stake (Multi)
The Maximum Allowed Stake is calculated for each leg based on the apportioned stake, price and remaining allowed liability.
Remember that when the multi was apportioned, the apportionment factors were calculated in order to go from original bet stake to apportioned leg for each leg. These are required again here in order to go from maximum allowed apportioned leg stake to maximum allowed bet stake.
One final note is that in this example, 2 of the 3 legs are rejected. Each leg has its maximum allowed stake calculated, and the final result is the minimum of these.
| Leg 2 Per-Player Liability | Leg 3 Market-Level |
---|---|---|
Assessment | REJECT: -500 > -704.97 | REJECT: -500 > -515.10 |
Existing Liability | -400 | -450 |
Maximum Allowed Liability* | 500 - 400 = 100 | 500 - 450 = 50 |
Apportionment Factor | 0.5545 | 0.3255 |
Maximum Allowed Apportioned Leg Stake | 100 / (6.5-1) = 18.18 | 50 / (3-1) = 25.00 |
Maximum Allowed Bet Stake (per leg) | 18.18 / 0.5545 = 32.79 | 25.00 / 0.3255 = 76.80 |
Maximum Allowed Stake | Min (32.79, 76.80) = 32.79 |
*for clarity’s sake i have removed the double negatives and am displaying magnitudes only
To quickly check this is the correct answer, say the player now attempts to place the same bet but with the suggested stake of 32.79 instead of the original 100.
Leg 2 was the primary reason for the maximum allowed stake of 32.79, and you can see below that leg 2 now equals the remaining liability limit and therefore the bet is now approved.
Leg | Apportioned Stake | Takeout | New Liability | Allowed Player Liability | Allowed Market Liability | Assessment Result |
---|---|---|---|---|---|---|
1 | 3.94 | = 1.5 * 3.94 |
| -50 | -70 | ALLOW |
2 | 18.18 | = 6.5 * 18.18 | =18.18 - 118.18 | -100 | -400 | ALLOW |
3 | 10.67 | = 3.0 * 10.67 | = 10.67 - 32.02 | -150 | -50 | ALLOW |
Player Bet Factor
Bet Factor is applied to player level liability limit and it affects max allowed stake of the specific player. It is player specific and applied to every sport. By default bet factor is 1.0.
Example 6 - Maximum Allowed Stake (Different Bet Factors)
Leg | Odds | Player Limit | Market Limit |
---|---|---|---|
Chelsea to win | 2.00 | 1000 | 10 000 |
Per-Player Liability | Market-Level Liability | Player Bet Factor | Player Limit of this Player | Max Allowed Stake |
---|---|---|---|---|
0 | 0 | 1.0 | 1000 * 1.0 = 1000 | 1000 |
0 | 0 | 5.0 | 1000 * 5.0 = 5000 | 5000 |
0 | 0 | 0.1 | 1000 * 0.1 = 100 | 100 |
0 | -9000 | 1.5 | 1000 * 1.5 = 1500 | 1500 |
-1000 | -2000 | 2.0 | 1000 * 2.0 = 2000 | 1000 |
Liability Reservation
Bet Assessment is only one part of a betting platform’s per-bet validation. Often a Betting Api will check a bet against current prices, trading status and liabilities during validation. If a bet is to be delayed, further validation may take place after an artificially-induced delay.
Some time will therefore pass between when a bet is assessed and when it is placed. During this time, the player might place another bet on the same selection (especially in the case of bet slips where the player submits multiple bets at once). Indeed some players may purposefully break a large bet down into multiple smaller bets in order to bypass liability assessment. For these reasons when a bet is assessed, its implicit liability is reserved within the Risk Assessment system.
Note that reserved liabilities act against the player liability, but not the market liability.
Releasing Reserved Liability
Often a bet that passes the risk assessment check is then placed shortly thereafter. When the confirmed bet is received by Liabilities, the reserved liability is converted directly into realised liability.
In some cases however, a bet that is assessed may not be subsequently placed at all. For example, the bet may fail the selection price check after bet delay. In this case, Liabilities is left holding the reserved liability and this needs to be released, or future bets by the player maybe incorrectly rejected.
By default, liability from any bet that is reserved but not placed within 30 seconds is automatically released. However if the Betting Api wants to do so, they can explicitly release the reserved liability sooner by calling /Release/ on the Assessment Api.
Fixed Multiple Number of Winner Markets
As explained here, markets that have a fixed multiple number of winners get their liability adjusted by the Liabilities engine. For Bet Assessment, we divide the limit by the number of winners instead. Why the difference? There are a couple of reasons:
If you know that a market will have three winners, you probably don’t want to max out the entire liability on a single selection because that then prevents you from taking bets on the other selections, even those that haven’t yet taken any bets.
It makes it easier to deal with partial settlement because when we want to take a new bet we need only calculate the new liability on that selection and not worry about the other selections, irrespective of whether they have already been settled.
Example 7 - Assessment with Multiple Number of Winners
In this example, the bet is on a Double Chance market, which has 2 winners. There is existing player and market-level liability but no limits have yet been breached.
Leg | Stake | Odds | Bet Liability | Existing Player Liability | Existing Market Liability |
---|---|---|---|---|---|
Chelsea Win + Draw | 10 | 25.0 | (10 - 250) = -240 | -100 | -350 |
For Bet Assessment, the limits are divided by 2 for each selection in the market. The remaining assessment calculations remain the same, but using this adjusted effective limit.
| Bet | Per-Player Liability | Market-Level |
---|---|---|---|
Existing Liability |
| -100 | -350 |
New Liability | -240 | -340 | -590 |
Limit |
| -500 | -1000 |
Fixed Number of Winners |
| 2 | 2 |
Effective Limit |
| -500 / 2 = -250 | -1000 / 2 = -500 |
Assessment | REJECT | REJECT: -250 > -340 | REJECT : -500 > -590 |
Example 8 - Maximum Allowed Stake with Multiple Number of Winners
The Maximum Allowed Stake calculation remains the same, albeit using the effective limits are per above:
| Per-Player Liability | Market-Level |
---|---|---|
Assessment | REJECT: -250 > -340 | REJECT: -500 > -590 |
Existing Liability | -100 | -350 |
Maximum Allowed Liability* | = (250 - 100) = 150 | = (500 - 350) = 150 |
Maximum Allowed Stake | 150 / 24 = 6.25 | 150 / 24 = 6.25 |
*for clarity’s sake i have removed the double negatives and am displaying magnitudes only
Dynamic Number of Winner Markets
For Bet Assessment, the case of dynamic number of winner markets is slightly different. As explained here, these markets are treated as though each selection is their own independent market. The liability is calculated on a per-selection basis (selection stake - selection takeout). Additionally, the full liability limit is offered for each selection independently.
Since Liabilities has already calculated the existing liability to be per-selection, and the provided limit is interpreted as per-selection as well, no other adjustments are required to be made during Bet Assessment.
Fallback when Market Type Information is Missing
Due to technical issues, there may be temporary periods where the market type information is not available. In this case, there are two options considered:
reject all bets on the market
fallback to the most common case of one fixed winner.
Because rejection of bets is deemed more likely to adversely impact the bookmaker than allowing assessment to continue by assuming the most common case scenario, Bet Assessment assumers the latter and continues to perform assessment. There is a small possibility that during this time bets may surpass the liability limit that would have otherwise been in place but most bets will be assessed correctly.