Polymarket Bot Tutorial · Chapitre 16 sur 32

Arbitrage statistique sur Polymarket : paires cross-market (événements corrélés), spreads Polymarket-vs-Kalshi, mean reversion, et comment dimensionner les positions stat-arb lorsque les marchés finissent par se résoudre.

Ce que couvre ce chapitre

L'arbitrage statistique sur Polymarket exploite des mauvaises évaluations transitoires entre marchés corrélés - le même événement sur Polymarket vs Kalshi, ou des marchés liés au sein de Polymarket lui-même. Les écarts sont faibles (1 à 3 cents en général) et fragiles sur le plan opérationnel. Ce chapitre dit honnêtement ce qui fonctionne, ce qui ne fonctionne pas, et le risque d'exécution multi-leg qui fait échouer la plupart des tentatives.

L'arbitrage statistique cross-market exploite des incohérences de pricing transitoires entre Polymarket et Kalshi, Polymarket et Manifold, ou entre marchés corrélés au sein de Polymarket. Les écarts sont faibles (1 à 3 cents en général) et exigent une exécution rapide sur les deux legs. Ce chapitre est le playbook honnête, y compris la complexité opérationnelle qui fait échouer la plupart des tentatives.

  • Ce que signifie stat-arb sur les prediction markets
  • Exemples de spreads Polymarket-vs-Kalshi
  • Paires au sein de Polymarket (événements corrélés)
  • Mean reversion vs trend continuation
  • Dimensionnement pour des marchés qui se résolvent (et non perpétuels)
  • Risque : divergence au-delà de la résolution
  • Code : monitor de paires et trigger de seuil

Ce que signifie stat-arb sur les prediction markets

L'arbitrage statistique sur les prediction markets consiste à trader l'écart entre deux marchés qui devraient être pricés de manière cohérente. Trois variantes sont courantes sur Polymarket.

  • Cross-venue : le même événement sur Polymarket et Kalshi (ou Manifold, PredictIt). Le pricing devrait converger ; en pratique, il dérive de 2 à 5 cents.
  • Same-event-pair : parent vs somme des legs dans les marchés multi-outcome NegRisk. L'invariant sum-to-1 permet d'arb quand la somme des legs est inférieure à 1,0.
  • Correlated-event-pair : deux marchés sur des résultats liés (par ex. « Trump président au 1er janvier » vs « Trump président au 1er mars »). Ils devraient se trader à moins de 2 à 3 cents l'un de l'autre.

Les écarts sont faibles. La complexité opérationnelle est bien réelle. La plupart des tentatives échouent à l'exécution, pas en théorie.

Exemples de spreads Polymarket-vs-Kalshi

D'après l'observation en 2025-26, Polymarket et Kalshi listent les mêmes grands événements US, mais les pricent de façon systématiquement différente de 1 à 4 cents. L'écart existe pour des raisons structurelles qu'il faut modéliser dans tout arb.

Facteurs structurels :

  • Fee asymmetry : Kalshi prend 4 à 7 % sur les trades gagnants (selon le marché) ; Polymarket prend 0 fee côté taker. La math de l'arb doit intégrer le coût de Kalshi.
  • Settlement risk premium : lorsqu'un market est ambigu à résoudre, l'UMA d'une venue peut se résoudre différemment des juges de l'autre. Le marché intègre ce risque.
  • Trader population : Polymarket attire davantage un public jeune et crypto-native ; Kalshi attire davantage des profils pro / hedge. Ils ne sont pas systématiquement d'accord sur les mêmes événements.

L'arb fonctionne lorsque l'écart dépasse la prime structurelle plus les frais. Un écart de 5 cents sur un marché où la prime structurelle est de 1c et les fees combinés de 1c représente un vrai edge de 3c.

Paires au sein de Polymarket (événements corrélés)

Au sein de Polymarket, les paires d'événements corrélés sont plus faciles à arb qu'en cross-venue. Même structure de frais, même wallet, exécution atomique possible.

Exemples qui affichent régulièrement des incohérences de pricing :

  • Trump président à la date A vs Trump président à la date B (où B est postérieure à A de moins de 90 jours).
  • Bitcoin atteindra 100k $ d'ici le 31 juillet vs 100k $ d'ici le 31 août.
  • Legs Yes vs No sur le même marché binaire (la somme devrait = 1,0 ; elle dérive parfois jusqu'à 1,04 dans les books peu profonds).

L'arb Yes+No=1 est le plus propre : lisez les deux legs du même marché, envoyez des FOK sur les deux si la somme passe sous 0,97 (en tenant compte de la spread tax). Le capital requis est à peu près équivalent sur chaque leg ; l'exécution est atomique quand les deux fills reviennent dans la même réponse.

Mean reversion vs trend continuation

Deux régimes de stat-arb. Mean reversion : la paire s'est écartée pour une raison de bruit ; vous pariez sur la convergence. Trend continuation : la paire commence à diverger parce qu'une nouvelle information est arrivée ; vous pariez sur une divergence supplémentaire.

Les distinguer est la partie difficile. Heuristique : si la divergence s'est produite sur un volume visible (un whale a balayé le book d'un leg), c'est une news - il ne faut la contrer que si vous avez un modèle. Si elle a dérivé lentement avec peu de volume, c'est du bruit - tradez la reversion avec confiance.

Pour les nouveaux builders : tradez uniquement la mean reversion, sur des paires dont la divergence est inférieure à 1 écart-type de la dérive historique. La trend continuation exige un modèle capable d'intégrer la news ; sans cela, vous tradez contre le flow informé.

Dimensionnement pour des marchés qui se résolvent (et non perpétuels)

Les prediction markets se résolvent. Les paires crypto ne le font pas. Cela change la math.

Une position de pair-arb sur Polymarket a un calendrier de payout fixe : lorsque les deux marchés se résolvent, la différence entre le spread prévu et le spread réel est verrouillée. Il n'y a pas de rollover, pas de détention infinie.

Implication pour le sizing : le maximum que vous pouvez détenir est borné par le time-to-resolution, car le capital est bloqué jusqu'à cette échéance. Une paire qui se résout dans 6 mois peut vous rapporter 3c par share, mais vous ne pouvez pas réallouer ce capital entre-temps si les deux marchés sont entièrement dimensionnés.

La bonne manière de voir les choses : le stat-arb sur Polymarket est une série de trades à durée bornée, pas une stratégie continue. Comparez le PnL par unité de capital immobilisé et par jour, pas le PnL brut.

Risque : divergence au-delà de la résolution

Le pire scénario en stat-arb, c'est que votre pari sur la convergence soit faux parce que la prémisse sous-jacente était fausse. Exemples :

  • Vous avez shorté « Trump président au 1er avril » en espérant que cela converge vers « Trump président au 1er mars » - mais le marché de la date 1 se résout YES et celui de la date 2 se résout NO à cause d'une destitution en mars. Votre thèse « le spread devrait être plat » était fausse.
  • Vous avez fait un arb Polymarket vs Kalshi sur le même gagnant des NBA Finals. Polymarket se résout sur l'équipe qui a gagné la série officielle ; Kalshi se résout selon une définition légèrement différente qui traite les tie-breakers en overtime différemment. Les deux se résolvent YES selon leurs propres termes, mais dans des directions opposées.

Lisez attentivement les critères de résolution de chaque marché. Un arbitrage cross-venue est à une seule incompatibilité de résolution d'une perte totale sur les deux legs.

Code : monitor de paires et trigger de seuil

Référence : surveiller deux tokens corrélés, déclencher l'arb lorsque le spread franchit le seuil.

def pairs_monitor(token_a, token_b, threshold_cents=3, size=10):
    """Buy A and Sell B when (1 - ask_A) + bid_B > 1 + threshold."""
    while True:
        book_a = fetch_book(token_a)
        book_b = fetch_book(token_b)
        if not (book_a.best_ask and book_b.best_bid):
            time.sleep(2); continue
        # implied: cost of buying A at ask + value of selling B at bid
        edge = (1 - book_a.best_ask) + book_b.best_bid - 1
        if edge > threshold_cents / 100:
            print(f"ARB edge={edge:.3f}; firing")
            r_a = fok_buy(token_a, price=book_a.best_ask, size=size)
            if r_a.status != "matched": continue
            r_b = fok_sell(token_b, price=book_b.best_bid, size=size)
            if r_b.status != "matched":
                # leg A filled, B failed -- unhedged, exit A
                fok_sell(token_a, price=book_a.best_bid, size=size)
        time.sleep(3)

Le cleanup-on-partial-fill est critique. Sans cela, une exécution partielle laisse le bot exposé directionnellement, ce qui est l'opposé même du but du stat-arb.

Questions fréquemment posées

Puis-je faire de l'arbitrage entre Polymarket et Kalshi ?
Oui, lorsque le même événement se trade sur les deux. Des spreads de 2 à 5 cents persistent entre les deux exchanges en raison des différences réglementaires, des structures de frais et des différences d'audience. Le piège : Kalshi est réservé aux US et soumis au KYC, donc il vous faut des comptes sur les deux - consultez notre /guide/polymarket-vs-kalshi/ pour la mise en place. L'arbitrage de spread est réel mais lourd sur le plan opérationnel.
Qu'est-ce qu'un pairs trade dans le contexte Polymarket ?
Deux marchés corrélés dont le ratio de prix mean-revert. Exemple : « Trump gagne 2028 » et « Les Républicains gagnent la Chambre 2028 » - si le trade Trump grimpe de 5 % mais que le trade House n'a pas bougé, le bot achète House et vend Trump (ou l'inverse) en supposant que le ratio revient à la moyenne. L'edge est faible mais constant sur les marchés politiques liquides.
Comment dimensionner une position stat-arb lorsque les deux marchés se résolvent ?
Dimensionnez selon votre plus grande divergence attendue - si votre modèle dit que le spread peut s'écarter de 8 cents avant de revenir, dimensionnez de façon à ce qu'un élargissement de 8 cents ne dépasse pas votre limite de perte. Traitez chaque paire comme un trade indépendant avec une limite de perte stricte. Le stat-arb qui se fait passer pour de l'argent gratuit, c'est comme ça qu'on fait exploser un compte.
L'arb Polymarket-Kalshi est-il persistant ?
Oui, mais il se réduit à mesure que davantage de bots le découvrent. En 2026, nous voyons encore des spreads de 1 à 3 cents persister pendant des heures sur les marchés politiques liquides. Les marchés sports ont des spreads plus serrés. Les tail markets (faible volume) ont des spreads plus larges mais non rentables à trader.
Que se passe-t-il si les deux marchés divergent jusqu'à la résolution ?
Le pairs trade va jusqu'à son PnL complet sur la base des résultats réels - c'est pourquoi le pairs trading sur les prediction markets est fondamentalement borné (contrairement aux perpetuals, où la divergence peut croître indéfiniment). La perte nette sur un pairs trade est plafonnée par l'écart de prix à l'entrée, pas infinie.
Quels outils aident à trouver des paires Polymarket ?
Une correlation matrix sur les marchés actifs est le point de départ. Construisez-la à partir d'historiques de prix sur 30 jours extraits de gamma+CLOB. Cherchez les paires avec un rho > 0,7 historiquement et actuellement mal pricées par rapport à leur ratio habituel. Mettez la matrice à jour chaque semaine - les corrélations se dégradent.