- Alpha Docs
- Posts
- Beating Sportsbooks Odds part 2
Beating Sportsbooks Odds part 2
Beating Sportsbooks Odds part 2
Beating Sportsbook Odds Part 2
Link to article: https://www.semanticscholar.org/paper/Inter-market-Arbitrage-in-Sports-Betting-Franck-Verbeek/65b8500dd79900c4cc9304491e77e028aaaee336
What is Sports Arbitrage?: Is a strategy used in sports betting that involves exploiting the differences in odds offered by different bookmakers or betting exchanges on the same event. In simple terms, an arbitrage opportunity arises when the odds offered by different bookmakers or betting exchanges on the same event are such that a bettor can place opposing bets on all possible outcomes and still make a profit regardless of the outcome.
For example, suppose that in a tennis match between Player A and Player B, one bookmaker offers odds of 2.0 for Player A to win, while another bookmaker offers odds of 2.1 for Player B to win. By placing a bet on both outcomes with an appropriate stake, a bettor can guarantee a profit regardless of the outcome of the match.
Sports arbitrage is a mathematically sound strategy, and it is often used by professional bettors and traders to generate consistent profits. However, it requires careful monitoring of odds and a quick reaction time to take advantage of the short-lived opportunities that arise. Moreover, it is important to keep in mind that bookmakers and betting exchanges are aware of the arbitrage strategy and may limit or close the accounts of bettors who use it excessively.
Unique Twist Explained in the Article: it Describes a betting market as a speculative market where contracts are traded based on the outcome of a future event, such as a soccer game. In fixed-odds betting, the size of the cash flow is determined by the odds. The bookmaker market is the most popular form of sports gambling, where the bookmaker unilaterally determines the odds a few days before the game starts. Bettors can place their bets at these odds while the bookmaker takes the opposite position. The bet exchange market is another market mechanism where individuals directly trade bets with each other at a platform where the bettors post the prices under which they are willing to place a bet - on or against - a given outcome. The provider of the platform typically charges a commission fee on the bettors' net profits. After a bet on the outcome of a given event has been matched, both individuals hold a contract on a future cash flow, and the size of the cash flow is determined by the agreed odds. The direction of the cash flow depends on the actual outcome of the underlying event combined with the position a given bettor holds.
Simple Example Script:
import pandas as pd
import requests
from re import findall
import re
sport = 'nba'
header = {
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36",
"X-Requested-With": "XMLHttpRequest"
}
todays_games = pd.read_html(requests.get('https://www.actionnetwork.com/'+sport+'/public-betting', headers=header).text)[0]
def get_teams(z,home=False,road=False):
"""
Returns the home and away teams from the "ScheduledScheduled" column,
which includes this weird code number that can be ignored.
"""
chars = findall('[A-Z]*',z) #finds all repititions of capitals letters, which would be a team abreviation.
teams = []
for char in chars:
if len(char)>1:
teams.append(char)
if road:
road = teams[0]
return road
if home:
home = teams[1][0:-1]
return home
todays_games.dropna(axis=1,inplace=True)
schedule_col = [col for col in todays_games.columns if 'Scheduled' in col][0]
pct_of_bets_col = [col for col in todays_games.columns if '% of Bets' in col][0]
todays_games['Road'] = todays_games[schedule_col].apply(lambda z: get_teams(z,road=True))
todays_games['Home'] = todays_games[schedule_col].apply(lambda z: get_teams(z,home=True))
for col in ['Open','Best Odds',pct_of_bets_col]:
#length = len(todays_games.Open.values[0])/2
todays_games['Road ' + col] = todays_games[col].apply(lambda z: z[0:int(len(z)/2)])
# del todays_games[col]
cols_clean = [col.split('Right')[0] for col in todays_games.columns]
todays_games.columns = cols_clean