Type/to search
2
Follow
484
Followers
Binance retire la stratégie de grille short sur contrats à terme : de la surveillance au trading automatique
Discussions
Created 2026-05-09 18:31:25  Updated 2026-05-18 11:08:07
 1
 202

img

⚠️ Rappel important

Avant de lire et d'utiliser cette stratégie, veuillez noter impérativement les trois points suivants :

1. La stratégie nécessite de la patience pour attendre les opportunités d'ouverture

Le retrait des contrats à terme sur Binance est un événement peu fréquent, il ne se produit pas tous les jours. Après le lancement de la stratégie, il peut falloir attendre plusieurs jours, voire plus, avant que la première ouverture de position ne soit déclenchée. Pendant la majeure partie de son fonctionnement, le programme reste en mode "surveillance en veille". Préparez-vous mentalement à une longue attente et ne croyez pas que la stratégie a échoué simplement parce qu'aucune transaction n'a eu lieu à court terme.

2. Le moment de la détection d'ouverture peut encore être optimisé

Cet article utilise une méthode qui interroge l'interface fapi/v1/exchangeInfo toutes les 15 secondes et identifie le signal de retrait par le changement du champ deliveryDate. Cette méthode présente un certain retard lors des tests en trading réel, ce n'est pas le chemin le plus rapide. Les lecteurs peuvent optimiser davantage la méthode de détection en fonction de leurs besoins, par exemple : réduire l'intervalle d'interrogation, surveiller simultanément l'API des annonces de Binance, s'abonner aux notifications WebSocket, ou combiner des signaux multi-sources pour une vérification croisée, afin de gagner un temps d'entrée plus précoce. Plus tôt vous entrez, plus vous pourrez capter la plus forte baisse de la première vague.

3. Veillez à arrêter la stratégie à temps pour éviter le retour sur bénéfices

En trading réel, on observe que tous les symboles retirés ne baissent pas continuellement jusqu'à la date de retrait. Certains subissent une forte baisse après l'annonce, puis rebondissent progressivement en quelques heures ou un jour, et le prix peut même revenir au niveau d'avant l'annonce. Si la stratégie n'est pas arrêtée à temps, les bénéfices latents accumulés précédemment peuvent être largement réduits lors du rebond, voire se transformer en pertes.

Il est recommandé de définir l'une des conditions suivantes comme signal de sortie active :
-- Atteindre un objectif de profit prédéfini, puis fermer immédiatement toutes les positions ;
-- Forcer la liquidation lorsque le prix rebondit au-delà d'un certain pourcentage (par exemple 20 % à 30 %) par rapport au point le plus bas après l'annonce ;
-- Déclencher une protection de gain lorsque le drawdown de la position atteint un certain pourcentage du profit maximal (par exemple 30 % à 50 %).

N'attendez pas passivement les 60 minutes précédant le retrait pour fermer les positions – ce mécanisme est un filet de sécurité, pas un moment de sortie optimal.

Introduction

Sur le marché des contrats à terme de Binance, il existe une catégorie d'opportunités de trading souvent négligée par la plupart des traders : les événements de retrait de contrats.

De temps en temps, Binance publie une annonce déclarant le retrait de certains contrats perpétuels à faible liquidité ou à volume réduit. Au moment de l'annonce, le marché réagit rapidement : les traders en positions longues sont contraints de fermer leurs positions, les ventes paniquées se succèdent, le prix chute souvent violemment en quelques minutes, puis entre dans une longue période de baisse volatile jusqu'au retrait final.

Prenons l'exemple de MLNUSDT :

img

En une demi-heure, le prix a perdu près d'un tiers, et l'ensemble du cycle de retrait dure généralement plusieurs jours, pendant lesquels le prix oscille à des niveaux bas. Ce type de marché est un terrain naturel pour les stratégies shorts.

Cependant, surveiller manuellement ces opportunités présente deux difficultés :

Premièrement, l'information a un temps de réaction très court. Les 5 premières minutes après l'annonce sont la fenêtre de plus forte baisse. Si l'on manque l'entrée initiale, le risque de vendre à découvert par la suite augmente considérablement. Une surveillance humaine ne permet pas de réagir 24h/24 et 7j/7 en temps réel.

Deuxièmement, le marché n'est pas unidirectionnel comme une cascade. Pendant la baisse, des rebonds se produisent constamment. Bien que détenir uniquement des positions courtes permette de profiter de la tendance, cela fait manquer les nombreuses opportunités de spread à haute fréquence lors des rebonds.

C'est pour résoudre ces deux problèmes que cet article présente une stratégie automatisée complète : Surveillance en temps réel du signal de retrait de Binance par programme, ouverture automatique d'une position courte de base dès la publication de l'annonce, puis démarrage d'une grille courte dynamique pour capturer continuellement les spreads de volatilité dans la tendance baissière globale, et enfin fermeture automatique des positions avant le retrait, sans aucune intervention manuelle.


Pourquoi ce type de marché ?

Avant d'entrer dans le détail de la stratégie, nous devons d'abord comprendre les caractéristiques d'évolution des prix des symboles retirés, c'est la base de toute la conception de la stratégie.

1.1 L'impact de l'annonce de retrait sur le marché

Lorsque Binance annonce le retrait d'un contrat perpétuel, la première réaction du marché est la panique. Les traders en positions longues savent que le contrat va disparaître et doivent fermer leurs positions avant le retrait, sinon ils seront soumis à un règlement forcé. Cette vente concentrée crée une forte pression vendeuse à court terme, entraînant une baisse rapide du prix.

Parallèlement, les market makers réduisent rapidement leurs spreads ou retirent leur liquidité, ce qui amplifie encore la volatilité des prix. C'est pourquoi les premières minutes suivant l'annonce sont généralement la période de plus forte baisse de tout le cycle de retrait.

1.2 La tendance de la baisse oscillante

Après la première chute brutale, le prix ne descend pas en ligne droite jusqu'au fond, mais présente une tendance baissière oscillante typique :

img

Cette évolution a sa logique interne : chaque rebond est provoqué par des traders à court terme qui pensent que la baisse est excessive et achètent, mais comme le fondamental n'a pas changé (le contrat va disparaître), ces achats sont rapidement piégés et le prix redescend. La hauteur des rebonds diminue progressivement jusqu'à ce que la liquidité soit totalement épuisée avant le retrait.

Cette oscillation régulière est le terrain le plus propice à une stratégie de grille.

1.3 Deux sources de gains

Sur la base de l'analyse ci-dessus, nous pouvons concevoir deux voies de profit indépendantes :

Source de gainOutil associéCondition de profit
Baisse tendanciellePosition courte de basePrix globalement à la baisse
Spread de volatilitéGrille courtePrix oscillant dans une fourchette

La superposition des deux confère à la stratégie une forte capacité de profit dans les marchés de retrait. Même si le prix subit un rebond important, la grille continue de capturer des spreads ; tant que la tendance globale est baissière, la position de base reste rentable.


II. Principe de surveillance : comment détecter le signal de retrait le plus rapidement possible

Pour surveiller les informations sur les contrats, cette stratégie utilise une méthode plus directe : surveiller directement les changements de données de l'interface des contrats Binance.

2.1 Le secret du champ deliveryDate

L'interface fapi/v1/exchangeInfo de Binance renvoie les informations détaillées de tous les contrats, dont un champ appelé deliveryDate, qui indique la date de livraison du contrat.

Pour les contrats perpétuels, ce champ est généralement défini sur un timestamp futur lointain :

4133404800000 → correspond au 31 décembre 2100

C'est un espace réservé équivalent à "jamais expiré".

Le point clé : lorsque Binance décide de retirer un contrat perpétuel, elle modifie le deliveryDate de ce contrat en un timestamp réel de retrait, en même temps que la publication de l'annonce.

Contrat perpétuel normal : deliveryDate = 4133404800000 (jamais expiré) Contrat en cours de retrait : deliveryDate = 1744106400000 (2026-04-08 17:00:00)

Ce changement est immédiatement reflété dans les données de l'interface, plus rapide que le rendu de la page d'annonce, et plus structuré, sans avoir à analyser du HTML.

2.2 Implémentation du code de surveillance

Interrogez l'interface toutes les 15 secondes, filtrez les contrats perpétuels USDT dont le deliveryDate est devenu un timestamp réel :

python
def fetch_delist_symbols(): body = HttpQuery("https://fapi.binance.com/fapi/v1/exchangeInfo") data = json.loads(body) now_ms = get_now_ms() result = {} for s in data.get("symbols", []): if not s["symbol"].endswith("USDT"): continue if s.get("contractType") != "PERPETUAL": continue dd = s.get("deliveryDate", PERPETUAL_END) if dd < PERPETUAL_END and dd > now_ms: result[s["symbol"]] = dd return result

Exemple de résultat :

python
{ "HIPPOUSDT": 1744106400000, # 2026-04-08 17:00:00 "OLUSDT": 1744106400000, "RLSUSDT": 1744106400000, "PUFFERUSDT":1744106400000, }

Remarque : Après des tests en trading réel, il y a un léger retard ; vous pouvez choisir une méthode de vérification plus rapide si nécessaire.


III. Architecture de la stratégie

L'ensemble de la stratégie se compose de deux modules exécutés en parallèle :

img

Lorsqu'un nouveau contrat est découvert, un objet task est créé indépendamment pour chaque contrat, contenant l'état complet de ce contrat :

python
task = { "symbol": "HIPPO_USDT", "delist_time_ms": 1744106400000, "fund_per_task": 250.0, # Capital alloué "base_short_qty": 1500000, # Taille de la position de base "range_high": 0.0005287, # Limite haute de la grille "range_low": 0.0004758, # Limite basse de la grille "grid_width": 0.0000529, # Largeur des intervalles (fixe) "grids": [...], # État des 10 cellules "shift_count": 0, # Nombre de déplacements déjà effectués ... }

Les task des différents contrats sont indépendants les uns des autres, sans interférence, et s'exécutent en parallèle.


IV. Allocation du capital

Lorsque N contrats en retrait sont découverts, le solde disponible du compte est réparti dynamiquement de manière égale :

Capital alloué à chaque contrat = Solde disponible × 80 % / N

Les 20 % restants servent de tampon de marge pour éviter une liquidation en cas de rebond temporaire du prix.

Détail important : Lors de l'initialisation successive de plusieurs contrats, chaque initialisation réduit le solde disponible du compte (la position de base utilise la marge). Il n'est donc pas possible de calculer le capital alloué à tous les contrats en une seule fois avant le début de la boucle ; il faut interroger à nouveau le solde avant chaque initialisation :

python
for idx, (binance_sym, delist_ms) in enumerate(delist_map.items()): update_global_account() remaining_count = total_new - idx available_now = total_balance - margin_used fund_per_task = available_now * 0.8 / remaining_count task = init_task(binance_sym, delist_ms, fund_per_task)

Cela garantit que chaque contrat reçoit une allocation de fonds raisonnable, évitant que les premiers contrats ne consomment trop de marge et ne laissent pas assez de fonds aux suivants.


V. Détail du portefeuille de base et de la grille

5.1 Ouverture de la position courte de base

Dès l’annonce, à l’initialisation, on ouvre immédiatement une position courte au prix du marché, sans attendre la grille :

Position nominale de base = Fonds alloués × 50 % × Effet de levier Exemple : Fonds alloués = 250 USDT, effet de levier = 10 Position nominale de base = 250 × 50 % × 10 = 1250 USDT

La position de base est conservée pendant toute la durée, elle ne participe pas aux ouvertures/fermetures répétées de la grille, et n’est clôturée qu’avec la liquidation forcée avant le retrait de la cote.

La position de base constitue la plus grande source de profit de la stratégie – si le jeton retiré a baissé de 50 % entre l’annonce et le retrait, la position courte de base rapporte ces 50 % (multipliés par l’effet de levier).

5.2 Configuration de la grille courte

Avec le prix actuel comme bord supérieur, une baisse de 10 % comme bord inférieur, et 10 paliers uniformément espacés :

Exemple (prix actuel 0,0005287, largeur de l’intervalle = 10 %) : Bord supérieur = 0,0005287 Bord inférieur = 0,0005287 × (1 - 10%) = 0,0004758 Écart = (0,0005287 - 0,0004758) / 10 = 0,0000053 Palier 9 : Vente à découvert @ 0,0005287 → Couverture @ 0,0005234 Palier 8 : Vente à découvert @ 0,0005234 → Couverture @ 0,0005181 Palier 7 : Vente à découvert @ 0,0005181 → Couverture @ 0,0005128 ... Palier 0 : Vente à découvert @ 0,0004811 → Couverture @ 0,0004758

Les fonds sont répartis également entre les paliers. La logique est simple : lorsque le prix rebondit jusqu’au prix de vente à découvert, l’ordre est exécuté et la position courte s’ouvre ; lorsque le prix baisse jusqu’au prix de couverture, l’ordre est exécuté et la position courte se ferme ; un aller-retour complet est effectué, puis on replace un ordre de vente à découvert en attendant le prochain rebond.

5.3 Stratégie de placement des ordres au démarrage

Au démarrage, tous les paliers dont le prix de vente à découvert est au prix actuel sont placés :

Prix actuel 0,0005287 Palier 9 – Prix de vente à découvert = 0,0005287 ≥ 0,0005287 → Ordre placé ✅ Palier 8 – Prix de vente à découvert = 0,0005234 < 0,0005287 → skip_below (prix déjà passé en dessous) Palier 7 et suivants → tous skip_below

La raison pour laquelle on place tous les paliers au-dessus du prix actuel est que, dans une tendance baissière, le prix peut rebondir de manière inattendue à tout moment ; en plaçant tous les paliers à l’avance, on s’assure de ne manquer aucune opportunité de vente à découvert lors d’un rebond.


VI. Déplacement dynamique de l’intervalle

C’est le mécanisme le plus central de toute la stratégie. Le prix ne reste pas indéfiniment dans l’intervalle initial ; la grille doit suivre le prix pour continuer à capter les écarts.

6.1 Descente (en dessous du bord inférieur)

Lorsque le prix tombe en dessous du bord inférieur de la grille, cela signifie que la baisse a dépassé la couverture de l’intervalle actuel ; il faut alors descendre tout l’intervalle :

Ancien intervalle : 0,0004758 ~ 0,0005287 Prix actuel : 0,0004500 (en dessous du bord inférieur 0,0004758) Calcul du nouvel intervalle (pas de déplacement = 5 %) : pas = 0,0004500 × 5 % = 0,0000225 Nouveau bord supérieur = 0,0005287 - 0,0000225 = 0,0005062 Nouveau bord inférieur = 0,0005062 - 0,0000529 = 0,0004533 Nouvel intervalle : 0,0004533 ~ 0,0005062

6.2 Montée (rebond au-dessus du bord supérieur)

Lorsque le prix rebondit au-dessus du bord supérieur de la grille, l’intervalle suit la hausse :

Ancien intervalle : 0,0004494 ~ 0,0005023 Prix actuel : 0,0005100 (dépasse le bord supérieur 0,0005023) Le nouvel intervalle monte pour que le prix actuel se trouve à l’intérieur. Nouvel intervalle : 0,0004758 ~ 0,0005287

Ce mécanisme garantit que, quelle que soit l’évolution du prix, la grille suit toujours le prix, évitant que le prix ne sorte de l’intervalle et que tous les paliers restent vides.

6.3 La largeur de l’intervalle reste constante

Chaque déplacement ne modifie que la position de l’intervalle, pas sa largeur :

python
grid_width = round(range_high - range_low, 8) # fixé à l'initialisation # en cas de descente range_high = fp(task, range_high - shift_step) range_low = fp(task, range_high - grid_width) # calculé avec la largeur fixe

Ainsi, on évite que les erreurs d’arrondi flottant ne réduisent ou n’élargissent progressivement l’intervalle.

6.4 Mécanisme de protection des positions

Lors du déplacement de l’intervalle, tous les ordres sont annulés et la grille est reconstruite. Mais que faire des paliers qui ont déjà ouvert une position courte et attendent la couverture ?

Si on reconstruit directement, ces positions deviennent « orphelines » – on a des positions courtes sans ordre de couverture correspondant, ce qui revient à une position nue, totalement exposée au risque de rebond.

La solution : avant le déplacement, enregistrer le nombre total de contrats détenus dans tous les paliers, puis, après le déplacement, replacer un ordre de couverture au palier le plus bas du nouvel intervalle :

python
# Avant le déplacement, totaliser les positions holding_contracts = sum( g.get("sell_contracts", 0) for g in task["grids"] if g["status"] in ("pending_cover", "holding_no_cover") ) cancel_all_orders(task) activate_grids(task, new_high, new_low) # Après le déplacement, placer une couverture de protection au palier le plus bas if holding_contracts > 0: _place_grid_cover(task, 0, holding_contracts)

Ainsi, quel que soit le déplacement de l’intervalle, les positions courtes déjà ouvertes restent traçables.


VII. Gestion parallèle de plusieurs contrats

7.1 Logique de traitement lors de la découverte d’un nouveau contrat

img

Les fonds libérés par la clôture des anciens contrats sont réaffectés, garantissant que le nouveau contrat dispose de fonds suffisants.

7.2 Gestion du cycle de vie

Cycle de vie de chaque contrat :

img


VIII. Quelques détails clés

8.1 Piège de précision pour les jetons à faible prix

Pour des jetons comme HIPPOUSDT, dont le prix est de l’ordre de 0,0003, le calcul du pas de déplacement de l’intervalle rencontre des problèmes de précision :

pas = 0,0003 × 5 % = 0,000015 Si PricePrecision = 4 (4 décimales conservées) round(0,000015, 4) = 0,0 ← le pas devient 0 ! → la boucle while ne se termine jamais, boucle infinie

La solution consiste à ne pas arrondir le pas à la précision et à définir un pas minimum de sécurité :

python
shift_step = price * SHIFT_STEP_PCT min_step = 10 ** (-PricePrecision) shift_step = max(shift_step, min_step) # au moins égal à l'unité de précision minimale

8.2 Gestion d’un échec d’ouverture de la position courte de base

Une ouverture de position courte au marché peut échouer en raison d’un manque de fonds ou d’un problème réseau. Dans ce cas, il ne faut pas construire la grille, sinon on se retrouverait avec une grille nue sans position de base :

python
def open_base_short(task): oid = place_market_short(task, usdt_amount) Sleep(1000) amt, _, _ = get_short_position(task) task["base_short_qty"] = amt if amt <= 0: Log("Échec d'ouverture de la position courte de base, on saute ce contrat") return False return True # dans init_task if not open_base_short(task): return None # échec d'initialisation, pas d'ajout à tasks

8.3 Moment et méthode de la liquidation forcée

On choisit 60 minutes avant le retrait plutôt que 30 minutes (moment où Binance interdit l’ouverture de nouvelles positions), afin de laisser une fenêtre temporelle suffisante pour la clôture. Plus on se rapproche du retrait, plus la liquidité est faible et plus la clôture est difficile.

Pour la clôture, on utilise un ordre limité légèrement au-dessus du prix du marché, plutôt qu’un véritable ordre au marché, pour éviter d’être victime d’un mauvais appariement en cas de liquidité très faible :

python
buy_p = fp(task, price * 1.005) # 0,5 % au-dessus du marché exchange.CreateOrder(swapcode, "closesell", buy_p, fc)

Si la clôture n’est pas complète en une fois, on réessaie jusqu’à 10 fois, en récupérant le prix le plus récent à chaque tentative.

8.4 Revenu supplémentaire du taux de financement

En tendance baissière, le taux de financement est généralement favorable aux positions courtes (le shorteur reçoit de l’argent). C’est un revenu supplémentaire apporté par la position de base, qui n’apparaît pas dans les statistiques d’écart de la grille mais se reflète dans l’augmentation des capitaux propres du compte.


IX. Recommandations de paramètres

python
LEVERAGE = 10 # Effet de levier, recommandé 5~10, ne pas dépasser GRID_WIDTH_PCT = 0.10 # Largeur de la grille 10%, couvre l'amplitude normale des oscillations SHIFT_STEP_PCT = 0.05 # Pas de décalage 5%, environ la moitié de la largeur de la grille GRID_COUNT = 10 # Nombre de grilles, plus il y a de grilles, moins il y a de fonds par grille BASE_SHORT_RATIO = 0.5 # Position de base 50%, grille 40%, réserve de 10% FORCE_CLOSE_MINS = 60 # Clôture forcée 60 minutes avant MONITOR_INTERVAL = 15000 # Surveillance toutes les 15 secondes, équilibre entre réactivité et limite de fréquence

Choix de la largeur de la grille : Plus la largeur est grande, plus la plage d'oscillation couverte est large, mais plus l'écart entre les grilles est grand, réduisant la fréquence de récolte. Il est recommandé d'ajuster en fonction de la volatilité historique de la paire, 10 % est un point de départ raisonnable.

Choix du nombre de grilles : Plus il y a de grilles, plus l'écart est petit, plus la fréquence de récolte est élevée, mais moins il y a de fonds par grille, et plus le gain unitaire est faible. Un nombre trop élevé de grilles peut également entraîner un montant insuffisant par grille pour passer l'ordre minimum. 10 grilles est un choix équilibré.


X. Avertissement sur les risques

Avant d'utiliser cette stratégie, il est nécessaire de bien comprendre les risques suivants :

Risque de rebond : Si la nouvelle a déjà été intégrée par le marché à l'avance ("price in"), un rebond de type "la mauvaise nouvelle est déjà digérée" peut survenir après l'annonce, entraînant une perte temporaire sur la position de base. La partie grille peut encore récolter les écarts lors du rebond, mais l'ensemble peut subir un repli temporaire.

Risque de liquidité : Plus on se rapproche de la date de retrait, moins la liquidité du contrat est bonne, l'écart acheteur-vendeur s'élargit, et le glissement lors de la clôture augmente. La stratégie prévoit une prime de 0,5 % et 10 tentatives pour y faire face, mais dans des cas extrêmes, il se peut que toutes les positions ne puissent pas être fermées.

Risque de faux signaux : Dans de très rares cas, Binance peut annuler ou reporter le retrait prévu. Dans ce cas, la stratégie continue de détenir des positions courtes jusqu'à une intervention manuelle ou une prochaine mise à jour de la surveillance.

Risque de levier élevé : Les paires en cours de retrait sont extrêmement volatiles. Avec un levier de 10x, même un rebond de 10 % peut entraîner une perte proche de la totalité du capital. Il est recommandé d'ajuster le levier en fonction de votre tolérance au risque et de contrôler la taille globale de la position.

Démarrage et arrêt opportuns de la stratégie : D'après des tests en conditions réelles, certains actifs peuvent, après une journée de baisse en dents de scie, revenir progressivement à leur état d'avant l'annonce. Il est nécessaire de désactiver la stratégie à temps.

Durée d'exécution : La stratégie nécessite d'attendre longtemps pour détecter une opportunité ; il faut faire preuve de patience.


XI. Conclusion

La valeur fondamentale de cette stratégie est de transformer un avantage informationnel (détection instantanée du signal de retrait) en avantage de trading (exécution automatisée), tout en capturant à la fois le rendement de tendance et les écarts d'oscillation dans un marché baissier unidirectionnel, grâce à la double structure position de base + grille.

Les points clés de conception de l'ensemble du système :

ModuleConception cléProblème résolu
Surveillance deliveryDateLecture directe des modifications de champ de l'APIDétection du signal de retrait en quelques secondes
Allocation dynamique des fondsVérification du solde avant chaque initialisationAllocation équilibrée des fonds entre plusieurs contrats
Ouverture de la position courte au prix du marchéExécution immédiate dès l'annonceNe pas manquer la première chute brutale
Ordres sur toutes les grillesPlacement sur toutes les grilles au-dessus du prix actuelNe pas manquer un rebond plus important que prévu
Largeur de grille fixeMaintien de la largeur lors du déplacementÉviter la dérive des flottants
Protection de la positionReplacements d'ordres de clôture après déplacementÉviter les positions nues
Clôture 60 minutes avantLaisser une fenêtre de clôture suffisanteFaire face à la faible liquidité

Les situations de retrait ne se produisent pas tous les jours, mais chaque occurrence constitue une opportunité de trading relativement certaine. Grâce à une surveillance et une exécution automatisées, il est possible de participer régulièrement à ces opportunités sans avoir à surveiller constamment les écrans.

Code source de la stratégie : Stratégie de grille pour contrats en cours de retrait

Comment
All comments (1)

    文章很好,我统计了下,一个月只有5次
    img

    a month ago
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)