← Retour aux articles
July 29, 2026
5 min de lecture

Les cascades de liquidations comme signal de trading : lire un flux force et preannonce

Les cascades de liquidations comme signal de trading : lire un flux force et preannonce
#liquidations
#cascade
#signal de trading
#defi
#perpetuels
#carnet d'ordres
#microstructure de marche
#crypto

La plupart des flux de marche restent secrets jusqu'a leur execution. Un vendeur discretionnaire decide de vendre au moment ou il le decide ; on apprend son intention dans le flux des transactions, apres coup. Les liquidations a effet de levier font exception, et cette exception est enorme. Une liquidation est forcee — le detenteur de la position n'a aucun pouvoir sur le fait qu'elle ait lieu — et elle est preannoncee — le prix exact auquel elle se declenche est une fonction deterministe de parametres qui sont, on-chain, entierement publics et, off-chain, estimables statistiquement. Chaque position longue a effet de levier est un ordre de vente au marche permanent, pose a un prix qu'elle diffuse a quiconque prend la peine de le calculer.

Cela change toute la perspective. L'article compagnon sur la mecanique des liquidations d'Aave et Compound traite les liquidations du cote du liquidateur — la course aux infrastructures pour etre celui qui rembourse la dette douteuse et encaisse le bonus. Cet article adopte le cote du trader face au meme objet : non pas "comment gagner la liquidation ?", mais "l'ensemble des prix de liquidation de tous les autres forme une carte du flux force futur, et je peux trader contre cette carte". Nous construisons deux versions de cette carte — une exacte on-chain, une floue sur les perps CEX —, quantifions le moment ou une chaine de liquidations devient auto-entretenue et expliquons soigneusement l'effet de ce flux sur le prix.

Le graphique on-chain de profondeur des liquidations

Sur un marche monetaire, le prix de liquidation d'une position n'est pas estime. Il est derive. Rappelons le facteur de sante de l'introduction a la mecanique : une position peut etre liquidee lorsque

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

avec CiC_i les montants de collateraux, PiP_i leurs prix d'oracle, LTiLT_i les seuils de liquidation et DjPjD_j P_j les valeurs de la dette. Nous n'allons pas le deduire a nouveau ; nous l'inversons. Prenons le cas courant — un seul collatéral volatile CC (par exemple WETH) qui finance une dette stable DD (USDC). En posant HF=1HF = 1 et en isolant le prix du collatéral, on obtient le prix de declenchement de la position :

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

Ce nombre unique est ce que l'emprunteur a annonce. Il signifie : si WETH touche PliqP_{\text{liq}} sur l'oracle, cette position devient une offre forcee. Et la taille de cette offre est elle aussi connaissable — au declenchement, un liquidateur rembourse closeFactor×D\text{closeFactor} \times D de dette et saisit des collateraux d'une valeur de repay×(1+bonus)\text{repay} \times (1 + \text{bonus}), de sorte qu'environ

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

de valeur de collatéral arrive sur le marche (ou est couverte) lorsque la position se declenche.

Reprenons la position concrete de l'introduction a la mecanique : 10 WETH deposes a 3 000 $ US, 20 000 USDC empruntes, seuil de liquidation LT=0.83LT = 0.83, bonus de 5 %. Son declencheur est Pliq=20,000/(10×0.83)=$2,410P_{\text{liq}} = 20{,}000 / (10 \times 0.83) = \char36 2{,}410, et avec un facteur de cloture de 50 %, elle place a ce prix une offre forcee de WETH de 0.5×20,000×1.05=$10,5000.5 \times 20{,}000 \times 1.05 = \char36 10{,}500. Un emprunteur, une barre sur le graphique. Faites cela pour chaque emprunteur du protocole, regroupez les resultats par PliqP_{\text{liq}}, et vous obtenez un histogramme : notionnel des ventes forcees en fonction du prix. C'est le graphique on-chain de profondeur des liquidations — le cousin natif des DEX du carnet d'ordres, sauf que les "ordres" sont involontaires et que leurs prix sont calcules, pas cotes.

Graphique on-chain de profondeur des liquidations : collateraux Aave et Compound agreges et regroupes par prix de liquidation dans un histogramme de la pression de vente forcee empilee sous le spot

Trois reserves d'honnetete empechent cette carte de devenir une fiction :

  1. Les positions multi-actifs n'ont pas un unique prix de declenchement. Une position avec deux collateraux volatils et deux dettes se liquide sur une surface dans l'espace des prix, et non en un point. La reduction pratique consiste a calculer le declencheur le long de l'axe du collatéral volatile dominant, en maintenant tous les autres prix d'oracle a leur valeur actuelle. C'est correct pour un mouvement sur un seul actif et faux pour un mouvement d'un panier correle — ce qui compte, car les krachs correles sont precisement ceux ou de nombreux declencheurs bougent ensemble. Considerez le PliqP_{\text{liq}} mono-actif comme une marginale de premier ordre, pas comme une garantie.
  2. Une vente forcee \neq un dump de marche sur une seule plateforme. Les liquidateurs competents ne vendent pas aveuglement au marche les collateraux saisis dans le pool disponible le moins liquide ; ils acheminent les ordres entre DEX et CEX et conservent souvent le collatéral en se couvrant en delta sur un perp au lieu de realiser immediatement le collatéral (le probleme du swap de sortie sur lequel s'attarde l'introduction a la mecanique). Ainsi, QforcedQ_{\text{forced}} est une borne superieure du flux ayant un impact sur le prix, et non une estimation ponctuelle. Une partie se reporte sur des couvertures qui ne touchent jamais le spot.
  3. Les declencheurs bougent avec l'oracle, pas avec le marche. Sur Aave et Compound, la position devient liquidable lorsque l'oracle franchit PliqP_{\text{liq}}, et les oracles se mettent a jour selon une cadence de deviation et de heartbeat, avec un retard sur le marche. Le graphique de profondeur est donc une carte des endroits ou le flux force devient eligible, conditionnee par la prochaine transmission de l'oracle — une subtilite que l'introduction traite en detail.

Une troisieme source se situe entre le graphique des marches monetaires et la heatmap CEX : les DEX de perps. Hyperliquid, GMX et dYdX v4 gerent des contrats perpetuels a effet de levier comme une plateforme centralisee, mais conservent l'etat des positions on-chain ou dans une chambre de compensation interrogeable. Cela signifie que leurs prix de liquidation obeissent a la meme formule de marge isolee que les perps CEX — mais qu'ils sont calcules a partir de positions reelles (taille, collatéral, entree), plutot qu'estimes depuis l'OI agrege. L'etat de la chambre de compensation d'Hyperliquid expose la marge et le prix de marque de chaque compte ; les positions GMX sont on-chain et sont liquidees a des prix derives de l'oracle par des keepers. En pratique : pour les DEX de perps, on peut construire une carte des liquidations avec un effet de levier de style CEX mais une precision de style on-chain, bien plus proche de l'exactitude du graphique Aave que des conjectures de la heatmap. Lorsqu'une plateforme publie les positions, il n'y a jamais besoin de deviner.

Meme avec ces reserves, le graphique on-chain est la carte du flux force la plus propre qui existe sur les marches : aucune hypothese sur la distribution de l'effet de levier, aucune taille cachee, chaque entree lisible dans l'etat.

La heatmap des liquidations CEX

Les plateformes centralisees de contrats perpetuels vous placent dans la situation opposee — un open interest beaucoup plus important et presque aucun detail au niveau des positions qui rendrait le graphique on-chain exact. Vous ne pouvez pas lire les positions individuelles. Ce que vous pouvez lire, c'est l'open interest agrege et le volume echange. La heatmap des liquidations est ce qu'on obtient en essayant de reconstruire le graphique de profondeur a partir de ces agregats et d'hypotheses, et ces hypotheses sont essentielles.

L'arithmetique par position est simple. Pour une position longue lineaire a marge isolee (reglee en USDT), ouverte au prix EE avec un effet de levier LL et un taux de marge de maintenance mm, la liquidation se declenche lorsque les capitaux propres tombent au niveau de l'exigence de maintenance :

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)

et, symetriquement, Pliqshort=E(1+1Lm)P_{\text{liq}}^{\text{short}} = E\left(1 + \frac{1}{L} - m\right). Fixons une entree a E=$3,000E = \char36 3{,}000 avec m=0.5%m = 0.5\% et parcourons les niveaux d'effet de levier :

Effet de levier PliqlongP_{\text{liq}}^{\text{long}} Distance sous l'entree
$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 forme de cette colonne explique a elle seule pourquoi les heatmaps s'illuminent juste sous le prix recent : les positions a fort effet de levier se liquident a un cheveu du prix d'entree ; partout ou le volume a recemment ete echange, une bande dense de declencheurs 50–100× se trouve a une fraction de pour cent. Le createur de la heatmap procede ainsi : il traite le volume recemment echange comme un proxy des endroits ou les positions ont ete ouvertes (leur EE), repartit ce volume entre un ensemble suppose de niveaux d'effet de levier — 5×, 10×, 25×, 50×, 100× avec des poids supposes —, projette chaque tranche vers son PliqP_{\text{liq}} et colore l'axe des prix selon le notionnel a effet de levier estime qui se liquide a cet endroit. Les bandes lumineuses sont des zones de liquidation estimees et denses.

Heatmap des liquidations CEX : notionnel a effet de levier estime projete vers les prix de liquidation selon plusieurs niveaux d'effet de levier, represente par des bandes d'intensite horizontales au-dessus et au-dessous du prix courant

Il faut expliciter pourquoi il s'agit d'une image floue et non du jumeau du graphique on-chain :

  • La distribution de l'effet de levier est inconnue. Toute la heatmap est une convolution du volume avec un histogramme de l'effet de levier suppose. Des hypotheses differentes deplacent les bandes lumineuses. Deux fournisseurs de donnees reputes publient des heatmaps visiblement differentes pour le meme marche le meme jour, et tous deux ont "raison" compte tenu de leurs a priori.
  • La marge croisee invalide la formule par position. Le PliqP_{\text{liq}} ci-dessus est un resultat de marge isolee. Une position a marge croisee se liquide en fonction des capitaux propres de l'ensemble du compte, de sorte que son declencheur effectif depend des autres positions du trader, de leur PnL latent et des collateraux qu'il ajoute en cours de mouvement — rien de tout cela n'est observable. La taille en marge croisee est pratiquement invisible pour l'estimateur.
  • Taille cachee et dynamique. L'open interest est un agregat net-plus-brut ; il ne donne pas la correspondance entre l'OI et les entrees individuelles. Les traders ajoutent, reduisent et couvrent leurs positions en continu. La marge de maintenance par paliers (mm augmente avec le notionnel de la position) deplace les declencheurs des grosses positions par rapport a ceux des petites, au meme niveau d'effet de levier.
  • La liquidation se fait par tranches, pas instantanement. Les plateformes liquident progressivement les grosses positions et acheminent le risque residuel via un fonds d'assurance et le deleveraging automatique ; ainsi, meme un cluster correctement localise ne se deverse pas en une seule execution.

La bonne facon de considerer la heatmap est comme un a priori sur les endroits ou le flux force est probablement concentre, a confirmer ou a refuter par les executions de liquidation realisees (le flux forceOrder decrit dans la section sur le pipeline ci-dessous), et non comme un registre. Elle est reellement utile et reellement imprecise ; faire semblant du contraire est la meilleure facon de se faire emporter par les clusters memes que l'on surveille. Pour comprendre pourquoi tant d'effet de levier s'accumule sur les perps — et pourquoi le cout du financement continue de pousser ces positions vers leurs declencheurs — voir l'arbitrage des taux de financement entre plateformes.

Dynamique des cascades, quantifiee

Une liquidation isolee est un point de donnees. Une cascade est la boucle de retroaction, et elle a un seuil que l'on peut ecrire. La boucle est mecanique : une vente forcee frappe le carnet → l'impact sur le prix fait bouger le marche → le mouvement fait passer la tranche suivante de positions sous son declencheur → ces positions sont liquidees → davantage de ventes forcees → et ainsi de suite. Que cette boucle s'eteigne ou s'emballe n'est pas une question de sentiment ; c'est le rapport entre deux quantites que vous avez deja construites.

Travaillons avec des baisses de prix fractionnelles r=ΔP/Pr = -\Delta P / P. Deux ingredients :

  • Densite de liquidation ρ\rho — notionnel de vente forcee par unite de baisse fractionnelle du prix, lu directement sur le graphique de profondeur / la heatmap : ρ=dQ/dr\rho = -\,dQ / dr. Elle mesure la quantite de carburant empilee dans une bande de prix.
  • Profondeur de marche Δ\Delta — notionnel de ventes au marche necessaire pour faire bouger le prix d'une unite de rr. Dans un modele d'impact lineaire (Kyle), une vente de notionnel QQ fait bouger le prix de r=Q/Δr = Q / \Delta. C'est la capacite du carnet d'ordres a absorber le flux force, et c'est exactement la quantite etudiee dans l'analyse des murs du carnet et de la position dans la file — un "mur" est un pic local de Δ\Delta.

Iterons. Un choc exogene fait baisser le prix de r0r_0, declenchant Q0=ρr0Q_0 = \rho \, r_0 de ventes forcees. Ces ventes provoquent une baisse supplementaire r1=Q0/Δ=(ρ/Δ)r0r_1 = Q_0 / \Delta = (\rho/\Delta)\, r_0. Definissons le multiplicateur de cascade

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

et la recurrence est simplement rn+1=grnr_{n+1} = g \, r_n. La baisse totale est une serie geometrique :

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)

Tout depend de la valeur de gg :

  • g<1g < 1sous-critique. Chaque vague de liquidations declenche moins de ventes que la precedente. La cascade s'eteint d'elle-meme ; le mouvement total est un multiple borne 1/(1g)1/(1-g) du choc initial. La plupart des evenements de liquidation se situent ici.
  • g1g \ge 1supercritique. Chaque vague declenche au moins autant de ventes que la precedente. La serie geometrique diverge ; le mouvement n'est limite que par l'epuisement des positions liquidables, l'approfondissement du carnet a des prix plus bas ou un coupe-circuit de la plateforme. C'est le regime du "flash crash / long squeeze".

gg est un nombre de reproduction — le R0R_0 d'une epidemie de liquidations. Il indique que la cascade s'emballe exactement lorsque la liquidite des ventes forcees concentree dans une bande de prix depasse la liquidite du carnet disponible pour l'absorber a cet endroit. C'est pourquoi un choc modeste dans un cluster dense sur un carnet peu profond est bien plus dangereux qu'un choc important dans un espace de prix vide : le danger est ρ/Δ\rho / \Delta, et non la taille du choc. Cette structure auto-excitatrice — des evenements qui declenchent davantage d'evenements de meme nature — est la meme qui incite a modeliser le flux d'ordres avec des processus de Hawkes, et c'est pourquoi les liquidations arrivent par clusters plutot qu'uniformement.

Chaine de cascade : une vente forcee produit un impact sur le prix qui pousse le cluster suivant de positions sous l'eau, representee comme un escalier descendant annote du seuil du nombre de reproduction g egal a un

Mettons-y des chiffres. Supposons que le carnet soit tel que 10 M$ de ventes au marche fassent baisser l'ETH de 1 %, soit Δ=10M/0.01=$1B\Delta = 10\text{M} / 0.01 = \char36 1\text{B} de notionnel par unite de prix fractionnelle. Comparons maintenant deux regimes pour la bande de 1 % de largeur juste sous le spot :

  • Bande dense, notionnel de ventes forcees groupe de 30 M$. Alors ρ=30M/0.01=$3B\rho = 30\text{M} / 0.01 = \char36 3\text{B} et g=ρ/Δ=3g = \rho/\Delta = 3. Supercritique : un choc qui entame le haut de la bande fait detoner toute la pile, et le plancher du modele est determine non par gg, mais par l'endroit ou les positions s'epuisent.
  • Bande clairsemee, notionnel groupe de 6 M$. Alors ρ=$600M\rho = \char36 600\text{M}, g=0.6g = 0.6, et le mouvement total est r0/(10.6)=2.5r0r_0 / (1 - 0.6) = 2.5\,r_0 — un repli amplifie mais borne. Meme choc, meme carnet, cluster cinq fois moins dense, et le resultat passe de l'effondrement a une meche achetable.

La version discrete est une courte simulation sur les clusters tries, et il vaut la peine de l'ecrire car elle rend le seuil tangible :

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

Deux remarques pratiques. Tout d'abord, gg est local — il varie le long de l'axe des prix, car ρ\rho (densite du cluster) et Δ\Delta (profondeur du carnet) varient eux aussi. La question tradable n'est pas "le marche est-il fragile ?", mais "a quel prix precis gg franchit-il 1 ?". Ensuite, le meme mecanisme fonctionne en sens inverse pour les shorts lors d'une hausse (un short squeeze est une cascade dont les signes sont inverses) ; la carte a donc deux cotes : le carburant des liquidations de longs sous le spot et le carburant des liquidations de shorts au-dessus. La boucle vente forcee → impact sur le prix → vente forcee est le mecanisme de risque endogene formalise dans la litterature sur les ventes forcees (Cont & Wagalath), ou la liquidation en detresse fabrique sa propre correlation et son propre impact.

Signaux : les clusters comme aimants et zones de retournement

Une carte du flux force produit deux lectures tradables distinctes, presque opposees, selon le moment par rapport a la cascade.

Avant : les clusters sont des aimants a prix. Un cluster de liquidations dense est un reservoir de flux garanti et insensible au prix. Il attire deux types d'acteurs : les traders en quete de liquidite qui veulent executer une taille face aux contreparties forcees, et les traders predateurs qui poussent le prix vers le cluster precisement pour declencher le flux (la chasse aux stops, a l'echelle du protocole). Il en resulte une tendance bien documentee du prix a graviter vers les grands clusters — le niveau agit comme un aimant — car il existe une incitation permanente a reduire la distance. Lorsque vous voyez le spot glisser vers une bande lumineuse avec peu de conviction, la bande elle-meme fait partie de l'explication. Prevoir la reaction du carnet a l'approche du prix — le mur absorbera-t-il le flux ou cedera-t-il — est exactement le type de probleme de prediction du carnet a court terme auquel s'attaquent des modeles comme DeepLOB.

Apres : les clusters sont des zones de retournement. C'est la lecture la plus precieuse et la plus mal utilisee ; formulons-la avec soin. Le flux de liquidation force est, par construction, non informationnel — le vendeur ne vend pas parce qu'il pense que le prix est trop eleve ; il vend parce qu'un moteur de marge le lui a ordonne. Un flux non informationnel fait bouger le prix temporairement. Une fois les positions du cluster epuisees, la vente mecanique s'arrete brutalement et, si la cascade a depasse la juste valeur dans sa descente, le prix tend a revenir — la "meche de liquidation". Le mecanisme n'est pas une legende : le resultat standard est que l'impact sur le prix d'une vente forcee et non informee comporte une composante transitoire qui s'inverse une fois le flux termine, selon la meme logique de vente forcee qui produit une dislocation temporaire puis un retour partiel dans la litterature sur les ventes en detresse d'actions.

Les clusters de liquidations agissent d'abord comme un aimant a prix qui attire le spot vers le niveau, puis comme une zone de retournement ou une cascade depasse ce niveau et ou la meche revient une fois le flux force epuise

La discipline que cela exige, formulee aussi directement que possible :

  • Le retour a la moyenne apres une cascade est une tendance documentee, pas une loi ni un chiffre. Il depend du fait que le flux ait ete veritablement non informationnel et qu'aucune nouvelle information ne soit arrivee pendant la cascade. Une cascade de liquidations qui correspond aussi a une revalorisation du marche sur une information reelle (un depeg, un exploit, un choc macroeconomique) ne s'inversera pas — le flux force et le flux informationnel se superposent, et seul le premier est transitoire. Il n'existe pas d'avantage universel a "acheter la meche", et tout pourcentage precis de retour que vous voyez cite sans echantillon, plateforme et regime explicites doit etre considere comme du marketing.
  • Le signal est l'epuisement, pas la baisse. Le moment tradable est celui ou les executions de liquidation realisees s'espacent — lorsque le flux forceOrder se tait apres une rafale — car c'est alors que le vendeur mecanique a disparu. Entrer au milieu d'une cascade supercritique (g1g \ge 1), c'est se placer devant la boucle de retroaction meme contre laquelle la section precedente mettait en garde.
  • Les deux lectures ont besoin de la meme carte. Magnet et retournement sont les memes clusters observes a des phases differentes ; on ne peut trader ni l'un ni l'autre sans construire d'abord le graphique de profondeur et la heatmap, puis les confronter en continu aux executions realisees.

Il existe aussi une lecture directionnelle plus lente dans l'asymetrie de la carte a deux cotes. Le carburant des liquidations de longs se trouve sous le spot, celui des liquidations de shorts au-dessus ; lorsque l'un des deux cotes est beaucoup plus charge que l'autre, le marche presente un biais mecanique vers le cote lourd, car c'est la que le choc rencontre le plus de flux auto-entretenu. Un marche avec un mur de liquidations de longs 3 % plus bas et presque rien au-dessus est structurellement fragile a la baisse, quel que soit le recit : le chemin de moindre resistance est celui qui contient le plus de carburant. Un financement persistant et unilateral est souvent a l'origine de cette asymetrie : un marche qui paie les longs pour rester shorts (financement fortement negatif) accumule des shorts surcharges, dont le cluster de liquidation se trouve alors au-dessus du prix comme carburant de squeeze, et inversement. Le flux de financement et la carte des liquidations sont deux vues du meme effet de levier.

Le pipeline de donnees

Le systeme fusionne deux flux aux caracteres opposes : un index de positions on-chain prospectif (l'endroit ou le flux force deviendra eligible) et un flux de liquidations CEX realisees (l'endroit ou le flux force s'imprime en ce moment). L'un indique ou se trouve le carburant ; l'autre indique qu'il s'est enflamme.

La carte prospective — index des positions on-chain. Partez de l'historique des evenements Aave/Compound (Supply, Borrow, Repay, Withdraw, LiquidationCall), soit en rejouant les logs, soit en interrogeant un sous-graphe sur The Graph, puis agreguez-les dans les soldes courants par utilisateur — exactement le sous-systeme d'indexation que l'introduction a la mecanique decrit pour les bots de liquidation, reutilise ici pour l'agregation plutot que pour l'execution. A partir des soldes et des parametres de risque actuels, calculez le PliqP_{\text{liq}} et le QforcedQ_{\text{forced}} de chaque position, puis regroupez-les dans l'histogramme du graphique de profondeur. Actualisez a chaque nouveau bloc ; une fois les soldes en direct, l'histogramme est peu couteux a maintenir incrementalement.

Le flux realise — flux forceOrder de Binance. Binance Futures publie les liquidations effectives sur un websocket, wss://fstream.binance.com/ws/!forceOrder@arr (tableau de tous les symboles) ou <symbol>@forceOrder, chaque evenement contenant le cote, le prix et la quantite d'un ordre de liquidation. Un piege documente, et c'est exactement le genre d'imprecision qu'il faut reconnaitre : le flux public est limite a au plus un evenement de liquidation par symbole et par seconde — lors d'une cascade violente, quand les liquidations arrivent bien plus vite qu'a raison d'une par seconde, le flux echantillonne au lieu de signaler chaque execution ; le volume total de liquidations reconstruit a partir de ce flux est donc systematiquement sous-estime precisement au moment ou il importe le plus. Utilisez le flux pour le moment et la direction de la cascade (est-elle en train de se declencher, de quel cote, accelere-t-elle ou s'amenuise-t-elle ?), et non comme un registre precis des volumes.

Un squelette minimal d'ingestion — deux producteurs asynchrones ecrivant dans un bus normalise :

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
    )

C'est dans le consumer que se trouve la strategie : conserver la carte prospective (graphique on-chain plus heatmap CEX estimee), estimer le multiplicateur de cascade local g=ρ/Δg = \rho/\Delta par rapport a la profondeur du carnet en direct et surveiller le flux realise forceOrder pour detecter le declenchement puis — c'est la partie tradable — l'epuisement. Lorsque le flux s'accelere puis s'amenuise alors que le prix se trouve sous un cluster que la carte indiquait, vous avez un depassement non informationnel avec le vendeur force disparu : la configuration de retournement. Lorsque le flux accelere et que g1g \ge 1 en amont, vous avez une cascade supercritique dont il faut rester a l'ecart. Meme carte, actions opposees ; c'est le flux qui les distingue en temps reel.

Ce qu'il faut retenir

Les liquidations inversent l'asymetrie d'information habituelle des marches : au lieu que le flux reste cache jusqu'a son execution, le prix et la taille des ventes forcees peuvent etre calcules a l'avance — exactement on-chain, approximativement sur les perps CEX. Construisez la carte (le graphique on-chain de profondeur est exact sous reserve du routage et du retard de l'oracle ; la heatmap CEX est un a priori conditionne par une distribution inconnue de l'effet de levier et aveugle a la marge croisee), et la fragilite de la carte se reduit a un seul ratio : le multiplicateur de cascade g=ρ/Δg = \rho/\Delta, densite des ventes forcees sur profondeur du carnet, un nombre de reproduction sous-critique sous 1 et en emballement au-dessus. Le signal se divise selon la phase — les clusters sont des aimants avant, des zones de retournement apres — et l'avantage de retournement n'existe que parce que le flux force est non informationnel et donc transitoire, une tendance documentee qui disparait des qu'une cascade coincide avec une information reelle. Tradez l'epuisement, pas la baisse ; respectez gg ; et ne prenez jamais une heatmap floue pour un registre indiquant ou les corps sont enterres.

References

  • 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) — le coefficient lineaire d'impact sur les prix λ\lambda utilise dans le modele de cascade.
  • Cont, R., & Wagalath, L. (2016), Fire Sales Forensics: Measuring Endogenous Risk. Mathematical Finance 26(4) — l'impact sur les prix des liquidations forcees et la correlation endogene.
  • Bacry, E., Mastromatteo, I., Muzy, J.-F. (2015), Hawkes Processes in Finance. Market Microstructure and Liquidity 1(1) — le regroupement auto-excitateur des flux d'ordres et de liquidations.
  • Documentation de l'API Binance Futures — flux d'ordres de liquidation (!forceOrder@arr, <symbol>@forceOrder), notamment la limitation a un evenement par seconde et par symbole.
  • Sous-graphes Aave v3 et Compound III sur The Graph ; getUserAccountData d'Aave et parametres de risque des reserves.
blog.disclaimer

Authors

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

Gardez une longueur d'avance sur le marché

Abonnez-vous à notre newsletter pour des insights exclusifs sur le trading IA, des analyses de marché et des mises à jour de la plateforme.

Nous respectons votre vie privée. Désabonnement possible à tout moment.