Type/to search
2
Follow
484
Followers
Retiro de la estrategia de cuadrícula corta de futuros en Binance: del monitoreo al trading automatizado
Discussions
Created 2026-05-09 18:31:25  Updated 2026-05-18 11:08:07
 1
 201

img

⚠️ Recordatorio importante

Antes de leer y utilizar esta estrategia, tenga en cuenta los siguientes tres puntos:

1. La estrategia requiere paciencia para esperar oportunidades de apertura de posiciones.

La exclusión de contratos perpetuos en Binance es un evento de baja frecuencia que no ocurre a diario. Una vez iniciada la estrategia, puede tardar días o incluso más tiempo en activar la primera apertura de posición. Durante la mayor parte del tiempo de ejecución, el programa estará en modo de "monitoreo en espera". Prepárese mentalmente para una larga espera y no asuma erróneamente que la estrategia ha fallado por la falta de operaciones en el corto plazo.

2. El momento de la detección de apertura de posición aún puede optimizarse.

Este artículo utiliza un método de sondeo cada 15 segundos de la interfaz fapi/v1/exchangeInfo, identificando las señales de exclusión a través del cambio en el campo deliveryDate. Este enfoque tiene cierto retraso en las pruebas reales y no es la ruta más rápida. Los lectores pueden optimizar el método de detección según sus necesidades, por ejemplo: acortar el intervalo de sondeo, monitorear en paralelo la API de anuncios de Binance, suscribirse a la transmisión WebSocket, combinar señales de múltiples fuentes para verificación cruzada, etc., con el objetivo de lograr una entrada más temprana. Cuanto antes se entre, mayor será la caída máxima de la primera ola de desplome.

3. Asegúrese de detener la estrategia a tiempo para evitar la reversión de ganancias.

En las pruebas reales se ha observado que no todos los pares excluidos caen de manera constante hasta el momento de la exclusión. Algunos pares, después del anuncio, caen bruscamente y luego se recuperan gradualmente en cuestión de horas o un día, e incluso pueden volver al nivel anterior al anuncio. Si no se detiene a tiempo, las ganancias flotantes acumuladas inicialmente pueden ser devoradas en gran medida durante la recuperación, e incluso se puede pasar de ganancias a pérdidas.

Se recomienda establecer cualquiera de las siguientes condiciones como señal de salida activa:

  • Cerrar todas las posiciones inmediatamente después de alcanzar el objetivo de ganancias preestablecido;
  • Forzar el cierre cuando el precio se recupere más allá de un cierto porcentaje (por ejemplo, 20%~30%) desde el punto más bajo después del anuncio;
  • Activar la protección de toma de ganancias cuando la retrocesión de la posición alcance un cierto porcentaje de las ganancias máximas (por ejemplo, 30%~50%).

No espere pasivamente hasta 60 minutos antes de la exclusión para cerrar la posición; ese es un mecanismo de respaldo, no el momento óptimo de salida.

Prefacio

En el mercado de futuros perpetuos de Binance, existe un tipo especial de oportunidad de trading que la mayoría de las personas suele pasar por alto: los eventos de exclusión de contratos.

Periódicamente, Binance publica anuncios declarando la exclusión de ciertos contratos perpetuos con baja liquidez o volumen de negociación reducido. En el momento del anuncio, el mercado reacciona rápidamente: los traders con posiciones largas se ven obligados a cerrar, se desata una venta por pánico, y el precio a menudo cae violentamente en cuestión de minutos, seguido de un largo período de movimiento lateral y bajista hasta la exclusión final.

Tomemos como ejemplo MLNUSDT:

img

Cae casi un tercio en media hora, y todo el ciclo de exclusión suele durar varios días, durante los cuales el precio se mantiene en un rango bajo. Este tipo de comportamiento del mercado es un caldo de cultivo natural para estrategias bajistas.

Sin embargo, operar manualmente estas oportunidades tiene dos dificultades:

Primero, la inmediatez de la información. Los primeros 5 minutos después del anuncio son la ventana de mayor caída. Si se pierde la entrada inicial, el riesgo de seguir la tendencia bajista aumenta significativamente. Es difícil lograr una respuesta en tiempo real las 24 horas del día, los 7 días de la semana con monitoreo manual.

Segundo, el movimiento no es un desplome lineal. Durante la caída del precio, ocurren rebotes constantes. Mantener simplemente una posición corta permite obtener ganancias de tendencia, pero se pierden las numerosas oportunidades de diferenciales de alta frecuencia durante los rebotes.

Para resolver estos dos problemas, este artículo presenta una estrategia automatizada completa: monitorear en tiempo real las señales de exclusión de contratos de Binance mediante un programa, abrir automáticamente una posición corta base en el momento del anuncio, y al mismo tiempo iniciar una rejilla dinámica bajista para capturar continuamente los diferenciales de volatilidad dentro de la tendencia bajista general, y finalmente cerrar automáticamente la posición antes de la exclusión, sin intervención manual.


I. ¿Por qué este tipo de mercado?

Antes de profundizar en la estrategia, debemos entender las características del movimiento de precios de los pares excluidos, ya que son la base del diseño de la estrategia.

1.1 Impacto del anuncio de exclusión en el mercado

Cuando Binance anuncia la exclusión de un contrato perpetuo, la primera reacción del mercado es el pánico. Los traders con posiciones largas saben que el contrato desaparecerá y deben cerrar antes de la exclusión, o serán liquidados forzosamente. Esta venta concentrada genera una fuerte presión vendedora a corto plazo, llevando el precio a la baja rápidamente.

Al mismo tiempo, los market makers reducen sus cotizaciones o retiran liquidez, lo que intensifica aún más la volatilidad del precio. Por eso, los primeros minutos después del anuncio suelen ser el período de mayor caída en todo el ciclo de exclusión.

1.2 Patrón de movimiento lateral bajista

Después de la primera caída brusca, el precio no desciende en línea recta hasta el fondo, sino que muestra un típico movimiento lateral bajista:

img

Este patrón tiene una lógica interna: cada rebote se debe a que los traders de corto plazo creen que la caída es excesiva y compran en el fondo, pero como el fundamento no ha cambiado (el contrato está por desaparecer), las compras pronto quedan atrapadas y el precio vuelve a bajar. La altura de los rebotes es cada vez menor, hasta que la liquidez se agota por completo antes de la exclusión.

Este vaivén regular es el mercado más adecuado para una estrategia de rejilla.

1.3 Dos fuentes de ganancias

Basándonos en lo anterior, podemos diseñar dos vías de ganancia independientes:

Fuente de gananciaHerramienta correspondienteCondición de ganancia
Tendencia bajistaPosición corta basePrecio general a la baja
Diferencial de volatilidadRejilla bajistaPrecio oscila repetidamente en un rango

La combinación de ambas hace que la estrategia sea altamente rentable en mercados de exclusión. Incluso si el precio experimenta un rebote considerable, la rejilla aún puede cosechar diferenciales; mientras la tendencia general sea bajista, la posición base sigue generando ganancias.


II. Principio de monitoreo: cómo detectar la señal de exclusión en el primer momento

Para monitorear la información del contrato, esta estrategia adopta un método más directo: monitorear directamente los cambios en los datos de la interfaz de contratos de Binance.

2.1 El secreto del campo deliveryDate

La interfaz fapi/v1/exchangeInfo de Binance devuelve información detallada de todos los contratos. Uno de los campos es deliveryDate, que indica la fecha de entrega del contrato.

Para los contratos perpetuos, este campo generalmente se establece en una marca de tiempo futura muy lejana:

4133404800000 → corresponde al 31 de diciembre de 2100

Esto es un marcador de posición que significa "nunca expira".

La clave está en: cuando Binance decide excluir un contrato perpetuo, simultáneamente al anuncio, modifica el deliveryDate de ese contrato a la marca de tiempo real de exclusión.

Contrato perpetuo normal: deliveryDate = 4133404800000 (nunca expira) Contrato próximo a excluir: deliveryDate = 1744106400000 (2026-04-08 17:00:00)

Este cambio se refleja inmediatamente en los datos de la interfaz, más rápido y más estructurado que la representación de la página de anuncios, sin necesidad de analizar HTML.

2.2 Implementación del código de monitoreo

Llamar a la interfaz cada 15 segundos, filtrar los contratos perpetuos USDT cuyo deliveryDate haya cambiado a una marca de tiempo real:

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

Ejemplo de resultado:

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

Nota: En pruebas reales, hay un ligero retraso; se puede elegir un método de verificación más rápido.


III. Arquitectura de la estrategia

Toda la estrategia consta de dos módulos que se ejecutan en paralelo:

img

Cuando se detecta un nuevo contrato, se crea un objeto task independiente para ese contrato, que contiene todo su estado:

python
task = { "symbol": "HIPPO_USDT", "delist_time_ms": 1744106400000, "fund_per_task": 250.0, # Fondos asignados "base_short_qty": 1500000, # Cantidad de la posición base corta "range_high": 0.0005287, # Límite superior de la rejilla "range_low": 0.0004758, # Límite inferior de la rejilla "grid_width": 0.0000529, # Ancho de la rejilla (fijo) "grids": [...], # Estado de los 10 niveles "shift_count": 0, # Número de desplazamientos realizados ... }

Los task de múltiples contratos son independientes entre sí, no interfieren y se ejecutan en paralelo.


IV. Asignación de fondos

Al detectar N contratos excluidos, se divide dinámicamente el saldo disponible de la cuenta:

Fondos asignados por contrato = Saldo disponible × 80% / N

Se reserva un 20% como colchón de margen para evitar liquidaciones por rebotes de precio a corto plazo.

Detalle clave: Al inicializar varios contratos secuencialmente, cada vez que se inicializa uno, el saldo disponible de la cuenta disminuye (la posición base ocupa margen). Por lo tanto, no se puede calcular la asignación de todos los contratos de una vez antes del bucle; en su lugar, se debe consultar nuevamente antes de cada inicialización:

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)

Esto asegura que cada contrato reciba una asignación de capital razonable, evitando que los contratos anteriores consuman demasiado margen y dejen sin fondos a los posteriores.


V. Explicación detallada de la posición base y la rejilla

5.1 Apertura de posición corta base

Inmediatamente después del anuncio, al inicializar, se abre una posición corta a precio de mercado, sin esperar a la rejilla:

Posición nominal base = Capital asignado × 50% × Apalancamiento Ejemplo: Capital asignado 250U, apalancamiento 10x Posición nominal base = 250 × 50% × 10 = 1250U

La posición base se mantiene durante todo el proceso, no participa en las aperturas y cierres repetidos de la rejilla, y solo se liquida junto con el cierre forzado antes del delisting.

La posición base es la parte más rentable de toda la estrategia: si el token cae un 50% desde el anuncio hasta el delisting, la posición base contribuye con ese 50% de ganancia en corto (multiplicado por el apalancamiento).

5.2 Configuración de la rejilla de cortos

Tomando el precio actual como borde superior y un 10% por debajo como borde inferior, dividido uniformemente en 10 niveles:

Ejemplo (precio actual 0.0005287, ancho del rango 10%): Borde superior = 0.0005287 Borde inferior = 0.0005287 × (1 - 10%) = 0.0004758 Distancia entre niveles = (0.0005287 - 0.0004758) / 10 = 0.0000053 Nivel 9: Abrir corto @0.0005287 → Cerrar corto @0.0005234 Nivel 8: Abrir corto @0.0005234 → Cerrar corto @0.0005181 Nivel 7: Abrir corto @0.0005181 → Cerrar corto @0.0005128 ... Nivel 0: Abrir corto @0.0004811 → Cerrar corto @0.0004758

El capital se distribuye equitativamente entre los niveles. La lógica es simple: cuando el precio rebota hasta el precio de apertura del corto, se ejecuta la orden de apertura; cuando el precio baja hasta el precio de cierre del corto, se ejecuta la orden de cierre; completado un ciclo, se vuelve a colocar la orden de apertura, esperando el próximo rebote.

5.3 Estrategia de colocación de órdenes al inicio

Al iniciar, se colocan órdenes en todos los niveles cuyo precio de apertura de corto >= precio actual:

Precio actual 0.0005287 Nivel 9 Precio apertura = 0.0005287 ≥ 0.0005287 → Colocar orden ✅ Nivel 8 Precio apertura = 0.0005234 < 0.0005287 → skip_below (el precio ya ha caído por debajo) Niveles 7 e inferiores: todos skip_below

La razón para colocar órdenes en todos los niveles por encima del precio actual es que, en una tendencia bajista, el precio puede tener rebotes inesperados en cualquier momento. Tener todos los niveles pre-colocados asegura no perder ninguna oportunidad de abrir cortos en esos rebotes.


VI. Desplazamiento dinámico del rango

Este es el mecanismo central de toda la estrategia. El precio no se queda para siempre en el rango inicial; la rejilla debe seguir el movimiento del precio para seguir capturando diferenciales.

6.1 Desplazamiento hacia abajo (ruptura del borde inferior)

Cuando el precio cae por debajo del borde inferior de la rejilla, significa que la caída ha superado la cobertura del rango actual, por lo que es necesario desplazar todo el rango hacia abajo:

Rango antiguo: 0.0004758 ~ 0.0005287 Precio actual: 0.0004500 (por debajo del borde inferior 0.0004758) Calcular nuevo rango (paso de desplazamiento 5%): shift_step = 0.0004500 × 5% = 0.0000225 Nuevo borde superior = 0.0005287 - 0.0000225 = 0.0005062 Nuevo borde inferior = 0.0005062 - 0.0000529 = 0.0004533 Nuevo rango: 0.0004533 ~ 0.0005062

6.2 Desplazamiento hacia arriba (rebote por encima del borde superior)

Cuando el precio rebota por encima del borde superior de la rejilla, el rango se desplaza hacia arriba:

Rango antiguo: 0.0004494 ~ 0.0005023 Precio actual: 0.0005100 (por encima del borde superior 0.0005023) El nuevo rango se desplaza hacia arriba, asegurando que el precio actual esté dentro del nuevo rango. Nuevo rango: 0.0004758 ~ 0.0005287

Este mecanismo garantiza que, sin importar cómo fluctúe el precio, la rejilla siempre lo siga, evitando que el precio se salga del rango y deje todos los niveles vacíos.

6.3 El ancho del rango permanece constante

Cada desplazamiento solo cambia la posición del rango, no su ancho:

python
grid_width = round(range_high - range_low, 8) # Fijado al inicializar # Al desplazar hacia abajo range_high = fp(task, range_high - shift_step) range_low = fp(task, range_high - grid_width) # Calculado con el ancho fijo

Esto evita que errores de redondeo acumulados hagan que el rango se vuelva cada vez más estrecho o más ancho.

6.4 Mecanismo de protección de posiciones

Al desplazar el rango, se cancelan todas las órdenes y se reconstruye la rejilla. Pero, ¿qué hacer con los niveles que ya tienen una posición corta abierta esperando cerrar?

Si se reconstruye directamente, esas posiciones se "pierden": hay posiciones cortas sin órdenes de cierre correspondientes, convirtiéndose en posiciones descubiertas, totalmente expuestas al riesgo de rebote.

La solución es: antes del desplazamiento, registrar la cantidad de contratos en todas las posiciones abiertas; después del desplazamiento, colocar una orden de cierre de corto en el nivel más bajo del nuevo rango:

python
# Resumir posiciones antes del desplazamiento 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) # Después del desplazamiento, colocar orden de cierre de protección en el nivel más bajo if holding_contracts > 0: _place_grid_cover(task, 0, holding_contracts)

De esta manera, sin importar cómo se desplace el rango, las posiciones cortas ya abiertas no perderán su seguimiento.


VII. Gestión paralela de múltiples contratos

7.1 Lógica de procesamiento al detectar un nuevo contrato

img

Los fondos liberados al cerrar contratos antiguos se redistribuyen, asegurando que los nuevos contratos reciban suficiente capital.

7.2 Gestión del ciclo de vida

Ciclo de vida de cada contrato:

img


VIII. Algunos detalles clave

8.1 La trampa de precisión en tokens de precio pequeño

Para tokens como HIPPOUSDT, cuyo precio ronda 0.0003, al calcular el paso de desplazamiento del rango surgen problemas de precisión:

shift_step = 0.0003 × 5% = 0.000015 Si PricePrecision = 4 (4 decimales) round(0.000015, 4) = 0.0 ← ¡el paso se vuelve 0! → el bucle while nunca termina, bucle infinito

La solución es no truncar la precisión del paso y establecer un paso mínimo de respaldo:

python
shift_step = price * SHIFT_STEP_PCT min_step = 10 ** (-PricePrecision) shift_step = max(shift_step, min_step) # Al menos igual a la unidad mínima de precisión

8.2 Manejo de fallos en la apertura de la posición base corta

La apertura de corto a mercado puede fallar por falta de fondos o problemas de red. En ese caso, no se debe continuar construyendo la rejilla, ya que resultaría en una rejilla sin posición 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(f"Fallo al abrir posición base corta, saltando este contrato") return False return True # En init_task if not open_base_short(task): return None # Inicialización fallida, no se agrega a tasks

8.3 Momento y forma del cierre forzado

Elegir 60 minutos antes del delisting en lugar de 30 minutos (cuando Binance prohíbe abrir nuevas posiciones) es para dejar suficiente ventana de tiempo para el cierre. Cuanto más cerca del delisting, menor es la liquidez y más difícil es cerrar.

Para el cierre, se usa una orden limitada ligeramente por encima del precio de mercado, en lugar de una orden de mercado real, para evitar ser perjudicado en condiciones de liquidez extremadamente baja:

python
buy_p = fp(task, price * 1.005) # 0.5% por encima del mercado exchange.CreateOrder(swapcode, "closesell", buy_p, fc)

Si no se cierra todo de una vez, se reintenta hasta 10 veces, obteniendo el precio más reciente cada vez.

8.4 Ingresos adicionales por tasas de financiación

En una tendencia bajista, las tasas de financiación suelen ser favorables para los cortos (los cortos reciben dinero). Este es un ingreso adicional de mantener la posición base, que no se refleja en las estadísticas de diferenciales de la rejilla, pero sí en el crecimiento del capital de la cuenta.


IX. Recomendaciones de configuración de parámetros

python
LEVERAGE = 10 # Apalancamiento, recomendado 5~10, no demasiado alto GRID_WIDTH_PCT = 0.10 # Ancho de la cuadrícula 10%, cubre la amplitud de oscilación normal SHIFT_STEP_PCT = 0.05 # Paso de desplazamiento 5%, aproximadamente la mitad del ancho de la cuadrícula GRID_COUNT = 10 # Número de cuadrículas, a más cuadrículas menos capital por cuadrícula BASE_SHORT_RATIO = 0.5 # Posición base 50%, cuadrícula 40%, dejar 10% de margen FORCE_CLOSE_MINS = 60 # Cerrar 60 minutos antes MONITOR_INTERVAL = 15000 # Monitorear cada 15 segundos, equilibrando oportunidad y límite de frecuencia

Elección del ancho de la cuadrícula: Cuanto mayor sea el ancho, mayor será el rango de oscilación cubierto, pero también mayor será la distancia entre cuadrículas, reduciendo la frecuencia de cosecha. Se recomienda ajustar según la volatilidad histórica del par, generalmente un 10% es un punto de partida razonable.

Elección del número de cuadrículas: Cuantas más cuadrículas, menor será la distancia entre ellas y mayor la frecuencia de cosecha, pero menor el capital por cuadrícula y menor la ganancia por operación. Demasiadas cuadrículas también pueden provocar que el capital por cuadrícula sea insuficiente para la cantidad mínima de orden. 10 cuadrículas es una elección equilibrada.


X. Advertencia de riesgos

Antes de utilizar esta estrategia, es necesario comprender completamente los siguientes riesgos:

Riesgo de rebote: Si la noticia ya ha sido descontada por el mercado de antemano, tras el anuncio puede producirse un rebote de "agotamiento de las malas noticias", y la posición base sufrirá pérdidas temporales. La parte de la cuadrícula aún puede cosechar diferenciales durante el rebote, pero en general puede haber un retroceso temporal.

Riesgo de liquidez: Cuanto más cerca esté la fecha de exclusión, menor será la liquidez del contrato, mayor el diferencial entre compra y venta, y mayor el deslizamiento al cerrar. La estrategia establece una prima del 0,5% y 10 reintentos para mitigarlo, pero en casos extremos aún podría no ser posible cerrar todas las posiciones.

Riesgo de señales falsas: En raras ocasiones, Binance cancela o retrasa los planes de exclusión, en cuyo caso la estrategia seguirá manteniendo posiciones cortas hasta la intervención manual o la próxima actualización del monitoreo.

Riesgo de alto apalancamiento: Los pares excluidos son extremadamente volátiles; con un apalancamiento de 10x, incluso un rebote del 10% puede causar una pérdida cercana a todo el capital. Se recomienda ajustar el apalancamiento según la tolerancia al riesgo propia y controlar el tamaño total de la posición.

Inicio y detención oportunos de la estrategia: Según la experiencia en operaciones reales, algunos pares después de caer con fluctuaciones durante un día pueden recuperar gradualmente su precio anterior al anuncio, por lo que es necesario cerrar la estrategia a tiempo.

Duración de la ejecución: La estrategia requiere esperar un tiempo considerable para encontrar oportunidades; se necesita paciencia.


XI. Resumen

El valor central de esta estrategia radica en convertir la ventaja informativa (detectar señales de exclusión en el primer momento) en una ventaja de negociación (ejecución automatizada), mientras que mediante la estructura dual de posición base + cuadrícula, captura tanto las ganancias de tendencia como los diferenciales de oscilación en mercados en caída unilateral.

Puntos clave de diseño de todo el sistema:

MóduloDiseño centralProblema resuelto
Monitoreo de deliveryDateLectura directa de cambios en el campo de la interfazDetección de señales de exclusión en segundos
Asignación dinámica de capitalConsultar saldo nuevamente antes de cada inicializaciónAsignación equilibrada de capital entre múltiples contratos
Apertura de corto a precio de mercado en posición baseEjecución inmediata tras el anuncioNo perder la primera caída brusca
Órdenes en todas las cuadrículasColocar órdenes en todas las cuadrículas por encima del precio actualNo perder rebotes inesperados
Ancho de cuadrícula fijoMantener el ancho constante al desplazarsePrevenir desviaciones de punto flotante
Protección de posiciónVolver a colocar órdenes de cierre de corto tras el desplazamientoPrevenir posiciones sin cobertura
Cierre 60 minutos antesDejar suficiente ventana de tiempo para cerrarHacer frente a la baja liquidez

Las exclusiones no ocurren todos los días, pero cada vez que aparecen son oportunidades de trading con una certeza relativamente alta. Mediante el monitoreo y la ejecución automatizados, se puede participar de manera estable en este tipo de oportunidades sin necesidad de estar frente a la pantalla.

Código fuente de la estrategia: Estrategia de rejilla para contratos excluidos

Comment
All comments (1)

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

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