[TOC]

La estrategia presentada en este artículo fue de código abierto y compartida por el usuario @Gianbin. Es una versión modificada de nuestro anterior marco de flujo de trabajo de comercio dual. Gracias por compartirla generosamente; el desglose completo de la lógica de la estrategia se encuentra a continuación.
En el mundo de las criptomonedas, aparecen con frecuencia las “monedas gigantes”: aquellas que suben un 30-40% o incluso se duplican en un solo día. Estas monedas parecen tentadoras, pero…Cuanto más pronunciada sea la subida, más severo tiende a ser el retroceso.。
Esta estrategia aprovecha esta característica:
Principios generales de gestión de fondos:Tamaño de posición fijo de 50U, tamaño de posición total controlado dentro de 500U.Los riesgos son relativamente controlables.

Las estrategias se dividen enDos procesos independientesCada uno cumple sus propias funciones:
Proceso comercial principal (cada 15 minutos)Filtrar la lista de los principales ganadores → Recopilar datos → Análisis de IA → Ejecutar la apertura de posición.
Proceso de monitoreo de control de riesgos (cada 5 segundos)Monitoreo del mercado en tiempo real → Detección de ganancias y stop loss → Promedio de posiciones en pirámide invertida → Panel visual
Las decisiones estratégicas pueden tomarse gradualmente, pero las respuestas de control de riesgos deben ser rápidas. Por eso, las frecuencias de activación de ambas líneas difieren tanto.
El disparador temporizado se activa cada 15 minutos, extrayendo todos los datos de contratos perpetuos de USDT de Binance y seleccionando las 20 criptomonedas principales con un aumento superior al 10 % en 24 horas. También excluye automáticamente las posiciones ya existentes para evitar entradas duplicadas.
// 核心筛选逻辑(节选)
const minChange = $vars.minChange || 0.1; // 默认涨幅阈值10%
const topN = $vars.topN; // 取前N名,默认20
// 过滤USDT永续合约,计算24h涨幅
const change24h = open24h > 0 ? (price - open24h) / open24h : 0;
if (change24h < minChange) continue; // 低于阈值直接跳过
// 排除已持仓币种
if (excludeHolding && holdingSymbols.indexOf(symbol) !== -1) continue;
// 按涨幅降序,取前N名
usdtPairs.sort((a, b) => b.change24h - a.change24h);
const topGainers = usdtPairs.slice(0, topN);
Este paso es equivalente a una “selección preliminar”, donde se seleccionan las monedas más volátiles e impredecibles y se reservan para uso futuro.
Simplemente observar el aumento de precio no es suficiente; el sistema también recopilará los siguientes datos simultáneamente para prepararse para el análisis de IA:
| Dimensiones de los datos | significado | Utilización |
|---|---|---|
| Interés abierto (OI) | Interés abierto total en el mercado de contratos | Medición de la liquidez y el sentimiento del mercado |
| Tasas de financiación | Relación de pago entre el lado largo y el lado corto | Determinar si las ventas en corto están sobrepobladas |
| Capitalización de mercado (MCap) | Capitalización bursátil circulante | Calcular la relación de apalancamiento OI/MCap |
| Datos de velas | Gráfico diario OHLCV | Análisis técnico |
La relación OI/MCap es la métrica principal.Cuanto mayor sea esta relación, mayor será el apalancamiento del mercado, mayor será el riesgo de llamadas de margen y mayores serán las probabilidades de ganar en ventas en corto.。
// 通过币安API获取持仓量(节选)
const ret = exchange.IO("api", "GET", "/fapi/v1/openInterest", "symbol=" + symbol);
if (ret && ret.openInterest) {
openInterest = parseFloat(ret.openInterest) * coin.price; // 折算成USD
}
// 计算OI/MCap比率
const oiMcapRatio = marketCap > 0 ? openInterest / marketCap : 0;
Los datos de capitalización de mercado se obtienen de la API de CoinMarketCap y se almacenan en caché localmente durante 30 minutos para evitar llamadas frecuentes a interfaces externas.
Este es el núcleo de toda la estrategia. Tras recopilar los datos, se empaquetan y se envían a la IA (en este caso, se utiliza IA).x-ai/grok-4.1-fastLas puntuaciones se asignan sobre 10, y sólo aquellos que obtengan una puntuación de 8 o más serán incluidos en la lista de candidatos para los puestos vacantes.
| factor | Peso | Lógica de puntuación |
|---|---|---|
| Relación OI/MCap | 3.5 | Una puntuación superior al 35% es perfecta; cuanto mayor sea el apalancamiento, más peligroso es. |
| Patrones de velas | 2.8 | Las sombras superiores largas/velas doji de alto nivel y otras señales de techo obtienen una alta puntuación. |
| Posiciones | 1.5 | Cuanto mejor sea la liquidez, mayor será la puntuación. |
| Volumen de operaciones | 1.5 | Cuanto más activo sea el trading, mayor será la puntuación. |
| Aumentar | 0.5 | Ha pasado la prueba inicial, pero la discriminación es baja. |
| Tasas de financiación | 0.2 | Cuanto más abarrotados estén los toros, mayor será la puntuación. |
La relación OI/MCap tiene el mayor peso (3,5 puntos) porque refleja directamente el grado de apalancamiento del mercado: cuanto mayor sea el apalancamiento, más fácil será desencadenar una estampida de liquidación una vez que el mercado se revierta y mejores serán las probabilidades de realizar posiciones cortas.
La sombra superior larga rompe un nuevo máximo (2,8 puntos): el precio alcanza un nuevo máximo y la sombra superior es mayor que 2 veces el cuerpo. Sombra superior larga de alto nivel (2,4 minutos): la sombra superior es > 2 veces el cuerpo y el precio de cierre está cerca del máximo de 24 horas. Vela bajista de alto volumen (2,0 minutos): cierra a la baja y el volumen de negociación es > día anterior × 1,5 Doji de alto nivel (1,8 minutos): tamaño del cuerpo < amplitud × 0,1 y el precio está cerca de su punto más alto. Dos velas bajistas consecutivas (1,5 minutos)
Antes de la puntuación de IA, la estrategia realiza varios filtros duros, omitiendo los elementos que no cumplen los criterios y no los califica:
// 周线最高价计算(节选)
const weeklyHigh = Math.max(...klines.slice(-7).map(k => k.high));
const weeklyDrawdown = (weeklyHigh - price) / weeklyHigh;
if (weeklyDrawdown > 0.05) {
// 距周线高点超5%,跳过
filtered.weeklyDrawdown++;
continue;
}
Cuando la puntuación total es ≥ 8.0 y la caída intradía es ≤ 5%, se toma una decisión: si la tasa de financiación es ≥ -0.15%, se emite “Abrir corto”; si la tasa de financiación está entre -0.20% y -0.15%, se emite “Corto cauteloso”. No se emite ninguna salida ni se abre ninguna posición para objetivos con una puntuación total < 8.0.
La IA genera los resultados de las decisiones en formato JSON, que luego son analizados por el nodo de ejecución de transacciones antes de ser utilizados para realizar pedidos.
// 执行开空(节选)
function executeShort(coin, signalInfo) {
exchange.SetCurrency(coin + '_USDT');
exchange.SetContractType("swap");
exchange.SetMarginLevel(CONFIG.DEFAULT_LEVERAGE); // 设置需求杠杆
// 根据固定金额计算张数
const contractAmount = calculateContractAmount(
CONFIG.FIXED_AMOUNT_USD, // 固定50U
currentPrice,
market
);
exchange.SetDirection("sell");
const orderId = exchange.Sell(-1, contractAmount); // 市价开空
if (orderId) {
_G(`${coin}_USDT.swap_maxprofit`, 0); // 初始化最高盈利记录
Log(`✅ ${coin}: 开空成功 评分${signalInfo.score}`);
}
}
Cada posición está fijada en 50U, lo que hace que el riesgo sea único y controlable.
Se activa cada 5 segundos, monitorea continuamente todas las posiciones y ejecuta dos funciones principales:Promedio de pirámide invertida y Cancelación de pérdidas。
Este es el elemento de diseño más interesante de esta estrategia. Tras una venta corta, si el precio sube en lugar de bajar, una persona normal reduciría sus pérdidas y saldría. Pero esta estrategia elige…Añadiendo posiciones contra la tendencia—Cuanto más sube, más compras, porque cuanto más sube, mayor tiende a ser el retroceso final.
Las reglas para agregar un puesto son las siguientes:
La posición inicial es de 50U (el precio de apertura se registra como P0). Si el precio aumenta un 50% desde P0, se activa la primera posición adicional de 150U, y el precio en ese momento se registra como P1. Si el precio continúa aumentando un 70% desde P1, se activa una segunda posición adicional de 300U. Se pueden añadir un máximo de dos posiciones adicionales, con un límite total de 500U (50 + 150 + 300).
// 加仓触发检测(节选)
function checkAndExecutePyramidAdd(coin, entryPrice, currentPrice, isShort) {
const addCount = _G(addCountKey) || 0;
if (addCount >= 2) return null; // 最多加仓两次
if (addCount === 0) {
// 第一次加仓:从开仓价涨50%触发
triggerPrice = storedEntryPrice * (1 + PYRAMID_CONFIG.ADD1_TRIGGER);
addAmount = PYRAMID_CONFIG.ADD1_AMOUNT; // 150U
} else if (addCount === 1) {
// 第二次加仓:从第一次加仓价涨70%触发
triggerPrice = add1Price * (1 + PYRAMID_CONFIG.ADD2_TRIGGER);
addAmount = PYRAMID_CONFIG.ADD2_AMOUNT; // 300U
}
if (currentPrice >= triggerPrice) {
return { level: addCount + 1, amount: addAmount, triggerPrice, currentPrice };
}
return null;
}
La lógica de este diseñoLas criptomonedas altamente volátiles tienden a volverse cada vez más frenéticas a medida que suben, creando una burbuja cada vez más grande. Cuando finalmente se corrigen, el alto apalancamiento provocará una liquidación más severa. Mantener una posición más grande en el pico puede amplificar las ganancias una vez que el mercado se invierte.
Los riesgos también son evidentes.Si la criptomoneda no recupera sus ganancias (por ejemplo, durante un mercado alcista genuino con fluctuaciones de precios unilaterales), las pérdidas se verán amplificadas. Por lo tanto, las cuentas deben mantener fondos suficientes para mitigar el riesgo de volatilidad y evitar la liquidación forzosa. La estrategia también limita explícitamente el tamaño de las posiciones a 500 USDT, lo que impide la creación de posiciones ilimitadas.
Toma de gananciasRetroceso para tomar gananciasUn patrón, no un objetivo de beneficio fijo:
Cuando la ganancia máxima de una posición alcanza el 35%, se inicia automáticamente el monitoreo de la caída; una vez que la caída alcanza el 5% desde el punto de ganancia máxima, se activa inmediatamente la liquidación.
La ventaja de este diseño es que “deja correr las ganancias”: evita que usted pierda ganancias mayores al tomar ganancias demasiado pronto, y también evita que pierda todas sus ganancias flotantes al tomar un ascensor.
// 自动止盈触发逻辑(节选)
if (enableAutoTpDrawdown && isShort && tpDrawdown === 0 && maxPnlPercent >= autoTpTrigger) {
tpDrawdown = autoTpDrawdownValue; // 设置5%回撤止盈
_G(tpDrawdownKey, tpDrawdown);
Log(`🎯 ${coin} 最高盈亏达${maxPnlPercent}%,自动启用止盈回撤5%`);
}
// 触发止盈
if (tpDrawdown > 0 && maxPnlPercent > 0 && drawdown >= tpDrawdown) {
autoCloseReason = `止盈回撤(回撤${drawdown}%≥${tpDrawdown}%)`;
}
Respecto al stop-loss, permite configurar manualmente un porcentaje fijo de stop-loss como protección final.

La estrategia cuenta con cuatro paneles de monitoreo integrados para facilitar el seguimiento en tiempo real de su estado operativo:
Descripción general de la cuentaPatrimonio, beneficio/pérdida acumulado, margen de beneficio y apalancamiento de la cuenta (con indicadores de color del nivel de riesgo).
Medidor de señal de IARegistre la puntuación, la conclusión, las puntuaciones de los factores y las razones de cada decisión de la IA, eliminando la necesidad de adivinar lo que está pensando la IA.
Tabla de seguimiento de posiciónVisualización en tiempo real del precio de entrada, precio actual, ganancias/pérdidas no realizadas, registro de ganancias más alto, reducción actual, precio de activación para agregar posiciones y estado de stop-loss/take-profit para cada posición.
Detalles de la cuadrículaEstado del pedido al utilizar el comercio en red:
Se actualiza cada 5 segundos a través de la plataforma FMZ.LogStatusSe presenta como una tabla interactiva, que admite operaciones como hacer clic directamente para cerrar posiciones y modificar los parámetros de stop-loss y take-profit.
El pensamiento contrario crea naturalmente una fuerza opuesta.Las ventas en corto cuando el mercado está en alza ofrecen amplia liquidez y un deslizamiento mínimo.
Selección multifactorial basada en IA, no ventas en corto a ciegas.El sistema utiliza una evaluación integral en seis dimensiones para filtrar una gran cantidad de señales de baja calidad, centrándose solo en los objetivos con una puntuación de 8 o más.
La estrategia de la pirámide invertida, combinada con la toma de ganancias basada en retrocesos, ofrece una buena relación riesgo-recompensa.Aumente su posición a medida que los precios suben, ya que las reversiones pueden ser significativas y las ganancias potenciales son altas; no hay un punto fijo de toma de ganancias, lo que permite que las ganancias se realicen en su totalidad.
Control estricto de posiciónEl monto máximo por transacción es 500 USDT, por lo que incluso si pierde todo, aún es manejable.
Pérdidas continuas durante un mercado alcista unilateralSi el mercado entra en un fuerte ciclo ascendente, aquellos en la lista de ganadores por ventas en corto pueden experimentar una serie de pérdidas.
El promedio de pirámide invertida es un arma de doble filo.Aumentar una posición contra la tendencia amplifica tanto las ganancias como las pérdidas. Si una moneda volátil continúa subiendo (por ejemplo, debido a noticias positivas importantes sobre un proyecto), las tres posiciones podrían generar pérdidas, con una pérdida máxima de 500 USDT.
Escenario de aplicaciónEste método no es adecuado para mercados volátiles, bajistas ni alcistas unilaterales. Se requiere un conocimiento básico del entorno general del mercado antes de usarlo.
La idea central de esta estrategia es:Reemplace el juicio subjetivo con datos e inteligencia artificial, y reemplace las ilusiones con un control estricto de la posición.。
Ya sea el diseño del sistema de puntuación de seis factores o la selección de la relación OI/MCap como indicador principal, está claro que el autor tiene una sólida comprensión de la microestructura del mercado, sabiendo qué indicadores son realmente útiles y cuáles son ruido.
Por supuesto, toda estrategia tiene sus limitaciones. Las herramientas son estáticas, pero el mercado es dinámico. Se recomienda realizar backtesting exhaustivo antes de operar en vivo, ajustando los parámetros según su propia tolerancia al riesgo y evitando copiar estrategias a ciegas.
Agradecimiento especial al usuario @GianbinEsta estrategia se compartió sin reservas, revelando su fundamento. Es este espíritu de código abierto el que permite a más personas aprender y explorar las posibilidades del trading cuantitativo. Si tienes buenas ideas de estrategia, ¡compártelas!