I have created a bot that bets on a fake betting web site called SaltyBet.com. Now if you find anything immoral about that, just know that it is fake betting with fake money and I find so much joy in seeing computers and math make things more efficient. Especially if it is something I created :).
Now this bot has met with some great success. It is currently hovering at #63 in the world out of a total of 44,522,600 other users and I could not be any more proud of it's progress. But, over the course of a month, it has become stuck. My totals have gone only as high as 12 million and as low as 9 million. It does not go any higher or lower despite an 65% accuracy. This baffles me.
The only hypothesis I can come up with is that the algorithms I use have hit their limit and can no longer provide consistent growth. Given the 1v1 nature of the web site, I currently employ an ELO rating system that is used to calculate possible outcomes and then plug that into the Kelly formula to get the final amount the bot should bet. I have outlined the entire process below in more detail:
Get the outcome of the fight based on ELO. The player with the highest percentage chance (HighestChancePlayer) will be bet on. Formula below:
(1 / (1 + (Math.Pow(10, (player2Elo - player1Elo) / 400))))
Determine if the players have fought before. If they have, we just simply create a different probability based on the previous fights.
Because the Kelly formula is really aggressive, I only bet 1-2% of what it recommends I bet. This is controlled by the number of fights each player has done which creates more confidence in my bet. The more confidence, the more money that is bet on that match. I have found that a 1-2% 'Kelly Safety Number' is conservative enough to obtain gains while remaining conservative. This could possibly be a major weak point due to it's non-flexibility. I have altered this value nothing conclusive that this is the problem.
I then calculate the percentage of my current total that I am going to bet.
betPercentage = ([HighestChancePlayerPercentage] * (1 + 1) - 1) / 1
Then we take the total amount of money and take out both the bet percentage then the Kelly Safety Percentage. All of this is rounded to the nearest whole number.
FinalBetAmount = (balanceBefore * betPercentage) * kellySafetyNumber
Now because this is a bot, I am already expecting to get heckled and downvoted for this fact. But this bot is my baby and I want to reach at least #10 on the leaderboard before I call this a success. Please let me know if you need any clarification. Upon request, and for the code savvy, I can put the code online or output the data currently stored in my database.
I am missing something super simple and just though I would turn here to you geniuses. And just to reiterate, the best clue that I have followed so far was, it gets to about 10 millions and then refuses to go much higher. If you know of a better system, I'm all ears.