Polymarket Bot Tutorial · Chapitre 23 sur 32
Patrons de bot pour les marchés up-down BTC/ETH de 5 minutes sur Polymarket : 288 expirations par jour, exécution critique en termes de latency, sources d'edge, pourquoi la plupart des bots retail perdent, et squelette de code pour la stratégie.
Ce que couvre ce chapitre
La série BTC up/down de 5 minutes de Polymarket se résout 288 fois par jour, ce qui amplifie tout edge sur de nombreuses répétitions. La plupart des bots retail y perdent malgré le volume, car la latency et la barre de l'edge sont fixées par des firms professionnelles. Ce chapitre montre ce qui tient la route.
- Ce que sont les marchés crypto de 5 minutes
- 288 expirations par jour = répétitions cumulatives
- Pourquoi les bots retail y perdent
- Sources d'edge qui tiennent la route
- Budget de latency
- Risque : petit par trade, gros par jour
- Code : squelette de stratégie 5 min
Ce que sont les marchés crypto de 5 min
Les marchés crypto de 5 minutes de Polymarket sont des questions binaires up/down sur le prix du BTC (et de l'ETH). De nouveaux marchés s'ouvrent toutes les 5 minutes ; chacun se résout sur le prix de clôture 5 minutes après l'ouverture, à partir d'un oracle publié.
Cela produit 288 marchés par asset et par jour. L'opportunité de cumul pour tout edge est énorme : même un petit edge par trade devient significatif lorsque vous pouvez le prendre plus de 100 fois par jour.
L'envers du décor : la barre est fixée par des firms professionnelles. Le mid évolue en étroite synchronisation avec le flux de prix sous-jacent, et les books sont généralement minces sur la jambe du mauvais côté.
288 expirations par jour = répétitions cumulatives
Si votre edge est de 0,5c par trade avec un win rate de 55 % et que vous pouvez prendre 60 trades par jour, le PnL quotidien attendu est de 60 × 0,5c = 0,30 $ sur des positions de 10 shares = 3 $/jour. Cela semble faible, mais cela se cumule : 252 jours de trading × 3 $ = 750 $/an avec une exposition en capital quasi nulle (les positions se résolvent en moins de 5 minutes).
Pour que le même edge produise 750 $/an sur un binary qui se résout une fois par trimestre, il faudrait une taille par trade beaucoup plus grande et des queues de perte beaucoup plus larges.
Les marchés de 5 min sont le seul segment sur Polymarket où des edges petits mais fréquents s'additionnent pour former un revenu annuel significatif.
Pourquoi les bots retail y perdent
Trois modes d'échec qui tuent systématiquement les entrants retail.
- Latency : les firms professionnelles passent des ordres en 50-100 ms ; les bots retail prennent 1 à 3 secondes. Au moment où vous déclenchez, le prix est déjà sur le nouveau mid.
- Asymétrie d'information : le CEX sous-jacent (Binance, Coinbase) imprime le trade tape plus vite que le flux de prix de Polymarket. Les bots sans abonnement direct au CEX tradent sur des données obsolètes.
- Taxe du spread : avec une cadence de 5 min, même un spread de 0,5c × 60 trades = 30c par jour de coût inévitable. L'edge doit dépasser cela avant d'être rentable.
Les bots retail atteignent généralement l'équilibre ou perdent parce qu'ils ne peuvent pas dépasser les pros et qu'ils ne peuvent pas échapper à la taxe du spread. Les stratégies qui fonctionnent pour le retail ne sont pas des edges contre les pros ; ce sont des stratégies à décision lente avec des avantages informationnels spécifiques.
Sources d'edge qui tiennent la route
Ce qui fonctionne pour le retail sur les marchés 5 min.
- Biais directionnel piloté par le funding rate : un funding extrêmement positif sur les perp futures anticipe un mean reversion ; tradez à contre-sens du funding rate.
- Fenêtres de clearing de open interest : au début de chaque heure, les liquidations sur les perp futures sont plus probables ; fadez les mouvements extrêmes dans cette fenêtre.
- Arbitrage de résolution en fin de fenêtre : dans les 30 dernières secondes d'une fenêtre de 5 minutes, le prix de résolution devient de plus en plus prévisible ; le book offre souvent une liquidité fine à des probabilités qui ne correspondent pas au live tape.
Ce qui ne fonctionne pas : les signaux techniques purs (RSI, moving averages), le simple copier-coller de momentum, tout ce qui exige que le bot soit plus rapide que les pros.
Budget de latency
Pour une stratégie 5 min viable, la répartition du budget est approximativement :
- Lecture de la source de signal (CEX trade tape, funding rate) : 100-300 ms
- Calcul de la décision : 50 ms
- Passage d'un ordre FOK : 200-500 ms
- Réception de la confirmation de fill : 200 ms
Total : 550-1050 ms. Réalisable sur un VPS avec paid RPC et un abonnement direct au WebSocket du CEX. Non réalisable sur un laptop à la maison ni avec des API gratuites.
Les stratégies nécessitant moins de 500 ms au total relèvent du territoire pro ; le retail ne doit pas y concurrencer.
Risque : petit par trade, gros par jour
Le sizing pour les marchés 5 min : petit par trade, plafonné au quotidien.
- Par trade : 5-15 shares (1-6 $) par marché. En dessous de 5, les ventes GTC deviennent impossibles ; au-dessus de 15, vous traversez le book à l'entrée.
- Total quotidien : 50-100 trades. Au-delà, vous créez une exposition corrélée à une seule particularité d'oracle.
- Kill switch de PnL quotidien : stoppez si le PnL cumulé baisse de plus de 10 $ (ou 5 % du capital alloué). Les mauvaises journées sur les marchés 5 min sont généralement dues à une hypothèse de stratégie cassée ; survivez à la journée, déboguez, redéployez.
L'asymétrie entre la taille par trade et le nombre quotidien est intentionnelle. Vous jouez la largeur, pas la profondeur.
Code : squelette de stratégie 5 min
Référence : la boucle de trading pour un bot 5 min piloté par le funding rate.
def five_min_loop():
while True:
wait_for_next_window_open() # blocks until xx:x0:00 or xx:x5:00
markets = find_open_5min_markets("btc")
if not markets: continue
funding = fetch_perp_funding_rate("BTCUSDT")
bias = "DOWN" if funding > 0.001 else "UP" if funding < -0.001 else None
if bias is None: continue
market = markets[0]
token = market["clobTokenIds"][0 if bias == "UP" else 1]
book = fetch_book(token)
if not book.best_ask or book.best_ask > 0.55: continue
place_fok(token, "BUY", book.best_ask + 0.01, 10)
Ajouts de la version production : suivre les positions sur la fenêtre 5 min pour un timing de sortie précis, faire du paper-trade pendant 30 fenêtres avant le live, stopper en cas de pertes consécutives.





