Polymarket ha sostituito RTDS: la migrazione a PolyBolt
Il 15 settembre Polymarket ha reso RTDS legacy per i prezzi di riferimento, senza troppo clamore. Se invii lo spot in streaming a un bot, sono cambiate sei cose insieme, compresi la fonte di prezzo e il formato dei simboli, e la maggior parte fallisce in silenzio invece che in modo evidente.
Cosa è cambiato e quando
Il 15 settembre 2026 Polymarket ha rilasciato PolyBolt su wss://ws-live-v2.polymarket.com/ws e ha reso RTDS legacy per i prezzi di riferimento. crypto_prices, crypto_prices_chainlink ed equity_prices corrispondono tutti a nuovi canali. Il topic comments resta su RTDS per ora.
Se il tuo bot riceve in streaming i prezzi spot per decidere qualcosa (e sui mercati crypto Up/Down quasi tutti lo fanno), la cosa ti riguarda. Sono cambiate sei cose insieme, e il problema è che diverse falliscono in silenzio: resti connesso, semplicemente smetti di ricevere i prezzi che credi di ricevere.
Le sei breaking change
| RTDS (legacy) | PolyBolt | |
|---|---|---|
| URL | wss://ws-live-data.polymarket.com | wss://ws-live-v2.polymarket.com/ws |
| Autenticazione | Pubblica | Credenziali API del CLOB obbligatorie |
| Heartbeat | Il client invia PING ogni 5s | Niente da inviare: il server fa ping ogni 25s |
| Frame di subscribe | {action, subscriptions:[{topic,type,filters}]} | {op, subscriptions:[{channel,filter}]}: filter è un oggetto, non una stringa |
| Fonte crypto | Binance / Chainlink | Pyth |
| Simboli | btcusdt, btc/usd | btcusd: minuscolo, USD e non USDT |
Le due che ti faranno perdere più tempo
La fonte del prezzo è passata a Pyth. Il tuo prezzo di riferimento ora arriva da un oracolo diverso da quello del 14 settembre. Se hai calibrato le soglie sui tick di Binance, ricalibrale. E il formato dei simboli è cambiato: btcusdt e btc/usd ora sono entrambi sbagliati. Un simbolo errato non genera un’eccezione; ottieni una sottoscrizione che non consegna mai nulla.
Mappatura dei canali
| Topic RTDS | Canale PolyBolt | Filtro | Nota |
|---|---|---|---|
crypto_prices | price.crypto | {"symbol":"btcusd"} | Fonte Binance → Pyth; USDT → USD |
crypto_prices_chainlink | price.crypto | {"symbol":"btcusd"} | Fonte Chainlink → Pyth |
crypto_prices_twap_sixty | price.crypto.twap | {"symbol":"btcusd","window_seconds":60} | TWAP Chainlink a 60s |
crypto_prices_twap_thirty | Nessuno | — | Non esiste un sostituto |
equity_prices | price.equity | {"symbol":"aapl"} | Stesso catalogo, in minuscolo |
Il TWAP a 30 secondi è semplicemente sparito
crypto_prices_twap_thirty non ha un equivalente in PolyBolt. Conta più di quanto sembri: dopo il 7 agosto i mercati crypto a 5 minuti si sono risolti per breve tempo su un TWAP a 30 secondi, poi il 14 agosto sono passati a 60 secondi. Se qualcosa nel tuo stack usa ancora la finestra di 30s, non ha un percorso di migrazione: ti servono il canale a 60s e un modello ricalibrato.
Connessione
Prima autenticati sulla connessione aperta, attendi la conferma, poi fai subscribe. I canali dei prezzi di riferimento rifiutano le sottoscrizioni non autenticate.
{
"op": "auth",
"rid": "a1",
"auth": {
"apiKey": "<api key>",
"secret": "<api secret>",
"passphrase": "<api passphrase>"
}
}Sono le stesse credenziali che derivi per il trading sul CLOB: chiave, secret e passphrase insieme. Se non le hai mai create, la guida agli endpoint spiega il flusso L1/L2.
Tre cose che PolyBolt ti dà e RTDS no
- Uno snapshot a ogni subscribe. Ogni sottoscrizione restituisce i prezzi dei due minuti precedenti con
snapshot: true, eventualmente vuoti. Inizializza lo stato locale da lì, poi applica gli aggiornamenti live. Con RTDS un simbolo poco attivo ti dava solo silenzio, e non avevi idea se fossi connesso o semplicemente tra un tick e l’altro. - Un
seqdenso e un contatoredropped. Finalmente puoi rilevare i buchi. RTDS non aveva alcuna sequenza, quindi un messaggio perso era invisibile. Tieni traccia diseqper canale e tratta ogni salto come un segnale per risincronizzarti. - Codici di chiusura tipizzati invece del semplice
1006:4001autenticazione,4002consumer lento,4003draining,4008policy. Un4002significa che sei tu troppo lento a svuotare il socket: è un bug del consumer, non un problema di rete, e riconnettersi non lo risolverà.
Usa full_accuracy_value, non value
value è un float; full_accuracy_value è una stringa decimale esatta. Su un mercato che si regola con un confronto di TWAP, non vuoi che sia l’arrotondamento di un float all’ottava cifra decimale a decidere un’operazione. Inoltre: i frame TWAP legacy usavano window_s e un prezzo in virgola fissa E18. PolyBolt invia una stringa decimale: non applicare la conversione E18, o i tuoi prezzi saranno sbagliati di diciotto ordini di grandezza.
Limiti di connessione
RTDS non ne pubblicava nessuno. PolyBolt sì, e superarne uno qualsiasi chiude il socket con 4008:
| Limite | Valore |
|---|---|
| Sottoscrizioni per connessione | 64 |
| Frame di subscribe al secondo | 20 |
| Dimensione massima del frame | 64 KB |
| Frame di autenticazione | 8 |
Il limite di 64 sottoscrizioni è quello su cui pianificare. Se segui BTC, ETH e SOL su spot e TWAP sono sei, quindi c’è ampio margine per un bot crypto, ma un sistema che si estende a tutto il catalogo equity lo raggiungerà.
Migrare un bot, in ordine
- Deriva le credenziali API del CLOB se non le hai. RTDS era pubblico; PolyBolt no. È il passo che blocca tutto il resto.
- Cambia l’URL in
wss://ws-live-v2.polymarket.com/ws. - Elimina l’heartbeat del client. Il loop di
PINGogni 5 secondi non è solo inutile, ora è rumore. Il server ti manda un ping ogni 25 secondi. - Riscrivi i frame di subscribe:
action→op,topic→channel, efilterdiventa un oggetto JSON invece di una stringa. - Correggi ogni simbolo:
btcusdtebtc/usddiventano entrambibtcusd. Minuscolo, USD. - Gestisci il frame di snapshot, così non tratti due minuti di backfill come tick live.
- Aggiungi il rilevamento dei buchi su
seqe risincronizzati in caso di salto. - Ricalibra tutto ciò che era tarato sui prezzi di Binance. Ora la fonte è Pyth.
Se usi l’SDK TypeScript
@polymarket/client dalla 0.11.0 in poi gestisce tutto questo: client.subscribe([{ topic: "prices.crypto", symbols: ["btcusd"] }]) su un SecureClient autenticato, e iteri eventi tipizzati con i tipi subscribe e update. Si occupa per te di autenticazione, framing e heartbeat: vedi la guida all’SDK per il quadro più ampio della migrazione.
Cosa non cambia
Vale la pena essere precisi, perché è facile migrare più del necessario. I canali market e user del CLOB non sono stati toccati. wss://ws-subscriptions-clob.polymarket.com/ws/market trasporta ancora gli aggiornamenti dell’order book e dei prezzi, vuole ancora un PING dal client ogni 10 secondi e nasconde ancora best_bid_ask, new_market e market_resolved dietro custom_feature_enabled. Si sono spostati solo i prezzi di riferimento. I dettagli sono nella guida ai WebSocket.
E anche il limite più profondo resta invariato: uno stream ti dà i prezzi dal momento in cui ti connetti. Non può dirti com’era il book martedì scorso. Polymarket restituisce 404 per il book di un mercato risolto e conserva solo circa un punto al minuto di storico dei prezzi, ed è per questo che il backtesting richiede un archivio registrato mentre i mercati erano attivi. Vedi come funzionano i mercati Up/Down o cerca un mercato specifico nella ricerca mercati.
Domande frequenti
- Che cos’è PolyBolt e quando ha sostituito RTDS?
- PolyBolt è il WebSocket di Polymarket per i prezzi di riferimento di crypto, equity e TWAP, lanciato il 15 settembre 2026 su wss://ws-live-v2.polymarket.com/ws. Rende RTDS legacy per i prezzi di riferimento: crypto_prices, crypto_prices_chainlink ed equity_prices corrispondono tutti a nuovi canali PolyBolt. Il topic comments resta su RTDS per ora.
- Serve l’autenticazione per PolyBolt?
- Sì. I canali dei prezzi di riferimento richiedono le credenziali API del CLOB (chiave, secret e passphrase), inviate come frame di autenticazione sulla connessione aperta prima della sottoscrizione. È la principale differenza operativa rispetto a RTDS, che era pubblico. Aspetta che il server confermi l’autenticazione prima di inviare i frame di subscribe.
- Cosa ha sostituito crypto_prices_chainlink?
- Il canale price.crypto con filtro {"symbol":"btcusd"}. Oltre al nome cambiano due cose: la fonte passa da Chainlink a Pyth e il formato dei simboli passa da btc/usd a btcusd in minuscolo. Per il TWAP Chainlink a 60 secondi usa price.crypto.twap con window_seconds impostato a 60. Il topic del TWAP a 30 secondi non ha un sostituto in PolyBolt.
- PolyBolt richiede ancora un PING dal client?
- No. Con RTDS il client inviava un PING testuale ogni 5 secondi. Su PolyBolt è il server a fare ping ogni 25 secondi e il client non invia nulla, anche se viene accettato un {"op":"ping"} facoltativo. Nota che è diverso dal canale market del CLOB, che non è cambiato e richiede ancora un PING dal client ogni 10 secondi.
- Perché sono connesso a PolyBolt ma non ricevo prezzi?
- Quasi sempre è un problema di formato del simbolo. PolyBolt usa simboli minuscoli che terminano in usd, quindi btcusdt e btc/usd non sono validi: usa btcusd. Un simbolo errato non genera un errore; la sottoscrizione semplicemente non consegna mai nulla. Verifica anche che l’autenticazione sia stata confermata prima di inviare il frame di subscribe, e di non trattare il frame di snapshot iniziale come gli unici dati.
- Cosa significano i codici di chiusura di PolyBolt?
- 4001 è un errore di autenticazione, 4002 significa che sei un consumer lento e non svuoti il socket abbastanza in fretta, 4003 significa che il server è in draining e 4008 è una violazione di policy, come superare 64 sottoscrizioni, 20 frame di subscribe al secondo, un frame da 64 KB o 8 frame di autenticazione. Un 4002 è un bug del tuo consumer e non un guasto di rete, quindi riconnettersi senza sistemare il throughput lo farà solo ripetere.
Ottieni i dati storici che Polymarket non conserva
PolyTest registra i mercati crypto Up/Down di Polymarket mentre sono attivi: 240M+ snapshot con 8 livelli di profondità dell’order book, timestamp sotto il secondo e mercati risolti conservati. Inizia con una prova gratuita di 3 giorni.
Continua a leggere
WebSocket di Polymarket: dati in tempo reale che non cadono
Fare polling dell’order book è il modo più comune di bruciare un budget di rate limit senza alcun beneficio. Ecco i quattro stream, le opzioni di sottoscrizione che nessuno documenta e il guasto in cui il tuo bot riceve silenzio e lo scambia per calma.
Come costruire un bot di trading per Polymarket
La maggior parte dei tutorial sui bot per Polymarket si basa su SDK che non esistono più. Questo è il percorso attuale dall’inizio alla fine: cosa installare nel 2026, come funziona davvero l’autenticazione, dove sono i buchi nei dati e i problemi che uccidono i bot nella prima settimana.
L’SDK Python di Polymarket nel 2026 (e la migrazione da py-clob-client)
Se il tuo codice importa ancora ClobClient da py_clob_client, è costruito su un pacchetto superato, come la maggior parte del codice Polymarket che un assistente AI scriverà per te. Ecco l’SDK attuale e come fare il passaggio.