Этот проект представляет собой систему автоматизации спортивных ставок, которая интегрирует данные из разных источников, таких как Pinnacle и другие букмекеры, для выявления и использования выгодных возможностей для ставок. Система анализирует коэффициенты, сопоставляет события и предоставляет информацию для принятия решений о ставках.
project_root/
├── parsers/
<-- получение и парсинг данных, Flask
├── matching/
<-- сопоставление матчей
├── automation/
<-- анализ, размещение ставок, Flask
├── pinnacle_recheck/
├── csv_generator/
├── csv_merge/
├── json_to_csv/
├── match_csv_files/
├── analyzer.py
<-- анализ данных от парсеров
├── client.py
├── utils.py
├── bookmakers.json
<-- конфиг букмекеров: порт, путь
├── match_limits.json
<-- завистимости д/проекта
├── placed_bets_ids.json
<-- завистимости д/проекта
└── requirements.txt
<-- завистимости д/проекта
1. Получение и парсинг данных: Система получает данные о коэффициентах и матчах от Pinnacle и других букмекеров, используя специализированные парсеры. 2. Сопоставление матчей: Модуль matching/ отвечает за сопоставление событий между данными из разных источников, обеспечивая точное сравнение коэффициентов. 3. Анализ коэффициентов: analyzer.py анализирует полученные коэффициенты, сравнивает их между букмекерами и выявляет потенциально выгодные ставки. 4. Автоматическое размещение ставок: Модуль automation/ принимает решения о размещении ставок на основе анализа и автоматически размещает их у выбранных букмекеров. 5. Веб-интерфейс: Предоставляется веб-интерфейс для мониторинга коэффициентов и управления ставками. 6. Отчетность: Система создает CSV отчеты и отправляет уведомления через Telegram-бота.
Установите необходимые зависимости:
pip install -r requirements.txt
Настройте учетные данные API и токены в соответствующих конфигурационных файлах. Запустите парсеры для сбора данных от букмекеров:
python /parsers/[bookmaker_name]/main.py
Запустите AdvancedAnalyzer для обработки и анализа данных:
python analyzer.py
Запустите модуль сопастовления данных:
python /matching/main.py
Для автоматического размещения ставок запустите модули автоматизации:
python automation/[bookmaker_name]/main.py
Откройте веб-интерфейс для мониторинга и управления ставками.
project_root/
├── parsers/
│ ├── betcenter/
<--Betcenter (порт 6006)
│ ├── fonbet/
<--Fonbet (порт 6005)
│ ├── lobbet_me/
<--Lobbet (порт 6007)
│ ├── pinnacle2/
<--Pinnacle2 (порт 6000) - источник для сравнения
│ ├── sansabet/
<--Sansabet (порт 6001)
│ ├── unibet_BE/
<--Unibet_BE (порт 6003)
│ ├── unibet_UK/
<--Unibet_UK (порт 6004)
│ └── Стандарт перевода данных.md
│
├── bookmakers.json
Список парсеров букмекеров, их порты, пути
- Сбор данных о предстоящих и live матчах
- Парсинг коэффициентов для различных типов ставок
- Стандартизация данных для унифицированного формата
- Сохранение обработанных данных в формате JSONL
- Передача актуальных данных клиентам через WebSocket
Конфигурационные файлы: Содержат настройки для подключения к API букмекеров, параметры WebSocket-сервера, интервалы обновления данных и другие важные параметры. Основной скрипт (main.py): Координирует весь процесс парсинга, включая инициализацию, запуск асинхронных задач и управление WebSocket-сервером. Модули парсинга: Специализированные скрипты для каждого букмекера, реализующие логику взаимодействия с их API и обработку полученных данных. Вспомогательные функции: Набор утилит для обработки и стандартизации данных, работы с API, управления прокси и т.д. WebSocket-сервер: Обеспечивает передачу обновленных данных подключенным клиентам в режиме реального времени.
Использование асинхронного программирования для эффективной обработки данных. Реализация механизмов ограничения частоты запросов к API букмекеров. Поддержка работы через прокси-серверы для обхода ограничений. Логирование всех важных событий и ошибок для удобства отладки. Гибкая конфигурация, позволяющая настраивать параметры парсинга для каждого букмекера.
Для запуска каждого парсера необходимо:
Установить зависимости из файла [bookmaker]/requirements.txt
.
Настроить конфигурационные файлы для каждого букмекера.
Запустить основной скрипт командой:
python main.py
Парсер будет работать в фоновом режиме, постоянно обновляя данные и отправляя их подключенным клиентам.
Система автоматически сопоставляет спортивные события между букмекерской конторой Pinnacle и другими букмекерами, получая данные через WebSocket от парсеров и используя алгоритмы нечеткого сравнения. Она сохраняет результаты сопоставления в JSON-файлы для каждого букмекера и отправляет регулярные отчеты о проценте успешных сопоставлений через Telegram бот.
project_root/
├── matching/
│ ├── bookmaker_mappings/
<--Маппинги и результаты сопоставления событий (маппинги стран, лиг, команд между Pinnacle и другими букмекерами, cопоставленные/несопоставленные события как для Pinnacle, так и для других букмекеров)
│ ├── __init__.py
│ ├── algo_matching.py
<--Содержит класс MatchPairer, который реализует алгоритм сопоставления матчей между разными букмекерами
│ ├── main.py
<--Основная точка входа в приложение. Координирует весь процесс сбора ставок и WebSocket сервера
│ ├── mappings.py
<--Реализует класс Mappings для управления маппингами между различными букмекерами (страны, лиги, команды)
│ ├── match_finder.py
<--Содержит класс MatchFinder для поиска соответствующих матчей между Pinnacle и другими букмекерами
│ ├── my_test.py
<--Тестовый скрипт для проверки функциональности MatchPairer
│ ├── telegram_config.json
<--Файл настроек для Тм бота
│ └── websocket_client.py
<--Подключение к системе букмекера
Установите необходимые зависимости:
pip install aiogram fuzzywuzzy websockets
Убедитесь, что у вас есть файл bookmakers.json
в корневой директории проекта с настройками для букмекеров.
Создайте файл telegram_config.json
в matching/ с вашим токеном бота и ID чата:
{
"token": "ваш_токен_бота",
"chat_id": "ваш_id_чата"
}
Запустите основной скрипт:
python main.py
- Получение данных о спортивных событиях от различных букмекеров через WebSocket.
- Сопоставление событий между Pinnacle и другими букмекерами.
- Создание и обновление маппингов для стран, лиг и команд.
- Сохранение результатов сопоставления (сопоставленные и несопоставленные события).
- Периодическая отправка отчетов о проценте успешных сопоставлений через Telegram.
- Обработка ошибок и автоматический перезапуск системы при критических сбоях.
WebSocketClient (websocket_client.py): start(): Запускает WebSocket соединения с букмекерами get_data(bookmaker): Получает актуальные данные от конкретного букмекера
MatchPairer (algo_matching.py): match_events(): Основной метод для сопоставления событий между Pinnacle и другим букмекером first_round_matching(): Сопоставление с учетом лиги и страны second_round_matching(): Сопоставление без учета лиги third_round_matching(): Сопоставление с учетом времени, округленного до дня match_on_single_team(): Сопоставление по одной известной команде create_match(): Создает структуру данных для сопоставленного матча
Mappings (mappings.py): add_mapping(): Добавляет новое соответствие в маппинги get_mapped_value(): Получает сопоставленное значение из маппингов save_mapping(): Сохраняет маппинги в JSON файл load_mapping(): Загружает маппинги из JSON файла get_country(), get_league(), get_team(): Получают сопоставленные значения для стран, лиг и команд
MatchFinder (match_finder.py): find_corresponding_match(): Ищет соответствующий матч другого букмекера для матча Pinnacle load_matched_events(): Загружает ранее сопоставленные события из файла find_corresponding_match_by_id(): Ищет соответствие по ID события Pinnacle
PinnacleDataManager: update_matches(): Обновляет данные о матчах Pinnacle get_matches(): Возвращает текущие данные о матчах Pinnacle
Основные асинхронные функции в main.py: process_pinnacle_data(): Обрабатывает и обновляет данные Pinnacle process_other_bookmakers(): Обрабатывает данные других букмекеров и выполняет сопоставление main(): Координирует весь процесс, запускает основные задачи
Функции для работы с Telegram ботом: send_message(): Отправляет сообщение через Telegram бот generate_report(): Генерирует отчет о проценте сопоставления
Функции для работы с файловой системой: save_json_file(): Сохраняет данные в JSON файл load_json_file(): Загружает данные из JSON файла save_matched_events(): Сохраняет сопоставленные события save_unmatched_events(): Сохраняет несопоставленные события
Вспомогательные функции: round_time(): Округляет время до заданного интервала compare_tennis_names(): Специальная функция для сравнения имен теннисистов check_no_value_and_outcome_count(): Проверяет соответствие коэффициентов и исходов
analyzer.py
содержит класс AdvancedAnalyzer, который является ключевым компонентом системы анализа данных букмекеров. Он анализирует и сравнивает коэффициенты между Pinnacle и другими букмекерами, вычисляя потенциальную доходность ставок, фильтруя и обновляя данные, учитывая время их актуальности. Запускает собственный WebSocket сервер для передачи результатов анализа клиентам.
project_root/
├── analyzer.py
<-- ключевой компонент системы анализа данных букмекеров
├── client.py
<-- клиентский скрипт для подключения к WebSocket AdvancedAnalyzer (опция для тестирования)
- Сбор данных о ставках. Система подключается к нескольким букмекерам через WebSocket и непрерывно получает информацию о коэффициентах.
- Обработка и фильтрация данных. Полученные данные организуются по букмекерам, видам спорта и типам матчей. Устаревшая информация удаляется для поддержания актуальности базы данных.
- Сопоставление матчей и исходов. Программа находит соответствующие матчи и исходы между Pinnacle и другими букмекерами для корректного сравнения коэффициентов.
- Анализ коэффициентов. Система сравнивает коэффициенты между Pinnacle и другими букмекерами, рассчитывая потенциальную доходность для каждой возможности ставки.
- Выявление ценных ставок. На основе заданных критериев, таких как минимальная и максимальная величина коэффициентов, определяются наиболее выгодные ставки.
- Распространение результатов анализа. Система запускает WebSocket сервер, который в реальном времени отправляет отфильтрованные и актуальные данные о ценных ставках подключенным клиентам.
AdvancedAnalyzer:
Основной класс, управляющий всем процессом анализа с методами:
analyze_loop()
- запуск циклов анализа данных букмекеров
analyze_bookmaker()
- анализирует данные конкретного букмекера в сравнении с Pinnacle: фильтр свежих данных, удаление устаревшей информации. Если матч сопоставлен, то вызывается analyze_match()
analyze_match()
- анализ конкретного матча, поиск соответсвующих исходов, для каждой пары исходов вызывается analyze_outcome()
analyze_outcome()
- анализ исхода на соответствие критериям, расчет потенциальной доходночти, добавление ставки в values для трансляции на WebSocket.
update_bookmaker_data(): Обновляет внутреннее хранилище данных о ставках
update_value(): Обновляет информацию о потенциально выгодных ставках
filter_fresh_data(): Фильтрует устаревшие данные о ставках
Эта система предназначена для автоматического анализа коэффициентов, отобранных анализатором и размещения ставок.
Корневая папка проекта/
-
automation/
__ init __.py
calculate_stake.py
: <-- Расчет оптимального размера ставки на основе критерия Келли.match_limits.py
: <--Управление лимитами ставок на матчи.check_stake_posible.py
: <--Проверка на неповторяемость ставки (поиск по корневая_папка/placed_bets_ids.json).- [bookmakers] /: <--директория для каждого букмекера
__ init __.py
config.json
: <--Файл настроек для API букмекераbets.py
/place_bets
: <--Скрипт размещения ставки и информации об аккаунте у брокера.main.py
: <--Скрипт проводит основной анализ, принятие решения и размещение ставки.placed_bets.json
: <--Реестр размещенных ставок.
-
csv_generator/
: <--Папка с модулем для создания CSV-отчетов. -
pinnacle_recheck/
: -
csv_merge.py
: <--Обрабатывает, фильтрует файлы matching/bookmaker_mappings/[bookmaker]/matched_events.json и переводит в CSV в match_csv_files/. -
jsonl_to_csv.py
: <--parsers/[bookmaker]/odds_data.jsonl и переводит в CSV в parsers/[bookmaker]/odds_data_csv.jsonl. -
match_limits.json
: <--Управляет лимитами ставок по матчам. -
placed_bets_ids.json
: <--JSON-файл для хранения ID размещенных ставок. -
utils.py
: <--Вспомогательные функции для работы с CSV
match_csv_files
: <--CSV файлы для матчей с наиболее перспективными вариантами ставок для анализа изменений коэффициентов и потенциальную прибыль (ROI) во времени.*_full.csv
: <--Полный набор данных без фильтрации*_filtered.csv
: <--Отфильтрованные данные, содержащие только записи с ROI выше определенного порога (обычно 5%) и удовлетворяющие другим критериям.
- Запуск "монитора" букмекера, прим. FonbetValueMonitor/UnibetValueMonitor при запуске main.py.
- Установка WebSocket соединения с AdvancedAnalyzer для получения отобранных ставок с оценкой прибыльности.
- Анализ возможности ставки. Фильтрация данных по заданным критериям (букмекер, тип события, спорт, минимальный yield). Проверка на дублирование ставок. Сравнение коэффициентов с Pinnacle. Расчет оптимального размера ставки. Проверка лимитов на матч.
- Размещение ставки через API букмекера Обработка результата ставки. Обновление placed_bets.json и match_limits.json. Логирование в bet_log.txt. Генерация CSV-отчета.
- Управление лимитами и проверка дублирования Проверка и обновление лимитов на матч, предотвращение дублирования ставок
- Логирование и отчетность Ведение различных лог-файлов. Сохранение информации об ошибках и подозрительных ситуациях
- Управление лимитами и проверка дублирования Использование функций из automation/match_limits.py Проверка с помощью automation/check_stake_posible.py
- Файлы для веб-интерфейса Flask-сервера (statis/templates/etc)
[bookmaker]Monitor: Основной класс, управляющий процессом мониторинга и ставок: FonbetValueMonitor/UnibetValueMonitor CSVCreator: Компонент для создания CSV-отчетов placed_bets.json: Хранилище информации о размещенных ставках match_limits.json: Файл с лимитами ставок на матчи Различные лог-файлы: bet_log.txt, bet_attempt_log.txt, dangerous_values.txt calculate_stake.py: Расчет оптимального размера ставки на основе критерия Келли. match_limits.py: Управление лимитами ставок на матчи. check_stake_posible.py: Проверка на неповторяемость ставки (поиск по корневая_папка/placed_bets_ids.json). сложность с выделением основных компонентов, т.к. разные подходы у разных букмекеров
Python, WebSocket, Aiogram, Pandas, Flask
Этот проект предназначен для образовательных целей и демонстрации возможностей анализа данных в области спортивных ставок. Пожалуйста, используйте ответственно и в соответствии с местным законодательством.