def best_matches_combine(site,
                         minimum_odd,
                         bet,
                         sport="football",
                         nb_matches=2,
                         one_site=False,
                         date_max=None,
                         time_max=None,
                         date_min=None,
                         time_min=None,
                         minimum_odd_selection=1.01):
    """
    Retourne les meilleurs matches sur lesquels miser lorsqu'on doit miser une somme
    donnée à une cote donnée sur un combiné
    """
    all_odds = filter_dict_dates(sportsbetting.ODDS[sport], date_max, time_max,
                                 date_min, time_min)
    all_odds = filter_dict_minimum_odd(all_odds, minimum_odd_selection, site)
    sportsbetting.ALL_ODDS_COMBINE = {}
    nb_combine = binomial(len(all_odds), nb_matches)
    sportsbetting.PROGRESS = 0

    def compute_all_odds_combine(nb_combine, combine):
        sportsbetting.PROGRESS += 100 / nb_combine
        try:
            sportsbetting.ALL_ODDS_COMBINE[" / ".join([
                match[0] for match in combine
            ])] = cotes_combine_all_sites(*[match[1] for match in combine])
        except KeyError:
            pass

    ThreadPool(4).map(lambda x: compute_all_odds_combine(nb_combine, x),
                      combinations(all_odds.items(), nb_matches))
    sportsbetting.PROGRESS = 0
    odds_function = get_best_odds(one_site)
    profit_function = get_profit(bet, one_site)
    criteria = lambda odds_to_check, i: (
        (not one_site and odds_to_check[i] >= minimum_odd) or
        (one_site and all(odd >= minimum_odd for odd in odds_to_check)))
    display_function = lambda best_overall_odds, best_rank: (
        mises2(best_overall_odds, bet, best_rank, True)
        if not one_site else mises(best_overall_odds, bet, True))
    result_function = lambda best_overall_odds, best_rank: (
        mises2(best_overall_odds, bet, best_rank, False)
        if not one_site else mises(best_overall_odds, bet, False))
    best_match_base(odds_function,
                    profit_function,
                    criteria,
                    display_function,
                    result_function,
                    site,
                    sport,
                    date_max,
                    time_max,
                    date_min,
                    time_min,
                    True,
                    nb_matches,
                    one_site=one_site,
                    combine_opt=True)
Esempio n. 2
0
def best_matches_combine(site,
                         minimum_odd,
                         bet,
                         sport="football",
                         nb_matches=2,
                         one_site=False,
                         date_max=None,
                         time_max=None,
                         date_min=None,
                         time_min=None,
                         minimum_odd_selection=1.01):
    """
    Retourne les meilleurs matches sur lesquels miser lorsqu'on doit miser une somme
    donnée à une cote donnée sur un combiné
    """
    all_odds = filter_dict_dates(sportsbetting.ODDS[sport], date_max, time_max,
                                 date_min, time_min)
    sportsbetting.ALL_ODDS_COMBINE = {}
    for combine in combinations(all_odds.items(), nb_matches):
        try:
            if all([
                    odd >= minimum_odd_selection for odds in list(
                        all_odds[match[0]]["odds"][site] for match in combine)
                    for odd in odds
            ]):
                (sportsbetting.ALL_ODDS_COMBINE[" / ".join([
                    match[0] for match in combine
                ])]) = cotes_combine_all_sites(
                    *[match[1] for match in combine])
        except KeyError:
            pass
    odds_function = lambda best_odds, odds_site, i: (
        (best_odds[:i] + [odds_site[i]] + best_odds[i + 1:])
        if not one_site else odds_site)
    profit_function = lambda odds_to_check, i: (gain(odds_to_check, bet) - bet
                                                if one_site else gain2(
                                                    odds_to_check, i, bet))
    criteria = lambda odds_to_check, i: (
        (not one_site and odds_to_check[i] >= minimum_odd) or
        (one_site and all(odd >= minimum_odd for odd in odds_to_check)))
    display_function = lambda best_overall_odds, best_rank: (
        mises2(best_overall_odds, bet, best_rank, True)
        if not one_site else mises(best_overall_odds, bet, True))
    result_function = lambda best_overall_odds, best_rank: (
        mises2(best_overall_odds, bet, best_rank, False)
        if not one_site else mises(best_overall_odds, bet, False))
    best_match_base(odds_function,
                    profit_function,
                    criteria,
                    display_function,
                    result_function,
                    site,
                    sport,
                    date_max,
                    time_max,
                    date_min,
                    time_min,
                    True,
                    nb_matches,
                    one_site=one_site)
Esempio n. 3
0
def best_match_under_conditions2(site,
                                 minimum_odd,
                                 stake,
                                 sport="football",
                                 date_max=None,
                                 time_max=None,
                                 date_min=None,
                                 time_min=None,
                                 miles=False,
                                 rate_eur_miles=0,
                                 multiplicator=1):
    all_odds = filter_dict_dates(sb.ODDS[sport], date_max, time_max, date_min,
                                 time_min)
    best_profit = -float("inf")
    best_match = None
    sites = None
    nb_matches = len(all_odds)
    n = get_nb_outcomes(sport)
    for match in all_odds:
        sb.PROGRESS += 100 / nb_matches
        if site in all_odds[match]['odds']:
            odds_site = all_odds[match]['odds'][site]
            best_odds = copy.deepcopy(odds_site)
            best_sites = [site for _ in range(n)]
            for odds in all_odds[match]['odds'].items():
                for i in range(n):
                    if odds[1][i] > best_odds[i] and (odds[1][i] >= 1.1
                                                      or odds[0] == "pmu"):
                        best_odds[i] = odds[1][i]
                        best_sites[i] = odds[0]
            for odd_i, site_i in zip(best_odds, best_sites):
                if odd_i < 1.1 and site_i != "pmu":
                    break
            else:
                profit = gain3(odds_site, best_odds, stake, minimum_odd, miles,
                               rate_eur_miles, multiplicator)
                if profit > best_profit:
                    best_profit = profit
                    best_odds_site = copy.deepcopy(odds_site)
                    best_best_odds = copy.deepcopy(best_odds)
                    best_match = match
                    stakes, best_indices = mises3(odds_site, best_odds, stake,
                                                  minimum_odd, False, miles,
                                                  rate_eur_miles,
                                                  multiplicator)
                    sites = [
                        site if i in best_indices else best_sites[i]
                        for i in range(n)
                    ]
    if best_match:
        print(best_match)
        pprint(all_odds[best_match])
        mises3(best_odds_site, best_best_odds, stake, minimum_odd, True, miles,
               rate_eur_miles, multiplicator)
        afficher_mises_combine([best_match], [sites], [stakes],
                               all_odds[best_match]["odds"], sport)
    else:
        print("No match found")
Esempio n. 4
0
def best_match_stakes_to_bet(stakes, nb_matches=1, sport="football", date_max=None, time_max=None, identical_stakes=False):
    second_sites = {stake[1] for stake in stakes}
    main_sites = ['betclic', 'betstars', 'bwin', 'france_pari', 'joa', 'netbet',
                  'parionssport', 'pasinobet', 'pmu', 'unibet', 'winamax', 'zebet']
    all_odds = filter_dict_dates(sb.ODDS[sport], date_max, time_max)
    best_profit = -sum(stake[0] for stake in stakes)
    n = get_nb_issues(sport) ** nb_matches
    nb_stakes = len(stakes)
    all_odds_combine = {}
    combis = list(combinations(all_odds.items(), nb_matches))
    nb_combis = len(combis)
    best_combine = None
    best_bets = None
    main_site_odds = []
    main_sites_distribution = []
    sb.PROGRESS = 0
    for i, combine in enumerate(combis):
        sb.PROGRESS += 100 / nb_combis
        match_combine = " / ".join([match[0] for match in combine])
        all_odds_combine[match_combine] = cotes_combine_all_sites(*[match[1] for match in combine])
        for main0 in main_sites:
            try:
                main_sites_distribution = [main0 for _ in range(n)]
                main_site_odds = copy.deepcopy(all_odds_combine[match_combine]["odds"][main0])
                break
            except KeyError:
                pass
        for main in main_sites[:i] + main_sites[i + 1:]:
            try:
                potential_odds = all_odds_combine[match_combine]["odds"][main]
                for j, odd in enumerate(potential_odds):
                    if odd > main_site_odds[j]:
                        main_site_odds[j] = odd
                        main_sites_distribution[j] = main
            except KeyError:
                pass
        second_odds = {second_site: all_odds_combine[match_combine]["odds"][second_site]
                       for second_site in second_sites if second_site in all_odds_combine[match_combine]["odds"]}
        if not second_odds:
            continue
        dict_combine_odds = copy.deepcopy(second_odds)
        for perm in permutations(range(n), nb_stakes):
            valid_perm = True
            defined_second_sites = [[perm[j], stake[0], stake[1]]
                                    for j, stake in enumerate(stakes)]
            for j, stake in enumerate(stakes):
                if dict_combine_odds[defined_second_sites[j][2]][defined_second_sites[j][0]] < stake[2]:
                    valid_perm = False
                    break
            if not valid_perm:
                if identical_stakes:
                    break
                continue
            defined_bets_temp = defined_bets(main_site_odds, dict_combine_odds,
                                             main_sites_distribution,
                                             defined_second_sites)
            profit = defined_bets_temp[0] - np.sum(defined_bets_temp[1])
            if profit > best_profit:
                best_profit = profit
                best_combine = combine
                best_bets = defined_bets_temp
            if identical_stakes:
                break
    if best_combine:
        best_match_combine = " / ".join([match[0] for match in best_combine])
        odds_best_match = copy.deepcopy(all_odds_combine[best_match_combine])
        all_sites = main_sites + list(second_sites)
        for site in all_odds_combine[best_match_combine]["odds"]:
            if site not in all_sites:
                del odds_best_match["odds"][site]
        print(best_match_combine)
        pprint(odds_best_match, compact=1)
        print("Plus-value =", round(best_profit, 2))
        print("Gain référence =", round(best_bets[0], 2))
        print("Somme des mises =", round(np.sum(best_bets[1]), 2))
        afficher_mises_combine([x[0] for x in best_combine], best_bets[2], best_bets[1],
                               all_odds_combine[best_match_combine]["odds"], sport)
    else:
        print("No match found")
Esempio n. 5
0
def best_matches_combine2(site,
                          minimum_odd,
                          bet,
                          sport,
                          minimum_odd_selection,
                          date_max=None,
                          time_max=None,
                          date_min=None,
                          time_min=None):
    nb_matches = 2
    all_odds = filter_dict_dates(sb.ODDS[sport], date_max, time_max, date_min,
                                 time_min)
    all_odds = filter_dict_minimum_odd(all_odds, minimum_odd_selection, site)
    odds_combine_opt = [{} for _ in range(6)]
    nb_combine = binomial(len(all_odds), nb_matches)
    sb.PROGRESS = 0
    combis = cotes_combine_optimise([[1 for _ in range(3)]
                                     for i in range(nb_matches)])[1]
    print(combis)

    def compute_all_odds_combine_optimise(nb_combine, combine,
                                          odds_combine_opt):
        sb.PROGRESS += 100 / nb_combine
        try:
            cotes_combination = cotes_combine_reduit_all_sites(
                *[match[1] for match in combine])
            for i in range(6):
                odds_combine_opt[i][" / ".join([match[0] for match in combine
                                                ])] = cotes_combination[i]


#                 combis[i] = cotes_combination[i][1]
        except KeyError:
            pass

    ThreadPool(4).map(
        lambda x: compute_all_odds_combine_optimise(nb_combine, x,
                                                    odds_combine_opt),
        combinations(all_odds.items(), nb_matches))
    sb.PROGRESS = 0
    odds_function = get_best_odds(False)
    profit_function = get_profit(bet, False)
    criteria = lambda odds_to_check, i: all(odd >= minimum_odd
                                            for odd in odds_to_check)
    for i, combination in enumerate(combis):
        sb.ALL_ODDS_COMBINE = odds_combine_opt[i]
        #         display_function = lambda odds_to_check, i: mises_combine_optimise(odds_to_check, combination, bet, minimum_odd, True)
        #         result_function = lambda odds_to_check, i: mises_combine_optimise(odds_to_check, combination, bet, minimum_odd, False)
        display_function = lambda best_overall_odds, best_rank: mises2(
            best_overall_odds, bet, best_rank, True)
        result_function = lambda best_overall_odds, best_rank: mises2(
            best_overall_odds, bet, best_rank, False)
        best_match_base(odds_function,
                        profit_function,
                        criteria,
                        display_function,
                        result_function,
                        site,
                        sport,
                        date_max,
                        time_max,
                        date_min,
                        time_min,
                        True,
                        nb_matches,
                        combine_opt=True)
Esempio n. 6
0
def best_match_stakes_to_bet2(stakes,
                              nb_matches=2,
                              sport="football",
                              date_max=None,
                              time_max=None,
                              identical_stakes=False):
    second_sites = {stake[1] for stake in stakes}
    main_sites = sb.BOOKMAKERS
    all_odds = get_matches_with_best_trj(sport, 20)
    all_odds = filter_dict_dates(all_odds, date_max, time_max)
    best_profit = -sum(stake[0] for stake in stakes)
    n = 5  #get_nb_outcomes(sport) ** nb_matches
    nb_stakes = len(stakes)
    all_odds_combine = [{} for _ in range(6)]
    combis = list(combinations(all_odds.items(), nb_matches))
    nb_combis = len(combis)
    best_combine = None
    best_bets = None
    main_site_odds = []
    main_sites_distribution = []
    sb.PROGRESS = 0
    list_combinations = cotes_combine_optimise([[1 for _ in range(3)]
                                                for i in range(nb_matches)])[1]
    for k in range(6):
        for i, combine in enumerate(combis):
            sb.PROGRESS += 100 / nb_combis
            match_combine = " / ".join([match[0] for match in combine])
            cotes_combination = cotes_combine_reduit_all_sites(
                *[match[1] for match in combine])
            #             print(cotes_combination[k])
            all_odds_combine[k][match_combine] = cotes_combination[k]
            for main0 in main_sites:
                try:
                    main_sites_distribution = [main0 for _ in range(n)]
                    main_site_odds = copy.deepcopy(
                        all_odds_combine[k][match_combine]["odds"][main0])
                    break
                except KeyError:
                    pass
            for main in main_sites[:i] + main_sites[i + 1:]:
                try:
                    potential_odds = all_odds_combine[k][match_combine][
                        "odds"][main]
                    for j, odd in enumerate(potential_odds):
                        if odd > main_site_odds[j]:
                            main_site_odds[j] = odd
                            main_sites_distribution[j] = main
                except KeyError:
                    pass
            second_odds = {
                second_site:
                all_odds_combine[k][match_combine]["odds"][second_site]
                for second_site in second_sites
                if second_site in all_odds_combine[k][match_combine]["odds"]
            }
            if not second_odds:
                continue
            dict_combine_odds = copy.deepcopy(second_odds)
            for perm in permutations(range(n), nb_stakes):
                valid_perm = True
                defined_second_sites = [[perm[j], stake[0], stake[1]]
                                        for j, stake in enumerate(stakes)]
                for j, stake in enumerate(stakes):
                    if dict_combine_odds[defined_second_sites[j][2]][
                            defined_second_sites[j][0]] < stake[2]:
                        valid_perm = False
                        break
                if not valid_perm:
                    if identical_stakes:
                        break
                    continue
                defined_bets_temp = defined_bets(main_site_odds,
                                                 dict_combine_odds,
                                                 main_sites_distribution,
                                                 defined_second_sites)
                profit = defined_bets_temp[0] - np.sum(defined_bets_temp[1])
                if profit > best_profit:
                    best_profit = profit
                    best_combine = combine
                    best_bets = defined_bets_temp
                    best_combination = k
                if identical_stakes:
                    break
    if best_combine:
        best_match_combine = " / ".join([match[0] for match in best_combine])
        odds_best_match = copy.deepcopy(
            all_odds_combine[best_combination][best_match_combine])
        all_sites = main_sites + list(second_sites)
        for site in all_odds_combine[best_combination][best_match_combine][
                "odds"]:
            if site not in all_sites:
                del odds_best_match["odds"][site]
        print(best_match_combine)
        pprint(odds_best_match, compact=1)
        print("Plus-value =", round(best_profit, 2))
        print("Gain référence =", round(best_bets[0], 2))
        print("Somme des mises =", round(np.sum(best_bets[1]), 2))
        afficher_mises_combine(
            [x[0] for x in best_combine],
            best_bets[2],
            best_bets[1],
            all_odds_combine[best_combination][best_match_combine]["odds"],
            sport,
            combinaisons=convert_indices_to_opponents(
                list_combinations[best_combination],
                [x[0] for x in best_combine], sport))
    else:
        print("No match found")