(1) Selections need to be passed in as a list of dictionaries called ‘selections’. The template near the bottom is there to be modified.
(2) Pass in the bankroll as a parameter of the function call at the very bottom.
(3) Pass in the maximum number of teams you wish to have in the multiples as ‘max_multiple’.
Say you have 5 selections, but don’t want to include any trebles, 4-folds, 5-folds. ‘max_multiple=2’ will then calculate optimal bet sizes only for singles & doubles.
If you only want to have singles pass in ‘max_multiple=1’.
If you pass in ‘max_multiple=5’ the algorithm will find all possible combinations (singles, doubles, trebles, 4-folds and the 5-fold) and the according optimal stakes sizes.
Obviously ‘max_multiple’ must not be greater than the number of selections.
The code works out of the box, but runtime is an issue! Since the number of combinations grow quadratically, the runtime explodes with an additional ‘max_multiple’ as variable.
Update: Thanx to @SmoLurks the python code now runs 30x faster!!!
In my previous articles we have already seen how the generalised Kelly Criterion can produce completely different results than the simplified Kelly formula that most bettors will use when there are multiple edges in the same game.
There are, of course, occasions when you might have multiple edges on different games, all taking place at the same time. The example below is one such situation:
This article will explain usage of an excel implementation applying the Real Kelly Criterion to concurrent events.
In detail the algorithm will find optimal bet sizes for a set of concurrent singles and/or ’round robin’ combinations of parlays or teasers.
I recommend reading carefully through @Pinnacle ‘s article covering the basic concept of the generalised Kelly The Real Kelly
Please note that the worksheet supports singles & parlays up to 6 selections. In my next article I will publish a python implementation using the same algorithm for an unlimited number of selections.
USAGE
Make sure to open both GlobalMinimize and the Real Kelly worksheet.
Fill out the yellow fields in the ‘selections’ sheet. You can rename ‘Bet 1’, ‘Bet 2’, to whatever you like, e.g. ‘Manchester United +0.5’. ‘MY_ODDS’ is what you consider to be the fair odds. Say you have a total of 4 selections, then you can skip the respective fields in row 6 and 7. Those selections will be ignored.
Switch over to the corresponding acca sheet. If you have 4 selections then select acca-4.
Fill out the yellow fields with all combinations you want to have bets for (1…include selection / 0…exclude selection). The template is pre-populated with all singles and doubles. Say you also want to have the 4-fold included then add an additional row 1-1-1-1 and drag-fill columns E to L. You can cherry-pick ANY combination you like to have included from a possible 2^N-1 combinations.
Set all stakes to 0.
Press CTRL+M to open GlobalMinimize settings.
Adjust the stake range/constraints according to your needs.
Select Differential-Evolution (DE) followed by Nelder-Mean (NM) and hit ‘Minimize’.
Differential-Evolution (DE) followed by Nelder-Mean (NM) should be your default option, as it increases the likehood of finding the global maximum, and NM ‘polishes off’ the optimum with a high degree of accuracy.
Depending on the field size the algorithm can now take several minutes until excel populates the optimal set in the stakes column.
The basic concept of Real Kelly is discussed here The Real Kelly
In this article I will follow up on the excel implementation and show how to use python in order to derive the same results.
Excel is great if you have an idea and want to quickly test different scenarios. However as your dataset grows you will inevitable reach excel’s limits and/or have runtime issues.
The code will work out of the box, but you will still need to know what you are doing!
That is,
(1) Outcomes must be mutually exclusive (= EXACTLY one outcome will happen). The optimization will work for markets like ‘Liverpool To Win The EPL’, but will not work for markets like ‘Liverpool Top-4’.
(2) Probabilities need to add up to 1 (or very close to it).
USAGE
(1) Selections need to be passed in as a list of dictionaries called ‘selections’. The template near the bottom is there to be modified.
(2) Any existing bets you might have need to be passed in as a list of dictionaries called ‘existing_bets’. The template near the bottom is there to be modified.
(3) Also pass in the bankroll as a parameter of the function call at the very bottom.
Thanx to @SmoLurks the python code now runs faster by a factor of 35!!!
Twitter user @optibrebs recently made me aware of the generalised Kelly Criterion (a.k.a. The Real Kelly) discussed in this @Pinnacle article The Real Kelly
To be honest I have been successfully using the simple/naïve Kelly Criterion for years and haven’t bothered looking anywhere else.
The simplified Kelly Criterion has some potential flaws and can give some head-scratching results which are explained in the article above.
I therefore recommend using the more sophisticated generalised Kelly Criterion wherever possible as it is superior to the simplified Kelly Criterion. The Real KC is very useful for outright betting as shown below.
In this article I will explain how to use the real KC in order to find optimal bet sizes for a set of futures bets on several different teams to win the same division or championship. However please note that the algorithm can be applied to ANY market with mutually exclusive outcomes (e.g. it could also be applied to a 3-way betting market as explained in example #1 in the @Pinnacle article).
(1) Outcomes must be mutually exclusive (= EXACTLY one outcome will happen). The algorithm will work for markets like ‘Liverpool To Win The EPL’, but will not work for markets like ‘Liverpool Top-4’.
(2) Probabilities need to add up to 1 (or very close to it).
(3) You can adapt the number of outcomes to your needs, but be aware to also update the variable cells within the solver.
(4) You can use excel’s built-in solver using method ‘GRG Nonlinear’, but be advised that it might not give you the best set of results. I recommend using the GlobalMinimize macro instead which can be downloaded here GlobalMinimize Excel Macro. The algorithm will very likely find a global maximum (instead of just a local maximum) for the objective and will yield the optimal solution.
The drawback is that GlobalMinimize is limited to 30 variable cells. Excel’s solver has a limit of 250 variable cells.
INSTRUCTIONS
Make sure to open both GlobalMinimize and the Real Kelly worksheet.
Fill out the fields in the yellow columns (‘BET’, ‘BOOK_ODDS’, ‘MY_ODDS’) as shown below. ‘MY_ODDS’ is what you consider to be the fair odds.
Set all stakes to 0.
Enter your bankroll in the yellow cell ‘START BANKROLL’
If you have any existing bets on this tournament enter those in columns (O, P, Q). Note that any strings in column O must exactly match those in column A.
Press CTRL+M to open GlobalMinimize settings.
Adjust the stake range/constraints according to your needs.
Select Differential-Evolution (DE) followed by Nelder-Mean (NM) and hit ‘Minimize’.
Differential-Evolution (DE) followed by Nelder-Mean (NM) should be your default option, as it increases the likehood of finding the global maximum, and NM ‘polishes off’ the optimum with a high degree of accuracy.
Depending on the field size the algorithm can now take several minutes until excel populates the optimal set in the stakes column.
What I like about this application is that you could potentially use it from week to week as the season progresses. The algorithm will find optimal bets and/or (partial) hedges whenever the sheet is updated with new prices.
I have to say I really enjoyed modelling this one!
Sometimes when you’re modelling trying to maintain an edge over the bookmakers things can get awfully complicated. You want to account for so many things that you easily get carried away and lose focus on the essentials. Models tend to get overly complicated and are really no fun maintaining when they could be simple and beautiful.
This darts model is simple and beautiful!
I’ve been following the darts scene for a very long time now and I’ve always enjoyed watching it. Have been to several WCs in recent years and have also implemented a model for matchups/moneylines for my betting. I enjoy the outright betting most, so I really wanted to come up with a proper outright model, too.
So what is this model all about and how does it work? Let’s dive in.
To generate tournament predictions we first need to be able to quantify the outcome probabilities of individual matches. I’m using a blend of elo-ratings, current form and bookmaker prices to compute match estimates.
However we must account for the fact that tournaments are often played in different formats. The PDC European Tour for instance plays (most of) its matches in a ‘First-To-6’ leg format. The PDC World Championship is played in a ‘First-To-X’ set format (with 3 legs needed to win a set).
In order to account for the myriad of different formats we first have to calculate the probability of ‘player 1 wins a LEG against player 2’. If we have the leg probability we can then compute the match probability using the inverse beta-function. In Excel this would look like this
prob_match = BETA.DIST(prob_leg, format, format, TRUE)
with
prob_leg … probability of player 1 to win a leg
format … the leg-format of the match (e.g. 6 would mean a ‘First-To-6’ legs match).
The format matters A LOT! Imagine MvG playing a ‘First-To-16’ match against Keegan Brown you would imagine he’ll be a heavy favourite. If they’d play a ‘First-To-5’ match things would be a lot closer. In fact for this particular matchup MvG would be a 87% favourite to win a ‘First-To-16’ match, but would only be a 72% favourite in a ‘First-To-5’ match.
Armed with these match probabilities it’s a matter of playing the tournament millions of times. This is called a Monte Carlo simulation.
In order to determine the winner of each match we generate a random number between 0 and 1 and compare this number with the match probabilities.
Let’s walk through one example. Let’s assume Michael Van Gerwen plays William O’Connor with MvG being an 85% to win the match. If the random number generator throws a number < 0.85, MvG is considered the winner. A random number between 0.85 and 1 would mean O’Conner is the winner.
The loser is eliminated and the winner advances to the next round.
We repeat this process for every match and every round. A tournament with 64 entries has
log(64, 2) = 6
rounds until a winner is determined (log x to the base of 2).
Each simulation gives us a winner. Perhaps Michael van Gerwen wins a particular simulation. That’s one possibility – and currently it would be the most likely one – but he would certainly not win every simulation.
That’s why we need to run the simulation millions of times. I tend to run 2.5 million trials for a 64-player field as such big fields mean big variance. Over that many simulations, MvG wins sometimes (but not always), Gary Anderson wins a little less often and the no-hopers might not even win once in a million trials.
In fact Michael van Gerwen has won 350k simulations while Dyson Parody hasn’t won a single simulation in 2.5 million trials as you can see from the predictions for the 2019 Gibraltar Darts Trophy.
On a side note it takes my Apple iMac 27″ (from 2013) almost 6 hours to run all 2.5 million simulations. I love it to see my machine sweating!
The number of wins is divided by the number of simulations in order to derive the probability of one player winning the tournament. If we take the inverse we’ll get the fair odds which can then be easily compared against bookmaker prices to look for potential value bets.
fair_odds = n / number_of_wins
As you would expect the draw affects outright probabilities quite a bit. Assume Michael van Gerwen, Gary Anderson, Peter Wright, Rob Cross all being in the same half then players in the opposite half of the draw would have a much ‘easier’ path to the final as if they were in the same half.
This model accounts for both tournaments with a set draw (e.g. European Tour events) as well as for tournaments with a random draw (e.g. the UK Open).
I will try to publish the tournament predictions before every major PDC event on my twitter account @BettingIsCool
The predictions also include the value and advised stakes based on the Kelly-Criterion on a scale from 1 – 100.
I hope these forecasts serve as a supplementary tool for your betting or even just to have a side bet every now and then. Don’t go havoc with your stakes though!
There are lots of hurdles to overcome before you can expect to turn a profit from following a tipster. First and foremost of course it’s the tipster’s skill to identify value prices. Secondly you want the tipster to advise his bets at prices from a reputable bookmaker who does not restrict their customers. Additionally you need to deduct subscription fees from potential profits and bet placement fees if you happen to place your bets automated through a bot (like I do). Something that is not so obvious and sometimes hard to estimate is slippage, which also has a hefty influence on your bottom line.
Slippage is the difference in profits between betting at advised and betting at obtained prices. Say, you follow a tipster and his yield across 1000 picks is +4.50%. Let’s also assume that the actual yield you have achieved from these bets (by sometimes being forced to take lower odds) is +3.30%. Your slippage would then be 1.20% (4.50% – 3.30%).
Please be aware that slippage only affects winning bets. For a losing bet using 1 point level stakes your p/l is always -1, regardless of the odds you took beforehand.
Consistently taking lower than advised prices can eat massively into your profits as we will see below. In fact it can be the difference between winning and losing depending on the popularity of the tipster. Generally speaking the more popular the tipster the greater the slippage will be.
But just how much of slippage are we talking about? I will try to quantify this figure below.
Professional gamblers have developed a very impressive way of thinking and it’s proven that they possess a specific kind of intelligence other people don’t.
Check out this fascinating TED talk on risk intelligence by Dylan Evans, PhD in Philosophy.
Apologies to the well respected Joseph Buchdahl from http://www.football-data.co.uk for stealing the title for this article. I find it appropriate and creative at the same time so couldn’t resist using it. I swear the rest of the article are my very own words… 🙂
It is oh-so-tempting to check a half-decent tipster-platform and sign up with a tipster who is being promoted as the next big thing. Even for more experienced punters it is sometimes hard to resist.
Just out of curiosity I fired up my browser and checked a popular tipster platform which read the following stats for the tipster topping the table: 893 bets, 19% yield, 9524 followers.
Damn it, that’s too good to be true, isn’t it? For someone to show a 19% yield over such a ‘large’ sample he must have what it takes, right? Also if he continues that performance the €50 for monthly sub-fees are covered in no time…
The majority of this article will deal with the financial investment world, but the principles are equally relevant to sports betting.
It is perhaps the greatest paradox in the investment world that many consistently profitable money managers have a large percentage of losing clients. I recently saw the records of a very successful US Hedge Fund, that showed over 40% of their lifetime client base had actually lost money while investing with the fund! This fund had a relatively consistent record of double digit annual gains over decades! This rather odd story is by no means isolated, it is repeated within many successful funds.
You hear a lot of sports bettors say it, “I beat the closing price on that bet” but what does it really mean and why is it important to winning when it comes to betting on sports?
The closing price is the betting price at the sportsbooks when all betting is closed and the game is about to start. It is the most accurate price because all of the money has been bet and all available information and opinions have been factored in.
Closing price value is determined by comparing the price on a bet placed at an earlier time with the price at game start time. If you placed a bet at 2.1 and the price closed at 1.75, you have price value. Many studies have been done on the closing price and all point toward the same thing and assume that getting a better price than the close will result in +EV bets in the long run.