#!/usr/bin/env python3 """ 🤖 Polymarket Ultra Bot — Script de lancement principal. Usage: # Mode paper trading (simulation) python run_bot.py # Mode paper trading avec durée limitée python run_bot.py --duration 3600 # Mode live (ATTENTION: utilise de vrais fonds) python run_bot.py --live --private-key 0x... # Stratégie spécifique python run_bot.py --strategies arbitrage # Configuration avancée python run_bot.py --max-exposure 10000 --poll-interval 1.0 --strategies arbitrage,value_bet """ import argparse import asyncio import logging import sys from polymarket_bot import PolymarketBot, BotConfig def parse_args(): parser = argparse.ArgumentParser( description="🤖 Polymarket Ultra Bot — Trading bot ultra efficace", formatter_class=argparse.RawDescriptionHelpFormatter, ) # Mode parser.add_argument("--live", action="store_true", help="Mode LIVE (vrais fonds). Par défaut: paper trading") parser.add_argument("--private-key", type=str, default="", help="Clé privée Polygon (requise pour le mode live)") # Durée parser.add_argument("--duration", type=int, default=None, help="Durée max en secondes (défaut: infini)") parser.add_argument("--max-cycles", type=int, default=None, help="Nombre max de cycles") # Stratégies parser.add_argument("--strategies", type=str, default="arbitrage,value_bet,leader_follower", help="Stratégies actives (séparées par des virgules)") # Capital & Risques parser.add_argument("--capital", type=float, default=10000.0, help="Capital initial en USD (défaut: 10000)") parser.add_argument("--max-exposure", type=float, default=5000.0, help="Exposition max totale en USD (défaut: 5000)") parser.add_argument("--max-daily-loss", type=float, default=500.0, help="Perte journalière max en USD (défaut: 500)") parser.add_argument("--kelly", type=float, default=0.25, help="Fraction Kelly (défaut: 0.25 = quart Kelly)") # Polling parser.add_argument("--poll-interval", type=float, default=2.0, help="Intervalle de polling en secondes (défaut: 2.0)") # Filtres parser.add_argument("--min-volume", type=float, default=10000.0, help="Volume minimum des marchés (défaut: 10000)") parser.add_argument("--arb-min-spread", type=float, default=0.02, help="Spread minimum pour l'arbitrage (défaut: 0.02)") # Logging parser.add_argument("--log-level", type=str, default="INFO", choices=["DEBUG", "INFO", "WARNING", "ERROR"], help="Niveau de log (défaut: INFO)") return parser.parse_args() async def main(): args = parse_args() config = BotConfig( private_key=args.private_key, dry_run=not args.live, strategies=args.strategies.split(","), max_total_exposure_usd=args.max_exposure, max_daily_loss_usd=args.max_daily_loss, kelly_fraction=args.kelly, poll_interval_seconds=args.poll_interval, min_market_volume=args.min_volume, arb_min_spread=args.arb_min_spread, log_level=args.log_level, ) if args.live: if not args.private_key: print("❌ ERREUR: --private-key requis en mode live") sys.exit(1) print("⚠️ MODE LIVE ACTIVÉ — Trading avec de vrais fonds!") print(" Appuyez sur Ctrl+C pour arrêter à tout moment.") print() bot = PolymarketBot(config) bot.engine.portfolio.balance_usd = args.capital await bot.run( max_cycles=args.max_cycles, duration_seconds=args.duration, ) if __name__ == "__main__": asyncio.run(main())