Comment Automatiser ses Paris Polymarket avec Python et l'API ?

Découvrez l'API Polymarket : récupérez les données de marché, analysez les positions des traders, et placez des ordres en Python. Guide pratique avec exemples de code.

Comment Automatiser ses Paris Polymarket avec Python et l'API ?

Polymarket est devenue la plus grande plateforme de paris prédictifs au monde. Des milliards de dollars y sont pariés sur tout : élections, cryptomonnaies, géopolitique, culture. Mais ce qui rend Polymarket particulièrement intéressant pour les algo traders, c’est son API.

L’API expose tout : marchés actifs, volumes, liquidité, positions de n’importe quel utilisateur. En quelques lignes de Python, on peut analyser ce que font les meilleurs traders, ou automatiser ses propres paris.

Alors voyons en quelques minutes les principaux composants de cette API et ce qu'on peut construire avec en Python.

Les 3 API Polymarket : Gamma, Data et CLOB

L’écosystème Polymarket s’articule autour de trois API distinctes, chacune avec sa spécialité.

La première, Gamma API (gamma-api.polymarket.com), donne accès aux données de marché. C’est là qu’on récupère la liste des marchés actifs (donc les sujets sur lesquels parier), leurs volumes, leur liquidité, et les prix en temps réel. Une requête simple suffit pour obtenir les 10 marchés les plus actifs du moment :

response = requests.get(
    f"{GAMMA_API}/markets",
    params={"limit": 10, "active": True, "closed": False, "order": "volume24hr", "ascending": False}
)
markets = response.json()

for m in markets[:5]:
    print(f"{m['question']}")
    print(f"  Volume 24h: ${float(m.get('volume24hr', 0)):,.0f}\\n")

On print les 5 premiers:

Tout le code de cet article est disponible dans le notebook ci-dessous:
https://github.com/CryptoRobotFr/General-code-trading-bot/blob/main/notebook-polymarket-api.ipynb

La deuxième, Data API (data-api.polymarket.com), se concentre sur les données utilisateurs. Elle permet de consulter les positions de n’importe quelle adresse publique. Un outil précieux pour analyser ou copier ce que font les “baleines” ou les traders performants (nous reviendrons dessus).

La troisième, CLOB API (clob.polymarket.com), est le cœur du trading. C’est elle qui gère le carnet d’ordres et permet de placer des paris. Pour cette dernière, Polymarket fournit un wrapper Python officiel, py-clob-client, qui simplifie considérablement les interactions.

Point Important : les deux premières API sont entièrement publiques. Aucune clé API, aucune authentification. Il suffit d’envoyer une requête HTTP pour obtenir les données. Seule la CLOB API nécessite une signature cryptographique (API KEY) pour placer des ordres — ce qui est logique, puisqu’il s’agit d’engager de l’argent sur notre compte.

Récupérer le Carnet d'Ordres Polymarket en Python

Imaginons qu’on souhaite analyser un marché spécifique. La première étape consiste à récupérer ses informations via Gamma API. Chaque marché retourné contient une question (par exemple “Le Bitcoin atteindra-t-il 100 000$ en 2025 ?”), un volume, une liquidité, et surtout des Token IDs.

Ces Token IDs sont essentiels à comprendre. Sur Polymarket, parier revient à acheter des tokens. Chaque marché possède un token YES et un token NO. Si on pense que l’événement va se produire, on achète du YES. Sinon, du NO. Le prix du token reflète la probabilité estimée par le marché : un YES à 0.60$ signifie que le marché estime la probabilité à 60%.

market = markets[6]
clob_token_ids = json.loads(market['clobTokenIds'])
yes_token_id = clob_token_ids[0]
no_token_id = clob_token_ids[1]
print(*f*"Market: {market['question']}")
print(*f*"YES token: {yes_token_id}")
print(*f*"NO token: {no_token_id}")

Une fois le token identifié, on peut consulter le carnet d’ordres via le client CLOB. Le carnet montre les ordres d’achat (bids) et de vente (asks) en attente, avec leurs prix et leurs tailles.

client = ClobClient(CLOB_API)
book = client.get_order_book(yes_token_id)

print("Top 5 Bids (buy orders):")
for bid in sorted(book.bids, key=lambda x: float(x.price), reverse=True)[:5]:
    print(f"  {bid.price} | {bid.size}")

print("\\nTop 5 Asks (sell orders):")
for ask in sorted(book.asks, key=lambda x: float(x.price))[:5]:
    print(f"  {ask.price} | {ask.size}")
    
mid = client.get_midpoint(yes_token_id)
spread = client.get_spread(yes_token_id)

print(f"\\nMidpoint: {float(mid['mid']):.4f}")
print(f"Spread: {float(spread['spread']):.4f}")

Ces informations permettent d’évaluer la liquidité d’un marché avant d’y entrer. Un spread large signale un marché peu liquide, où les ordres peuvent être exécutés à des prix défavorables.

Placer un Ordre sur Polymarket via l'API Python

Pour passer à l’action, il faut d’abord s’authentifier. Le client CLOB nécessite une clé privée (aller dans l’onglet “Builders” de votre compte puis “Export Private Key”).

FUNDER_ADDRESS = "your-wallet-address"  # For proxy wallets
PRIVATE_KEY = "your-private-key-here"  # Never commit this

# Signature types:
# 0 = EOA (MetaMask, hardware wallet)
# 1 = Email/Magic wallet
# 2 = Browser wallet proxy
SIGNATURE_TYPE = 1

auth_client = ClobClient(
    CLOB_API,
    key=PRIVATE_KEY,
    chain_id=137,
    signature_type=1,
    funder=FUNDER_ADDRESS
)

creds = auth_client.derive_api_key()
auth_client.set_api_creds(creds)

Une fois authentifié, deux types d’ordres sont disponibles : limit et market. Le processus de placement d'un ordre se fait en trois étapes : créer l'ordre, le signer, puis l'envoyer. La signature cryptographique prouve que c'est bien le propriétaire du wallet qui passe l'ordre.

order = OrderArgs(
    token_id=yes_token_id,
    price=0.50,
    size=10.0,
    side=BUY
)

signed_order = auth_client.create_order(order)
response = auth_client.post_order(signed_order, OrderType.GTC)

Cet exemple place un ordre limit : on fixe un prix maximum (ici 0.50$), et l'ordre reste dans le carnet jusqu'à ce qu'un autre trader accepte de vendre à ce prix. Pour un ordre market qui s'exécute immédiatement au meilleur prix disponible, on utilise MarketOrderArgs avec un montant en dollars au lieu d'un prix et d'une quantité de tokens (voir notebook).

Analyser les Positions des Traders Polymarket (Copy Trading)

La Data API ouvre beaucoup de possibilités d'automatisation, par exemple : voir ce que font les autres traders. Toute adresse wallet peut être interrogée pour récupérer ses positions actuelles.

def get_user_positions(wallet_address):
    """Get a user's current positions."""
    url = f"{DATA_API}/positions"
    params = {"user": wallet_address}
    response = requests.get(url, params=params)
    return response.json()
    
address = "" # paste address here 
positions = get_user_positions(address)
positions

Cette transparence est inhérente à la blockchain : toutes les transactions sont publiques. Polymarket ne fait que faciliter l’accès à ces données. Les cas d’usage sont nombreux : identifier les “smart money” qui accumulent des positions, repérer les traders qui ont un track record impressionnant, ou simplement surveiller l’activité sur un marché donné.

Construire un Bot de Trading Polymarket : Prochaines Étapes

Ce qu’on a couvert ici n’est que la surface des possibilités. Récupérer des données et placer des ordres, c’est le socle. Mais les vraies opportunités émergent quand on commence à modéliser.

Une question intéressante est par exemple : Polymarket se trompe-t-il ? Si le marché estime une probabilité à 40%, et qu’un modèle personnel l’estime à 55%, il y a potentiellement un edge à exploiter. C’est exactement ce que font les traders les plus actifs de la plateforme, certains avec des gains à six chiffres.

Pour construire ce type de modèle, il faut aller au-delà de l’API : simulations Monte Carlo, comparaison avec les prix des options crypto, critère de Kelly pour le sizing des positions. Des sujets techniques, mais accessibles avec les bonnes ressources.

C’est exactement ce que l’on a développé dans notre vidéo récente :

Nous montrons comment générer des milliers de simulations de prix, comparer ses estimations de probabilité avec celles de Polymarket, et identifier des opportunités. Le code est open source, le raisonnement est détaillé, et c’est une excellente porte d’entrée pour ceux qui veulent transformer l’analyse en stratégie concrète !