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énario | Risque | Rentabilité | Recommandation |
|---|---|---|---|
| Intra-plateforme | Faible | 1-2% | Pas rentable pour l'énergie dépensée |
| Cross-plateforme | Moyen | 3-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.