def match_up(player1, player2): spw_p1, counter_p1 = predictions(player1,player2) spw_p2, counter_p2 = predictions(player2,player1) # ask if its a five setter tournament five_setter = 1 #normalizing values avg_p1spw = spw_p1/counter_p1 avg_p2spw = spw_p2/counter_p2 delta_a_b = avg_p1spw - avg_p2spw p1_win_probability = markov.match_win_probability_5(0.6+delta_a_b,(1-0.6))+markov.match_win_probability_5(0.6,(1-(0.6-delta_a_b))) p1_win_probability = p1_win_probability/2 p2_win_probability = 1-p1_win_probability predicted_odds_p1 = 1/p1_win_probability predicted_odds_p2 = 1/p2_win_probability print str(avg_p1spw) + ", " + str(avg_p2spw) print "In a match up between " + player1 + " and " + player2 + " on " + str(time.strftime("%d/%m/%Y")) print "Player 1 win probability: " + str(p1_win_probability*100) + "%" print "Player 2 win probability: " + str(p2_win_probability*100) + "%" print "Only bet on Player 1 if the odds>$"+str(predicted_odds_p1) print "Only bet on Player 2 if the odds>$"+str(predicted_odds_p2)
def match_up(player1, player2): spw_p1, counter_p1 = predictions(player1, player2) spw_p2, counter_p2 = predictions(player2, player1) # ask if its a five setter tournament five_setter = 1 # normalizing values avg_p1spw = spw_p1 / counter_p1 avg_p2spw = spw_p2 / counter_p2 delta_a_b = avg_p1spw - avg_p2spw p1_win_probability = markov.match_win_probability_5(0.6 + delta_a_b, (1 - 0.6)) + markov.match_win_probability_5( 0.6, (1 - (0.6 - delta_a_b)) ) p1_win_probability = p1_win_probability / 2 p2_win_probability = 1 - p1_win_probability predicted_odds_p1 = 1 / p1_win_probability predicted_odds_p2 = 1 / p2_win_probability print str(avg_p1spw) + ", " + str(avg_p2spw) print "In a match up between " + player1 + " and " + player2 + " on " + str(time.strftime("%d/%m/%Y")) print "Player 1 win probability: " + str(p1_win_probability * 100) + "%" print "Player 2 win probability: " + str(p2_win_probability * 100) + "%" print "Only bet on Player 1 if the odds>$" + str(predicted_odds_p1) print "Only bet on Player 2 if the odds>$" + str(predicted_odds_p2)
def simulate_bets(): fixtures = csv.DictReader(open("final_fixtures.csv")) roi = 0 matches_bet_on = 0 correct_bets = 0 wrong_bets = 0 output_results = [] for fixture in fixtures: delta_a_b = 0 winner = -1 five_setter=0 if ("Jerzy" in fixture["player1"]) or ("Jerzy" in fixture["player2"]): continue if (fixture["winner"]==fixture["player1"]): winner=1 elif (fixture["winner"]==fixture["player2"]): winner=2 if winner<0: print "ERROR, DOES NOT READ PLAYER 1 AND 2 CORRECTLY" # remove the $ symbol and convert to float market_odds_p1 = float(fixture["p1odds"][1:]) market_odds_p2 = float(fixture["p2odds"][1:]) tournament = fixture["tournament"] # if grand slam or davis cup, its a 5 setter match if "Slam" in tournament: five_setter = 1 p1spw = float(fixture["p1spw"]) p2spw = float(fixture["p2spw"]) p1_spwcount = float(fixture["p1_spwcount"]) p2_spwcount = float(fixture["p2_spwcount"]) #if (p1_spwcount==0 or p2_spwcount==0 or p1_spwcount==1 or p2_spwcount==1): if (p1_spwcount==0 or p2_spwcount==0 or p1_spwcount==1 or p2_spwcount==1): #dont bet because there isnt enough clustering info continue #normalizing values avg_p1spw = p1spw/p1_spwcount avg_p2spw = p2spw/p2_spwcount delta_a_b = avg_p1spw - avg_p2spw delta_b_a = avg_p2spw - avg_p1spw if (five_setter): #use five setter formula p1_win_probability = markov.match_win_probability_5(0.6+delta_a_b,(1-0.6))+markov.match_win_probability_5(0.6,(1-(0.6-delta_a_b))) p1_win_probability = p1_win_probability/2 p2_win_probability = 1-p1_win_probability else: #use three sets formula (default) p1_win_probability = markov.match_win_probability_3(0.6+delta_a_b,(1-0.6))+markov.match_win_probability_3(0.6,(1-(0.6-delta_a_b))) p1_win_probability = p1_win_probability/2 p2_win_probability = 1-p1_win_probability predicted_odds_p1 = 1/p1_win_probability predicted_odds_p2 = 1/p2_win_probability #betted = 1 if bet on player 1, =2 if bet on player 2 betted = -1 if (market_odds_p1>predicted_odds_p1 and predicted_odds_p1<2): # bet pound on p1 betted = 1 matches_bet_on +=1 elif (market_odds_p2>predicted_odds_p2 and predicted_odds_p2<2): # bet pound on p2 betted = 2 matches_bet_on +=1 if betted<0: # NO BET continue if (betted==1 and winner==1): roi+=(market_odds_p1-1) correct_bets+=1 output_results.append([fixture["player1"], fixture["player2"], tournament, market_odds_p1, market_odds_p2, market_odds_p1-1]) elif (betted==2 and winner==2): roi+=(market_odds_p2-1) correct_bets+=1 output_results.append([fixture["player2"], fixture["player1"], tournament, market_odds_p2, market_odds_p1, market_odds_p2-1]) elif (betted==1 and winner==2): #print fixture["date"] + " "+ fixture["player1"] + " vs " + fixture["player2"] + ", bet on: "+ fixture["player1"] roi-=1 wrong_bets+=1 output_results.append([fixture["player2"], fixture["player1"], tournament, market_odds_p2, market_odds_p1, -1]) elif (betted==2 and winner==1): print fixture["date"] + " "+ fixture["player1"] + " vs " + fixture["player2"] + ", bet on: "+ fixture["player2"] roi-=1 wrong_bets+=1 output_results.append([fixture["player1"], fixture["player2"], tournament, market_odds_p1, market_odds_p2, -1]) print "$"+str(roi) print "Bet on " + str(matches_bet_on) + " matches" print "Correct bets:" + str(correct_bets) print "Incorrect bets:" + str(wrong_bets) output_file = csv.writer(open("output_results.csv", "wb"), delimiter=',') headers = ["winner", "loser", "tournament", "winner_market_odds", "loser_market_odds", "winnings"] output_file.writerow(headers) output_file.writerows(output_results)