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())
|