The dealer DOES NOT always win. Making profit on tennis with math and machine learning.

After 2 years of fragmented researchers with the objective to create a bot able to profit real moneys while I’m watching television, something good finally came out and obviously, got stopped by 3rd parties.


The choice was between sports betting and stock markets. Due to high country regulations on both the candidate, I was “forced” to pick sports, because forex and stock trading in general require various licenses and proven financial studies.

Tennis is a lovely sport. I started 2 years ago without having a clue about all players and now I almost know all of them xD. Tennis, is that one sport with markets that goes crazy in a fraction of minute. It can’t be compared to other sports like soccer or basketball, where odds doesn’t drop and rise within 2 minutes but instead, they follow a line which can be altered by rare events (i.e a goal of a soccer team or 10 points in a row from a basketball team).

Another thing which makes Tennis a lovely sport is the (un)sure fact that non-ranked players which compete for low prizes, sometimes, loves to “sells” matches, making high odds happening.

This took me to focus my research on Tennis, trying various simulations and neural network models in order to create a strategy, at first, and a bot which use this strategy, later.

The WTF story

Im nowhere close to be a betting expert or something like that, but the first successful attempt happened almost immediatly. I did a bot which does what the expert people call “scalping”. Basically, i built scrapers for all the italian bookmakers available and the bot was betting with a pretty good formula on the various bookies using the higher offered odds. At some point, this laptop suddenly stop working (i9 cpu burnt) and got sent back to manufacturer for fix. That day, i learnt something. I won’t start doing backups but at least i learnt that I should push to github no matter what. That laptop got fixed after 3 months of excuses from manufacturer (waiting for pieces) and got “stolen” during the delivery back to my house (empty, repackaged, box arrived at home).

After a couple of months, i started back my researches, this time focussing on creating different machine learning models.

Some of the attempts i made

I’ve tried different machine learning classifier models and neural network, feeded with several different columns. Internet is full of historycal data ready to populate some nice datasets.

The columns I used to train my models are the same ones you can find in some other nice blog articles with the same topic and range from ATP/WTA rank, age, performance in the past N games, current set/games won by both the players etc.

Most of those attempts ended up in some small profits followed by loss, or straight loss. Almost no result (in terms of profit) has been obtained until a month ago.

I realized something important during those tests, which can be useful if you are diving into the same topic, AVOID feeding your models with odds offered by bookmakers. I struggled upon feeding my models with bookie odds or not and I realized that the models perform worst. This is pretty much obvious because in the end, the model will consider them as “probabilities of success” which as well are calculated by some models. Hard to believe, but there are many circumstances in which those values are totally wrong and misleading.

Considering something new

One month ago i had the idea to check some other values which i never considered. I’ve started making my bots counting 2 additional things while the matches were running. The 2 values, which are calculated differently if we want to bet for the match or for the single game, together with another condition, granted some nice profits, in the short and in the long term.

I used the predictions made by the model to bet on tennis games and matches, where the minimum odd offered was higher then 1.8/1.9.

I began with some positives cycles (here i’m attaching the plots for a cycle of 5 days).
I followed up with other cycles of 3 days and others of 4 days with almost the same results, no plotting available because more tests were made those days to tune the model with some new discriminant.

Please note that it was also thanks to the “patient” of the bot that there was a profit like that, obviously together with what looks a good prediction model. A typical human doesn’t have the same patient of a bot when betting. Bot will wait even hours before placing a bet, humans, instead, want to see the moneys growing as fast as possible while betting, which will end up in burning the whole budget in 99% cases.

Suddenly, the bot stopped betting on various websites, including betfair which has public developer api and is totally fine with bots and automated solutions. After checking, I realized that some limits were set on my accounts which basically prevent them to bet more on Tennis, while some of those are still free to bet billion dollars on soccer, i.e.

After contacting both, the local and the international support, I ended up with a “ping pong” between supports. None of them is “able” to remove those limits.

To me, this sounds like: “ok, you win. If you keep your stuff running, we will lose too much money”.

I’ve made more analysis in the tennis matches happened in the past 5/6 months (quite a lot despite covid19) with the attempt to tune our formula to predict single game and matches.

Here are the percentages of success plotted in an X/Y table.

The first image refer to single games. With a catch percent of 43% I was able to bet on service breaks, which are usually paid from 1.8 to up to 5/6, making up to a 500% profit in 5 days. The second image instead refer to the whole match. The model predicted with success more then the 80% of cases. Those situations are checked and happens during live game. I thought that to maximize my winning, it’s better to “follow up” live games instead of predict before the games begin, it’s sport and whatever can happen, (i.e favorite player had some sort of bad day, and it will reflect during the game).

I don’t have resources nor knowledge to start profiting this in foreign countries, with multiple ID, bank accounts, service accounts etc, so I decided to turn this into a service, a free android app bombed of ads (sorry but I’m quite sure about results).

The app, powered by the prediction models, won’t obviously catch the 100% of the predictions, so that, you’ll need also to tune yourself 2 values (at least, this is what I did to grant my self a profit): a budget limit and a constant win amount.
Assuming your budget is 200€, you fix a limit to 150. If your budget is going to rise to 1000 (in example) your limit will always be 150 unless you want to start a new cycle. On this 150, you calculate the other value, the win amount. I’ve used the 10% of my fixed budget. So 10% of 150 is what i want to win for each of my bets.

myWinAmount = 15€
betAmount = 15 / odds

Have fun and play safe 🙂

P.S: To developers interested in creating bots to automate a system phuckage, I’m available to discuss in DM some straightforward access to the api.

Get it on Google Play

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.