File size: 3,979 Bytes
2001541
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#!/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())