← Torna agli articoli
July 29, 2026
5 min di lettura

Le cascate di liquidazioni come segnale di trading: leggere il flusso forzato e preannunciato

Le cascate di liquidazioni come segnale di trading: leggere il flusso forzato e preannunciato
#liquidazioni
#cascata
#segnale di trading
#defi
#perpetual
#book degli ordini
#microstruttura di mercato
#crypto

La maggior parte del flusso di mercato resta segreta finché non viene eseguita. Un venditore discrezionale decide di vendere quando lo decide; impari le sue intenzioni dal tape, a posteriori. Le liquidazioni delle posizioni a leva sono l'eccezione, e un'eccezione enorme. Una liquidazione è forzata — il titolare della posizione non ha voce in capitolo sul fatto che avvenga — ed è preannunciata — il prezzo esatto al quale si attiva è una funzione deterministica di parametri che sono, on-chain, completamente pubblici e, off-chain, stimabili statisticamente. Ogni posizione long a leva è un ordine market-sell permanente, fermo a un prezzo che comunica a chiunque si prenda la briga di calcolarlo.

Questo riformula l'intero problema. L'articolo complementare sulla meccanica delle liquidazioni di Aave e Compound tratta le liquidazioni dal punto di vista del liquidatore — la corsa infrastrutturale per essere colui che rimborsa il debito deteriorato e incassa il bonus. Questo articolo adotta il punto di vista del trader sullo stesso oggetto: non "come vinco la liquidazione", ma "l'aggregato dei prezzi di liquidazione di tutti gli altri è una mappa del futuro flusso forzato, e posso tradare contro quella mappa". Costruiamo due versioni della mappa — una esatta on-chain, una sfocata sui perp CEX — quantifichiamo quando una catena di liquidazioni diventa auto-rinforzante e dichiariamo, con cautela, cosa il flusso risultante fa al prezzo.

Il grafico on-chain della profondità di liquidazione

Su un money market, il prezzo di liquidazione di una posizione non è stimato. È derivato. Ricordiamo l'health factor dall'introduzione alla meccanica: una posizione è liquidabile quando

HF=iCiPiLTijDjPj<1HF = \frac{\sum_i C_i \, P_i \, LT_i}{\sum_j D_j \, P_j} < 1

con CiC_i che indica le quantità di collaterale, PiP_i i relativi prezzi oracle, LTiLT_i le soglie di liquidazione e DjPjD_j P_j i valori del debito. Non lo ricalcoleremo da capo; lo invertiamo. Prendiamo il caso comune — un singolo collaterale volatile CC (ad esempio WETH) che finanzia un debito stabile DD (USDC). Impostando HF=1HF = 1 e risolvendo rispetto al prezzo del collaterale otteniamo il prezzo di attivazione della posizione:

Pliq=DCLTP_{\text{liq}} = \frac{D}{C \cdot LT}

Quel singolo numero è ciò che il borrower ha reso noto. Dice: se WETH tocca PliqP_{\text{liq}} sull'oracle, questa posizione diventa offerta forzata. E anche la dimensione di quell'offerta è conoscibile — al trigger, un liquidatore rimborsa closeFactor×D\text{closeFactor} \times D di debito e si impossessa di collaterale per un valore pari a repay×(1+bonus)\text{repay} \times (1 + \text{bonus}), quindi all'incirca

QforcedcloseFactorD(1+bonus)Q_{\text{forced}} \approx \text{closeFactor} \cdot D \cdot (1 + \text{bonus})

del valore del collaterale arriva sul mercato (o viene coperto) quando la posizione si attiva.

Prendiamo la posizione concreta dell'introduzione alla meccanica: 10 WETH depositati a $3,000, 20,000 USDC presi in prestito, soglia di liquidazione LT=0.83LT = 0.83, bonus del 5%. Il suo trigger è Pliq=20,000/(10×0.83)=$2,410P_{\text{liq}} = 20{,}000 / (10 \times 0.83) = \char36 2{,}410, e con un close factor del 50% parcheggia a quel prezzo 0.5×20,000×1.05=$10,5000.5 \times 20{,}000 \times 1.05 = \char36 10{,}500 di offerta forzata di WETH. Un borrower, una barra sul grafico. Ripeti l'operazione per ogni borrower del protocollo, raggruppa i risultati per PliqP_{\text{liq}} e ottieni un istogramma: nozionale di vendita forzata in funzione del prezzo. Questo è il grafico on-chain della profondità di liquidazione — il cugino nativo dei DEX di un order book, con la differenza che gli "ordini" sono involontari e i loro prezzi vengono calcolati, non quotati.

Grafico on-chain della profondità di liquidazione: collaterale aggregato di Aave e Compound raggruppato per prezzo di liquidazione in un istogramma della pressione di vendita forzata impilata sotto lo spot

Tre precisazioni necessarie per non trasformare tutto questo in fantasia:

  1. Le posizioni multi-asset non hanno un singolo prezzo di attivazione. Una posizione con due collaterali volatili e due debiti viene liquidata su una superficie nello spazio dei prezzi, non in un punto. La riduzione pratica consiste nel calcolare il trigger lungo l'asse del collaterale volatile dominante mantenendo ogni altro prezzo oracle al suo valore corrente. Questo è corretto per un movimento di un singolo asset e sbagliato per un movimento di un paniere correlato — e conta, perché i crolli correlati sono proprio il momento in cui molti trigger si muovono insieme. Considera il PliqP_{\text{liq}} del singolo asset come una marginale di primo ordine, non come una garanzia.
  2. La vendita forzata \neq un dump di mercato su un'unica venue. I liquidatori competenti non vendono ciecamente a mercato il collaterale sequestrato nel pool disponibile più sottile; lo instradano tra DEX e CEX e spesso lo detengono facendo delta-hedge su un perp invece di realizzare subito il collaterale (il problema dell'exit swap approfondito nell'introduzione alla meccanica). Quindi QforcedQ_{\text{forced}} è un limite superiore del flusso che incide sul prezzo, non una stima puntuale. Una parte confluisce in hedge che non toccano mai lo spot.
  3. I trigger si muovono con l'oracle, non con il mercato. Su Aave e Compound la posizione diventa liquidabile quando l'oracle supera PliqP_{\text{liq}}, e gli oracle si aggiornano secondo una cadenza basata su deviazione e heartbeat, restando indietro rispetto al mercato. Il grafico della profondità è quindi una mappa dei punti in cui il flusso forzato diventa idoneo, subordinata alla prossima trasmissione dell'oracle — una sottigliezza che l'introduzione tratta in dettaglio.

Una terza fonte si colloca tra il grafico del money market e la heatmap CEX: i DEX perp. Hyperliquid, GMX e dYdX v4 gestiscono perpetual a leva come un exchange centralizzato, ma mantengono lo stato delle posizioni on-chain o in una clearinghouse interrogabile. Questo significa che i loro prezzi di liquidazione seguono la stessa formula del margine isolato dei perp CEX — ma sono calcolati da posizioni reali (size, collaterale, ingresso) anziché stimati dall'OI aggregato. Lo stato della clearinghouse di Hyperliquid espone il margine e il mark price di ogni account; le posizioni GMX sono on-chain e vengono liquidate a prezzi derivati dall'oracle tramite keeper. Il risultato pratico: per i DEX perp puoi costruire una mappa delle liquidazioni con una leva in stile CEX ma con la precisione on-chain, molto più vicina all'esattezza del grafico Aave che all'approssimazione della heatmap. Dove una venue pubblica le posizioni, non devi mai tirare a indovinare.

Anche con queste cautele, il grafico on-chain è la mappa del flusso forzato più pulita che esista nei mercati: nessuna ipotesi sulla distribuzione della leva, nessuna size nascosta, ogni input leggibile dallo stato.

La heatmap delle liquidazioni CEX

Gli exchange centralizzati di perpetual ti mettono nella situazione opposta — open interest molto più grande e quasi nessuno dei dettagli a livello di posizione che rendono esatto il grafico on-chain. Non puoi leggere le singole posizioni. Quello che puoi leggere sono l'open interest aggregato e i volumi scambiati. La heatmap delle liquidazioni è ciò che ottieni quando provi a ricostruire il grafico della profondità a partire da questi aggregati più alcune ipotesi, e le ipotesi sono determinanti.

L'aritmetica per posizione è semplice. Per un long lineare a margine isolato (regolato in USDT) entrato al prezzo EE, con leva LL e tasso di maintenance margin mm, la liquidazione scatta quando l'equity scende fino al requisito di mantenimento:

EL+(PE)=EmPliqlong=E(11L+m)\frac{E}{L} + (P - E) = E \cdot m \quad\Longrightarrow\quad P_{\text{liq}}^{\text{long}} = E\left(1 - \frac{1}{L} + m\right)

e simmetricamente Pliqshort=E(1+1Lm)P_{\text{liq}}^{\text{short}} = E\left(1 + \frac{1}{L} - m\right). Fissiamo un ingresso a E=$3,000E = \char36 3{,}000 con m=0.5%m = 0.5\% e percorriamo i livelli di leva:

Leva PliqlongP_{\text{liq}}^{\text{long}} Distanza sotto l'ingresso
$2,415 −19.5%
10× $2,715 −9.5%
25× $2,895 −3.5%
50× $2,955 −1.5%
100× $2,985 −0.5%

La forma di quella colonna è l'intero motivo per cui le heatmap si illuminano appena sotto il prezzo recente: le posizioni ad alta leva vengono liquidate a un soffio dall'ingresso, quindi ovunque sia passato di recente il volume, si trova una banda densa di trigger a 50–100× a una frazione di punto percentuale di distanza. Chi costruisce la heatmap procede così: tratta il volume scambiato di recente come proxy dei punti in cui le posizioni sono state aperte (il loro EE), distribuisce quel volume su un insieme ipotizzato di livelli di leva — 5×, 10×, 25×, 50×, 100× con pesi assunti — proietta ogni porzione sul relativo PliqP_{\text{liq}} e colora l'asse dei prezzi in base al nozionale a leva stimato che viene liquidato lì. Le bande luminose sono zone di liquidazione stimate e dense.

Heatmap delle liquidazioni CEX: nozionale a leva stimato proiettato sui prezzi di liquidazione attraverso diversi livelli di leva, mostrato come bande orizzontali di intensità sopra e sotto il prezzo corrente

Sia chiaro perché questa è un'immagine sfocata e non la gemella del grafico on-chain:

  • La distribuzione della leva è sconosciuta. L'intera heatmap è una convoluzione del volume con un istogramma della leva ipotizzato. Ipotesi diverse spostano le bande luminose. Due fornitori di dati autorevoli pubblicano heatmap visibilmente diverse per lo stesso mercato nello stesso giorno, ed entrambi sono "corretti" dati i loro prior.
  • Il cross-margin rompe la formula per posizione. Il PliqP_{\text{liq}} sopra è un risultato per il margine isolato. Una posizione cross-margin viene liquidata sull'equity dell'intero account, quindi il suo trigger effettivo dipende dalle altre posizioni del trader, dal loro PnL non realizzato e da eventuale collaterale aggiunto durante il movimento — nulla di tutto questo è osservabile. La size in cross-margin è di fatto invisibile allo stimatore.
  • Size nascosta e dinamica. L'open interest è un aggregato netto-più-lordo; non ti dice come si mappa l'OI sui singoli ingressi. I trader aggiungono, riducono e coprono continuamente. Il maintenance margin a livelli (mm cresce con il nozionale della posizione) sposta i trigger delle posizioni grandi rispetto a quelli delle piccole alla stessa leva.
  • La liquidazione avviene a tranche, non istantaneamente. Gli exchange liquidano le posizioni grandi in modo incrementale e instradano il rischio residuo attraverso un insurance fund e l'auto-deleveraging, quindi anche un cluster localizzato correttamente non viene scaricato in un'unica esecuzione.

Il modo corretto di interpretare la heatmap è come un prior su dove è probabile che il flusso forzato sia concentrato, da confermare o smentire con le esecuzioni di liquidazione realizzate (lo stream forceOrder nella sezione sulla pipeline qui sotto), non come un registro. È davvero utile e davvero imprecisa, e fingere il contrario è il modo in cui si finisce travolti proprio dai cluster che si stanno osservando. Per capire perché sui perp si accumula così tanta leva — e perché il costo del funding continua a spingere quelle posizioni verso i rispettivi trigger — vedi arbitraggio del funding rate tra exchange.

Dinamica delle cascate, quantificata

Una singola liquidazione è un punto dati. Una cascata è il loop di feedback, e ha una soglia che si può scrivere. Il loop è meccanico: una vendita forzata colpisce il book → l'impatto sul prezzo muove il mercato → il movimento spinge il livello successivo di posizioni oltre il loro trigger → quelle vengono liquidate → altre vendite forzate → si ripete. Che il fenomeno si spenga o scappi via non è una questione di sentiment; è il rapporto tra due quantità che abbiamo già costruito.

Lavoriamo con variazioni frazionarie del prezzo r=ΔP/Pr = -\Delta P / P. Gli ingredienti sono due:

  • Densità di liquidazione ρ\rho — nozionale di vendita forzata per unità di variazione frazionaria del prezzo, letto direttamente dal grafico della profondità / heatmap: ρ=dQ/dr\rho = -\,dQ / dr. Misura quanto carburante è accumulato in una fascia di prezzo.
  • Profondità del mercato Δ\Delta — il nozionale di vendita a mercato necessario per muovere il prezzo di un'unità di rr. In un modello di impatto lineare (Kyle), un nozionale venduto QQ muove il prezzo di r=Q/Δr = Q / \Delta. È la capacità dell'order book di assorbire il flusso forzato, ed è esattamente la quantità analizzata nell'analisi del muro dell'order book e della posizione in coda — un "muro" è un picco locale in Δ\Delta.

Iteriamo. Uno shock esogeno fa scendere il prezzo di r0r_0, attivando Q0=ρr0Q_0 = \rho \, r_0 di vendite forzate. Quella vendita provoca un'ulteriore discesa r1=Q0/Δ=(ρ/Δ)r0r_1 = Q_0 / \Delta = (\rho/\Delta)\, r_0. Definiamo il moltiplicatore della cascata

g=ρΔg = \frac{\rho}{\Delta}

e la ricorsione è semplicemente rn+1=grnr_{n+1} = g \, r_n. La discesa totale è una serie geometrica:

rtotal=r0(1+g+g2+)=r01g(g<1)r_{\text{total}} = r_0 \left(1 + g + g^2 + \cdots\right) = \frac{r_0}{1 - g} \quad (g < 1)

Tutto dipende dal valore di gg:

  • g<1g < 1sottocritica. Ogni tornata di liquidazioni attiva meno vendite della precedente. La cascata si auto-estingue; il movimento totale è un multiplo limitato 1/(1g)1/(1-g) dello shock iniziale. Qui si trova la maggior parte degli eventi di liquidazione.
  • g1g \ge 1sovracritica. Ogni tornata attiva almeno la stessa quantità di vendite della precedente. La serie geometrica diverge; il movimento è limitato soltanto dall'esaurimento delle posizioni liquidabili, dall'aumento della profondità del book a prezzi inferiori o da un circuit breaker dell'exchange. Questo è il regime del "flash crash / long squeeze".

gg è un numero di riproduzione — l'R0R_0 di un'epidemia di liquidazioni. Dice che la cascata scappa via esattamente quando la liquidità di vendita forzata concentrata in una fascia di prezzo supera la liquidità del book disponibile per assorbirla lì. Ecco perché uno shock modesto dentro un cluster denso su un book sottile è molto più pericoloso di uno shock grande nello spazio vuoto dei prezzi: il pericolo è ρ/Δ\rho / \Delta, non la dimensione dello shock. Questa struttura auto-eccitante — eventi che attivano altri eventi dello stesso tipo — è la stessa che motiva la modellazione del flusso ordini con processi di Hawkes, ed è il motivo per cui le liquidazioni arrivano a cluster anziché uniformemente.

Catena della cascata: una vendita forzata crea impatto sul prezzo che spinge il cluster successivo di posizioni underwater, rappresentata come una scala discendente annotata con la soglia del numero di riproduzione g uguale a uno

Mettiamoci dei numeri. Supponiamo che il book sia tale che $10M di vendite a mercato muovano ETH dell'1%, quindi Δ=10M/0.01=$1B\Delta = 10\text{M} / 0.01 = \char36 1\text{B} di nozionale per unità di variazione frazionaria del prezzo. Confrontiamo ora due regimi per la fascia ampia l'1% appena sotto lo spot:

  • Fascia densa, $30M di nozionale di vendita forzata concentrato. Allora ρ=30M/0.01=$3B\rho = 30\text{M} / 0.01 = \char36 3\text{B} e g=ρ/Δ=3g = \rho/\Delta = 3. Sovracritico: uno shock che sfiora la parte superiore della fascia fa detonare l'intero stack, e il pavimento del modello è determinato non da gg, ma dal punto in cui finiscono le posizioni.
  • Fascia rada, $6M di nozionale concentrato. Allora ρ=$600M\rho = \char36 600\text{M}, g=0.6g = 0.6 e il movimento totale è r0/(10.6)=2.5r0r_0 / (1 - 0.6) = 2.5\,r_0 — un ribasso amplificato ma limitato. Stesso shock, stesso book, cluster cinque volte più sottile, e l'esito passa dal collasso a una wick acquistabile.

La versione discreta è una breve simulazione sui cluster ordinati, e vale la pena scriverla perché rende concreta la soglia:

def cascade(p0, clusters, kyle_lambda):
    """
    p0:          price after the exogenous shock
    clusters:    {trigger_price: forced_notional} for long positions
    kyle_lambda: fractional price impact per $ of market sell (1/depth)
    Returns the floor price and total liquidated notional.
    """
    p, sold, fired = p0, 0.0, set()
    while True:
        new = [(tp, n) for tp, n in clusters.items()
               if tp not in fired and tp >= p]
        if not new:
            break
        q = sum(n for _, n in new)          # this round's forced sell
        fired.update(tp for tp, _ in new)
        p *= (1 - kyle_lambda * q)          # linear price impact of the round
        sold += q
    return p, sold

Due note pratiche. Primo, gg è locale — varia lungo l'asse dei prezzi, perché variano sia ρ\rho (densità del cluster) sia Δ\Delta (profondità del book). La domanda tradabile non è "il mercato è fragile?", ma "a quale prezzo specifico gg supera 1?". Secondo, lo stesso meccanismo opera al contrario per gli short durante la salita (uno short squeeze è una cascata con i segni invertiti), quindi la mappa ha due lati: carburante da liquidazione dei long sotto lo spot, carburante da liquidazione degli short sopra. Il loop vendita forzata-genera-impatto-sul-prezzo-genera-vendita-forzata è il meccanismo di rischio endogeno formalizzato nella letteratura sulle fire sale (Cont & Wagalath), dove la liquidazione in difficoltà produce la propria correlazione e il proprio impatto.

Segnali: cluster come magneti e zone di inversione

Una mappa del flusso forzato genera due letture tradabili distinte, quasi opposte, a seconda del timing rispetto alla cascata.

Prima: i cluster sono magneti del prezzo. Un cluster denso di liquidazioni è un bacino di flusso garantito e insensibile al prezzo. È attraente per due tipi di operatori: trader in cerca di liquidità che vogliono eseguire size contro controparti forzate e trader predatori che spingono il prezzo verso il cluster proprio per innescare il flusso (lo stop-hunt, su scala di protocollo). Il risultato è una tendenza ben documentata del prezzo a gravitare verso i cluster grandi — il livello agisce da magnete — perché esiste un incentivo permanente a colmare la distanza. Quando vedi lo spot scivolare verso una banda luminosa in assenza di convinzione, la banda stessa fa parte della spiegazione. Prevedere la reazione del book mentre il prezzo si avvicina — il muro assorbirà il flusso o cederà — è esattamente il tipo di problema di previsione dell'order book a breve orizzonte che modelli come DeepLOB affrontano.

Dopo: i cluster sono zone di inversione. Questa è la lettura più preziosa e più abusata, quindi va espressa con cautela. Il flusso di liquidazioni forzate è, per costruzione, non informativo — il venditore non vende perché ritiene che il prezzo sia troppo alto; vende perché glielo ha ordinato un motore di margine. Il flusso non informativo muove il prezzo temporaneamente. Una volta esaurite le posizioni raggruppate, la vendita meccanica si arresta bruscamente e, se la cascata ha oltrepassato il fair value durante la discesa, il prezzo tende a ritracciare — la "wick di liquidazione". Il meccanismo non è folklore: è il risultato standard secondo cui l'impatto sul prezzo della vendita forzata e non informata ha una componente transitoria che si riassorbe quando il flusso cessa, la stessa logica delle fire sale che produce dislocazione temporanea e successiva reversione parziale nella letteratura sulle vendite distressed azionarie.

Cluster di liquidazioni che agiscono prima come magnete del prezzo attirando lo spot verso il livello, poi come zona di inversione in cui una cascata supera il livello e la wick ritraccia una volta esaurito il flusso forzato

La disciplina richiesta, espressa nel modo più netto possibile:

  • La mean reversion dopo una cascata è una tendenza documentata, non una legge e non un numero. Dipende dal fatto che il flusso sia stato realmente non informativo e che durante la cascata non sia arrivata alcuna nuova informazione. Una cascata di liquidazioni che sia anche il repricing del mercato dovuto a una notizia reale (un depeg, un exploit, uno shock macro) non rientrerà — il flusso forzato e quello informativo si sovrappongono e solo il primo è transitorio. Non esiste un vantaggio universale del tipo "compra la wick", e qualsiasi percentuale di reversione specifica citata senza indicare campione, venue e regime va trattata come marketing.
  • Il segnale è l'esaurimento, non il ribasso. Il momento tradabile è quando le esecuzioni di liquidazione realizzate si diradano — quando il tape forceOrder tace dopo un'esplosione — perché è allora che il venditore meccanico è scomparso. Entrare nel mezzo di una cascata sovracritica (g1g \ge 1) significa mettersi davanti proprio al loop di feedback da cui la sezione precedente metteva in guardia.
  • Entrambe le letture hanno bisogno della stessa mappa. Magneti e inversioni sono gli stessi cluster osservati in fasi diverse; non puoi tradare nessuno dei due senza prima costruire il grafico della profondità e la heatmap e riconciliarli continuamente con le esecuzioni realizzate.

C'è anche una lettura direzionale più lenta nell'asimmetria della mappa a due lati. Il carburante delle liquidazioni long sta sotto lo spot, quello delle liquidazioni short sopra; quando un lato è caricato molto più dell'altro, il mercato ha un bias meccanico verso il lato più carico, perché è lì che uno shock incontra il flusso più auto-rinforzante. Un mercato con un muro di liquidazioni long a -3% e quasi nulla sopra è strutturalmente fragile al ribasso indipendentemente dalla narrativa — il percorso di minore resistenza è quello con più carburante. Il funding persistente e unidirezionale è spesso ciò che costruisce questa asimmetria in primo luogo: un mercato che paga i long per restare short (funding profondamente negativo) accumula short affollati il cui cluster di liquidazione finisce quindi sopra il prezzo come carburante per lo squeeze, e viceversa. Il tape del funding e la mappa delle liquidazioni sono due viste della stessa leva.

La pipeline dei dati

Il sistema è una fusione di due feed dal carattere opposto: un indice delle posizioni on-chain previsionale (dove il flusso forzato diventerà idoneo) e uno stream CEX delle liquidazioni realizzate (dove il flusso forzato sta stampando proprio ora). Uno ti dice dove si trova il carburante; l'altro ti dice che si è acceso.

La mappa previsionale — indice delle posizioni on-chain. Parti dalla cronologia degli eventi Aave/Compound (Supply, Borrow, Repay, Withdraw, LiquidationCall), riproducendo i log oppure interrogando un subgraph su The Graph, e ricomponili nei saldi correnti per utente — lo stesso sottosistema di indicizzazione esatto che l'introduzione alla meccanica descrive per i bot di liquidazione, qui riutilizzato per l'aggregazione invece che per l'esecuzione. Dai saldi e dai parametri di rischio correnti, calcola PliqP_{\text{liq}} e QforcedQ_{\text{forced}} di ogni posizione e raggruppali nell'istogramma del grafico della profondità. Aggiorna sui nuovi blocchi; una volta attivi i saldi, l'istogramma è economico da mantenere in modo incrementale.

Il tape realizzato — stream Binance forceOrder. Binance Futures pubblica le liquidazioni effettive via websocket, wss://fstream.binance.com/ws/!forceOrder@arr (array di tutti i simboli) oppure <symbol>@forceOrder, con ogni evento che contiene lato, prezzo e quantità di un ordine di liquidazione. C'è un dettaglio problematico documentato, proprio il tipo di imprecisione su cui bisogna essere onesti: lo stream pubblico è limitato a un massimo di un evento di liquidazione per simbolo al secondo — durante una cascata violenta, quando le liquidazioni arrivano molto più rapidamente di 1/s, lo stream campiona invece di riportare ogni esecuzione, quindi il volume aggregato delle liquidazioni ricostruito da lì sottostima sistematicamente proprio quando conta di più. Usa lo stream per il timing e la direzione della cascata (si sta attivando? da quale lato? sta accelerando o si sta diradando?), non come registro preciso dei volumi.

Uno scheletro minimo di ingestione — due producer async che scrivono in un bus normalizzato:

import asyncio, json, websockets

async def binance_liquidations(bus):
    url = "wss://fstream.binance.com/ws/!forceOrder@arr"
    async with websockets.connect(url) as ws:
        async for msg in ws:
            o = json.loads(msg)["o"]              # order payload
            await bus.put({
                "src": "binance", "kind": "realized",
                "symbol": o["s"],
                "side": o["S"],                   # SELL = long liquidation
                "price": float(o["p"]),
                "qty": float(o["q"]),             # NB: stream is sampled at 1/s
            })

async def onchain_positions(bus, subgraph, poll=12):
    while True:
        positions = subgraph.fetch_open_positions()   # balances + risk params
        chart = {}
        for pos in positions:
            p_liq = pos.debt / (pos.collateral * pos.liq_threshold)
            q = pos.close_factor * pos.debt * (1 + pos.liq_bonus)
            chart[round(p_liq, 2)] = chart.get(round(p_liq, 2), 0.0) + q
        await bus.put({"src": "aave", "kind": "forward", "chart": chart})
        await asyncio.sleep(poll)                       # ~1 block cadence

async def main(subgraph):
    bus = asyncio.Queue()
    await asyncio.gather(
        binance_liquidations(bus),
        onchain_positions(bus, subgraph),
        consumer(bus),        # reconcile forward map vs realized tape, emit signals
    )

Il consumer è il punto in cui vive la strategia: mantieni la mappa previsionale (grafico on-chain più la heatmap CEX stimata), stima il moltiplicatore locale della cascata g=ρ/Δg = \rho/\Delta rispetto alla profondità live dell'order book e osserva il tape forceOrder realizzato per rilevare l'innesco e — la parte tradabile — l'esaurimento. Quando il tape esplode e poi si dirada mentre il prezzo resta sotto un cluster che la mappa indicava, hai un overshoot non informativo con il venditore forzato ormai assente: il setup di inversione. Quando il tape accelera e davanti hai g1g \ge 1, hai una cascata sovracritica da cui tenerti alla larga. Stessa mappa, azioni opposte, e il tape è ciò che le distingue in tempo reale.

Cosa portarsi a casa

Le liquidazioni invertono la consueta asimmetria informativa dei mercati: invece di restare nascosti fino alla loro esecuzione, il prezzo e la dimensione della vendita forzata sono calcolabili in anticipo — esattamente on-chain, approssimativamente sui perp CEX. Costruisci la mappa (il grafico on-chain della profondità è esatto a meno del routing e del ritardo dell'oracle; la heatmap CEX è un prior condizionato a una distribuzione della leva sconosciuta e cieco al cross-margin) e la fragilità della mappa si riduce a un solo rapporto: il moltiplicatore della cascata g=ρ/Δg = \rho/\Delta, densità delle vendite forzate sulla profondità del book, un numero di riproduzione sottocritico sotto 1 e fuori controllo sopra di essa. Il segnale si divide per fase — i cluster sono magneti prima, zone di inversione dopo — e il vantaggio dell'inversione esiste solo perché il flusso forzato non è informativo e quindi è transitorio, una tendenza documentata che svanisce nel momento in cui una cascata coincide con notizie reali. Trada l'esaurimento, non il ribasso; rispetta gg; e non scambiare mai una heatmap sfocata per un registro di dove sono sepolti i corpi.

Riferimenti

  • Qin, Zhou, Gamito, Jovanovic, Gervais (2021), An Empirical Study of DeFi Liquidations: Incentives, Risks, and Instabilities. arXiv:2106.06389.
  • Kyle, A. S. (1985), Continuous Auctions and Insider Trading. Econometrica 53(6) — il coefficiente lineare di impatto sul prezzo λ\lambda usato nel modello della cascata.
  • Cont, R., & Wagalath, L. (2016), Fire Sales Forensics: Measuring Endogenous Risk. Mathematical Finance 26(4) — impatto sul prezzo della liquidazione forzata e correlazione endogena.
  • Bacry, E., Mastromatteo, I., Muzy, J.-F. (2015), Hawkes Processes in Finance. Market Microstructure and Liquidity 1(1) — clustering auto-eccitante del flusso di ordini e liquidazioni.
  • Documentazione API di Binance Futures — Liquidation Order Streams (!forceOrder@arr, <symbol>@forceOrder), inclusa la nota sul limite di 1 evento al secondo per simbolo.
  • Subgraph Aave v3 e Compound III su The Graph; getUserAccountData di Aave e parametri di rischio delle reserve.
Disclaimer: le informazioni fornite in questo articolo hanno solo scopo didattico e informativo e non costituiscono consulenza finanziaria, di investimento o di trading. Il trading di criptovalute comporta un rischio significativo di perdita.

Autori

Eugen Soloviov
Eugen Soloviov

Trading-systems engineer

Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.

Newsletter

Resta un Passo Avanti al Mercato

Iscriviti alla nostra newsletter per approfondimenti esclusivi sul trading con IA, analisi di mercato e aggiornamenti sulla piattaforma.

Rispettiamo la tua privacy. Annulla l'iscrizione in qualsiasi momento.