Skip to Content
BeispieleArbitrage-Scanner

Arbitrage-Scanner

Erstellen Sie einen Scanner, der mehrere Sportsbooks auf Arbitrage-Möglichkeiten überwacht.

FunktionenPermalink zu diesem Abschnitt

  • Echtzeit-Arb-Erkennung über SSE
  • Einsatzberechnungen
  • Plattformübergreifende Benachrichtigungen
  • Protokollierung und Analyse

ImplementierungPermalink zu diesem Abschnitt

Einfacher ScannerPermalink zu diesem Abschnitt

import json import logging from datetime import datetime import requests import sseclient logging.basicConfig(level=logging.INFO) logger = logging.getLogger('arb-scanner') class ArbScanner: def __init__(self, api_key: str, min_profit: float = 1.0): self.api_key = api_key self.min_profit = min_profit self.seen_arbs = set() def start(self): url = f'https://api.sharpapi.io/api/v1/stream?channel=opportunities&min_profit={self.min_profit}' headers = {'X-API-Key': self.api_key} logger.info(f'Starting arb scanner (min profit: {self.min_profit}%)') response = requests.get(url, headers=headers, stream=True) client = sseclient.SSEClient(response) for event in client.events(): if event.event == 'initial': self._handle_initial(json.loads(event.data)) elif event.event == 'arbitrage': self._handle_arb(json.loads(event.data)) def _handle_initial(self, data): opps = data['data']['opportunities'] logger.info(f'Initial: {len(opps)} opportunities') for opp in opps: self._process_arb(opp) def _handle_arb(self, data): for opp in data['data']['opportunities']: self._process_arb(opp) def _process_arb(self, opp): arb_id = f"{opp['event_id']}:{opp['market_type']}" if arb_id in self.seen_arbs: return self.seen_arbs.add(arb_id) logger.info(f"💰 ARB FOUND: {opp['profit_percent']:.2f}%") logger.info(f" Event: {opp['event_name']}") for leg in opp['legs']: logger.info(f" → {leg['sportsbook']}: {leg['selection']} @ {leg['odds_american']} ({leg['stake_percent']:.1f}%)") # Send alert self._send_alert(opp) def _send_alert(self, opp): # Implement your alert logic here pass if __name__ == '__main__': scanner = ArbScanner( api_key='YOUR_API_KEY', min_profit=1.5 ) scanner.start()

Mit EinsatzrechnerPermalink zu diesem Abschnitt

class StakeCalculator: def __init__(self, bankroll: float): self.bankroll = bankroll def calculate(self, arb: dict) -> list: """Calculate actual dollar amounts to bet.""" bets = [] for leg in arb['legs']: stake = self.bankroll * (leg['stake_percent'] / 100) bets.append({ 'sportsbook': leg['sportsbook'], 'selection': leg['selection'], 'odds': leg['odds_american'], 'stake': round(stake, 2), 'potential_return': round(stake * leg['odds_decimal'], 2), }) return bets # Usage calc = StakeCalculator(bankroll=1000) def process_arb(opp): bets = calc.calculate(opp) profit = opp['profit_percent'] * 10 # $10 per 1% on $1000 print(f"💰 {opp['event_name']} - ${profit:.2f} profit") for bet in bets: print(f" Bet ${bet['stake']} on {bet['selection']} @ {bet['sportsbook']}")

Discord-IntegrationPermalink zu diesem Abschnitt

import discord from discord import Webhook import aiohttp class DiscordAlerter: def __init__(self, webhook_url: str): self.webhook_url = webhook_url async def send_arb(self, opp: dict, stakes: list): async with aiohttp.ClientSession() as session: webhook = Webhook.from_url(self.webhook_url, session=session) embed = discord.Embed( title=f"💰 {opp['profit_percent']:.2f}% Arbitrage", description=opp['event_name'], color=0x00FF00, ) for stake in stakes: embed.add_field( name=stake['sportsbook'], value=f"${stake['stake']} on {stake['selection']} @ {stake['odds']}", inline=False, ) await webhook.send(embed=embed)

Bewährte PraktikenPermalink zu diesem Abschnitt

Schnell handelnPermalink zu diesem Abschnitt

Arbs verschwinden innerhalb von Sekunden. Automatisieren Sie, wo immer möglich.

Einsätze rundenPermalink zu diesem Abschnitt

47,32 $ wirkt verdächtig. Runden Sie auf 45 $ oder 50 $.

Ergebnisse erfassenPermalink zu diesem Abschnitt

Protokollieren Sie alle Arbs zur Analyse und für steuerliche Zwecke.

Fehler behandelnPermalink zu diesem Abschnitt

Wenn ein Leg fehlschlägt, sind Sie einem Risiko ausgesetzt. Haben Sie einen Plan.

Last updated on