Appuyez sur ESC pour fermer

Arbitrage sur marchés de prédiction : Polymarket & Kalshi

Les marchés de prédiction, c'est le casino des mauvais parieurs et une mine d'or pour ceux qui savent calculer. Ici, on ne trade pas des actifs, mais des probabilités futures. L'arbitrage, c'est le seul levier pour extraire un profit systématique de ces plateformes, en faisant abstraction du bruit médiatique.

Mathématiques de la chasse au spread

L'arbitrage sur Polymarket ou Kalshi repose sur la traque des cotes "tordues", quand la valeur cumulée des contrats "Oui" et "Non" ne fait pas 1. Si au total tu achètes un résultat pour 0,95 $, et que le paiement à l'échéance est de 1,00 $, ton rendement est de 5,2 %. C'est un trade "sans risque", à condition d'exclure le risque d'exécution (leg risk).

La formule du vrai profit :
Net Profit = (1 - Price_Yes - Price_No) - (Taker Fees + Network Gas)

Si ton taux de rendement final descend sous les 2 %, tu bosses à perte à cause des frais de transaction et du temps passé à monitorer.

Architecture pratique du bot

Oublie l'interface web. Il te faut un agent local qui tape direct dans l'API des plateformes. Voici un template Python opérationnel qui récupère les données et calcule le delta.

import requests
import time
# Init de la session pour la vitesse
session = requests.Session()
def get_best_bid_ask(market_id):
    """
    Récupère l'order book sur Polymarket (via leur API)
    """
    url = f"https://clob.polymarket.com/orderbook/{market_id}"
    response = session.get(url).json()
    # Retourne les meilleurs prix
    return float(response['bids'][0][0]), float(response['asks'][0][0])
def scan_arbitrage(market_yes, market_no):
    # Récup des prix Ask (achat)
    _, ask_yes = get_best_bid_ask(market_yes)
    _, ask_no = get_best_bid_ask(market_no)
    
    total_cost = ask_yes + ask_no
    
    if total_cost < 0.96: # On prévoit 4% pour le gas et le slippage
        print(f"!!! ARBITRAGE : {total_cost:.4f} !!!")
        # Ici tu insères la logique d'appel de ton wallet
    else:
        print(f"Spread trop serré : {total_cost:.4f}")
# ID du marché (à changer selon les events du moment)
# scan_arbitrage('2187654321', '2187654322')

Pièges cachés et jargon pro

  • Resolution Delay : La douleur classique. Le marché ferme, mais ton payout est bloqué à cause d'un litige sur l'oracle UMA. Tes fonds sont "gelés" entre 3 et 14 jours. L'arbitrage, c'est avant tout gérer son fond de roulement.
  • Order Book Ghosting : Les plateformes sont pleines d'ordres fantômes. Tu vois un prix à 0,40 $, mais dès que tu veux bouffer le volume, le prix saute à 0,45 $. C'est le boulot des market makers algorithmiques (AMM) qui protègent leur spread.
  • Cross-Platform Skew : Sur Kalshi, les prix sont souvent décalés par rapport à Polymarket à cause de la compo des traders. Aux US (Kalshi), ils sont plus agressifs sur le hedge des risques politiques, alors que Polymarket, c'est le Far West des crypto-enthousiastes. Compare la corrélation : si le BTC décroche, Polymarket réagit plus vite que Kalshi.

Tableau d'efficacité opérationnelle

ScénarioRisqueRentabilitéRecommandation
Intra-plateformeFaible1-2%Pas rentable pour l'énergie dépensée
Cross-plateformeMoyen3-7%Le terrain idéal pour les bots
Hedge optionnelÉlevé10%+Pour les pros uniquement (faut du capital)

Comment éviter de tout perdre au démarrage

Conseil d'or : évite les marchés avec peu de volume. Si la liquidité des deux côtés est inférieure à 50 000 $, ton entrée en position va provoquer un slippage contre toi. Vise des events avec un volume quotidien de 500k $+.

Détail technique : Si tu es sur Polygon (Polymarket), ne fais jamais de bet avec le gas par défaut. Si tu fais de l'arbitrage, tu es en concurrence avec des MEV-bots. Utilise un maxPriorityFeePerGas supérieur à la moyenne du marché pour garantir que ton ordre passe dans le prochain bloc.

Pour éviter que ton arbitrage ne devienne un suicide financier par les frais, arrête de chasser les spreads et concentre-toi sur l'exécution. Dans ce game, le gagnant n'est pas celui qui trouve l'écart en premier, mais celui dont le bot compile et envoie la transaction au mempool le plus rapidement.

Anatomie de l'exécution : Pourquoi ton code échoue

Le souci de la plupart des scripts, c'est l'exécution séquentielle. Tu fais un request sur Polymarket, t'attends la réponse, puis request sur Kalshi, tu calcules, et seulement après tu envoies la transaction. Le temps que tu fasses tout ça, les market makers qui tournent sous WebSockets et ont des ordres pré-chargés ont déjà bougé le carnet.

Comment font les pros :

  • WebSockets plutôt que REST : Le polling, c'est de l'histoire ancienne. Tu dois garder des sockets ouverts pour les deux order books. Recevoir les mises à jour en temps réel te fait gagner entre 200 et 800 ms.
  • Multicall/Batching : Au lieu de deux transactions, utilise un smart contract intermédiaire. Le contrat prend tes ordres en un seul appel et les exécute de façon atomique. Si un côté ne passe pas, le contrat annule le second (Revert). Ça te protège contre l'arbitrage "à une jambe" où t'achètes un côté mais le second devient injouable.

Exemple d'exécution optimisée (Concept Solidity)

Si tu bosses sur des réseaux EVM, ton meilleur allié, c'est delegatecall. Ça permet de réaliser l'arbitrage en une seule opération atomique.

// Fragment conceptuel pour l'exécution d'arbitrage
function executeArbitrage(
    address target, 
    bytes calldata data1, 
    bytes calldata data2
) external payable {
    // Exécution des deux achats en un seul bundle
    (bool success1, ) = target.call{value: msg.value / 2}(data1);
    (bool success2, ) = target.call{value: msg.value / 2}(data2);
    
    // Si l'arbitrage échoue, on sort sans pertes
    require(success1 && success2, "Arbitrage execution failed - reverting");
}

Astuces méconnues : Le trading "Event-Driven"

Sur les marchés de prédiction, le prix "saute" souvent non pas à cause du marché, mais à cause d'un changement de statut de l'oracle ou d'une info fraîche qui tombe.

  • Indicateurs avancés : Si tu trades les marchés politiques, branche ton bot sur un feed d'agences de presse (via une API type Bloomberg ou des scrapers Telegram spécialisés). Le prix sur Polymarket réagit à l'info 1 à 3 secondes avant que le gros des traders ne réagisse. Ton job, c'est d'être en position avant que la news ne soit "digérée" dans l'order book.
  • Arbitrage synthétique : Parfois, c'est plus rentable de ne pas arbitrer "Oui/Non" directement, mais d'utiliser des futures. Si la probabilité sur le marché de prédiction explose alors que le future sur l'indice correspondant ne bouge pas, c'est le signe que le marché de prédiction est en surchauffe. Tu short le marché de prédiction et tu achètes le future. Quand la hype retombe, tu clôtures tes deux positions avec du profit.

Checklist avant de lancer ton capital :

  • Benchmarking du Gas : Calcule les frais de gas à 50 Gwei et 200 Gwei. Si le profit de l'arbitrage ne couvre que les 50 Gwei et que le réseau est saturé, coupe le bot.
  • Limite de slippage : N'utilise jamais de Market Orders pour de l'arbitrage. Que des ordres limités, posés juste au-dessus du meilleur ask. Si le prix s'envole, vaut mieux rater le trade que de rentrer dans une exécution perdante.
  • Analyse des données "sales" : Certaines plateformes affichent un "prix moyen pondéré" dans leur API qui ne reflète rien de réel dans le carnet. Parse toujours les asks et les bids en direct, en ignorant la colonne last_price.

L'arbitrage, ici, ce n'est pas la quête du Graal, c'est un travail de répétition sur un avantage mathématique. Moins d'émotion et plus de code, c'est le secret pour que ton solde USDC grimpe plus vite que l'inflation du dollar.


FAQ

Faut monitorer les bid/ask spreads en temps réel via WebSockets sur toutes les plateformes pour capter les moments où la somme des positions "Yes" et "No" passe sous les 1.00. La rentabilité dépend de ta capacité à isoler un net delta qui couvre largement les taker fees et le gas. Obligatoire de tourner des scripts Python pour flaguer ces déséquilibres avant que les market makers ne ajustent le depth de l'order book.

Le yield est consistant seulement si tu priorises l'exécution atomique via des smart contract bundles pour tuer le leg risk. Vise uniquement les marchés à grosse liquidité, >500k$ de volume quotidien. Attention : la rentabilité est plombée par le slippage et le risque de fonds bloqués en cas de litige sur l'oracle. Il faut une archi de bot HFT solide pour sécuriser les meilleurs entry points avant les autres.

Les risques opérationnels sont lourds : leg risk si l'exécution n'est pas complète, séquestration de capital lors des litiges sur l'oracle UMA, et l'adverse selection face aux MEV bots qui scannent le mempool. Pour mitiger, faut router les tx via des RPC privés, rester sur une logique de limit orders stricts, et s'exposer uniquement aux assets avec assez de depth pour absorber ton size sans éclater le price impact.
Astra EXMON

Astra is the official voice of EXMON and the editorial collective dedicated to bringing you the most timely and accurate information from the crypto market. Astra represents the combined expertise of our internal analysts, product managers, and blockchain engineers.

...

Partager votre avis

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués *