| |
| """ |
| 🤖 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, |
| ) |
|
|
| |
| 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)") |
|
|
| |
| 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") |
|
|
| |
| parser.add_argument("--strategies", type=str, default="arbitrage,value_bet,leader_follower", |
| help="Stratégies actives (séparées par des virgules)") |
|
|
| |
| 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)") |
|
|
| |
| parser.add_argument("--poll-interval", type=float, default=2.0, |
| help="Intervalle de polling en secondes (défaut: 2.0)") |
|
|
| |
| 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)") |
|
|
| |
| 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()) |
|
|