[TOC]

Recientemente, un amigo me preguntó si era posible crear una estrategia de arbitraje de tasas de financiación. Por ejemplo, suele haber una inconsistencia en las tasas de financiación entre los CEX y los DEX, y la estrategia podría recopilar oportunidades de arbitraje y usar IA para determinar si vale la pena abrir una posición. Sin embargo, siempre ha habido un problema:No existen buenas herramientas para detectar oportunidades de arbitraje。
Por coincidencia, un pez gordo lo recomendó.VarFundingEsta plataforma recopila datos de tasas de financiación en tiempo real de múltiples plataformas, como Binance, Hyperliquid, Lightner y Bybit, todas ellas listadas en la plataforma. Además, al comparar estos datos de tasas de financiación en tiempo real, ofrece combinaciones óptimas de oportunidades de arbitraje.

¡Esto es como una almohada que te entregan justo cuando tienes sueño! Hoy te guiaré paso a paso en el diseño de esta estrategia de arbitraje de tasas de financiación.
Antes de profundizar en estrategias, aclaremos una cuestión:¿Qué es exactamente el arbitraje de la tasa de financiación?
Los contratos perpetuos tienen un mecanismo llamadoTasa de financiaciónEl ciclo de liquidación varía de una bolsa a otra: algunas tienen un período de liquidación de 8 horas, algunas tienen un período de liquidación de 4 horas y algunas incluso tienen un período de liquidación de 1 hora.
Cada exchange tiene diferentes estructuras de usuarios y liquidez, lo que resulta en distintos equilibrios de poder entre inversores optimistas y optimistas. Por lo tanto, las tasas de financiación para la misma criptomoneda suelen variar entre distintos exchanges.
Por ejemplo, la tasa de comisión de BTC del exchange A es…+0.1%El intercambio B es+0.05%。
En este punto podemos:
Al cubrir las posiciones de ambos lados, las ganancias y pérdidas por las fluctuaciones de precios se compensan entre sí, pero la diferencia de comisión (0,05%) se embolsa de forma constante.

Ésta es la lógica central del arbitraje de tasas de financiación: usted se beneficia de la diferencia de tasas, no de las fluctuaciones de precios.
Una vez comprendido el principio del arbitraje de la tasa de financiación, la siguiente pregunta es: ¿cómo lo implementamos?
El enfoque tradicional es escribir un programa completo, pero esta vez elegimos utilizar…Flujo de trabajoEsto se logra mediante el flujo de trabajo, que ofrece varias ventajas únicas:
Cada nodo es responsable de una función independiente: recopilación de datos, filtrado, evaluación de IA y ejecución. Cada nodo tiene sus propias responsabilidades, la lógica es clara y es fácil de depurar y modificar.
Todo el proceso operativo de la estrategia es claro a simple vista y cualquier problema en cualquier enlace se puede localizar rápidamente.
Para cambiar los criterios de filtrado u optimizar la lógica de la transacción, sólo es necesario modificar el nodo correspondiente; no es necesario tocar otras partes.
Los flujos de trabajo admiten de forma natural la llamada a modelos grandes, lo que hace que sea muy fácil para la IA participar en la toma de decisiones.
Para esta necesidadProcesamiento de múltiples fuentes de datos y múltiples pasosPara las estrategias de arbitraje, el flujo de trabajo es un método de implementación muy adecuado.
Esta estrategia se divide enDos líneas principales:


Cada una de las dos líneas tiene sus propias responsabilidades: la línea de ejecución gestiona la toma de decisiones y las transacciones, mientras que la línea de recopilación de datos se encarga de la recopilación y visualización de datos. Este diseño permite ejecutar la estrategia eficientemente, a la vez que permite la monitorización en tiempo real de su estado operativo.
La estrategia requiere la configuración de varios parámetros clave:
['binance', 'hyperliquid', 'lighter']['high', 'medium', 'low']Podemos configurar estos parámetros de forma flexible según nuestras propias necesidades.
El primer paso de la estrategia es obtener datos sobre oportunidades de arbitraje. Esto se logra accediendo a la API de VarFunding mediante una solicitud HTTP, pasando una lista preconfigurada de exchanges:
const url = `https://varfunding.xyz/api/funding?exchanges=${exchangeList.join(',')}`;
La plataforma proporciona datos de comisiones para todas las criptomonedas en diversas plataformas de intercambio, junto con las combinaciones de arbitraje óptimas calculadas. Sin embargo, debido a la gran cantidad de datos sin procesar, no se puede utilizar toda la información. La estrategia se filtrará, conservando solo las oportunidades con posiciones largas y cortas disponibles en las plataformas de intercambio que figuran en nuestra lista de configuración:
const filteredMarkets = data.data.markets.filter(market => {
const bestExchange = market.bestRate?.exchange;
const worstExchange = market.worstRate?.exchange;
return exchangeList.includes(bestExchange) && exchangeList.includes(worstExchange);
});
Los datos filtrados se extraerán en un formato conciso, conservando únicamente la información clave: par de negociación, posición larga, posición corta, diferencial de comisiones, rentabilidad anualizada estimada y nivel de confianza. Estos datos se guardarán para el posterior análisis de oportunidades de arbitraje.
Tener un solo punto de datos de tarifas es insuficiente, ya que estas pueden fluctuar temporalmente. Por lo tanto, la estrategia recopila continuamente instantáneas de datos, guardando los datos de tarifas actuales cada minuto y conservando únicamente los datos históricos de las últimas N horas.
Después de acumular una muestra suficiente, la estrategia realizará un análisis estadístico para calcular la frecuencia de cada moneda en diferentes niveles de confianza:
const stats = {};
for (const snapshot of savedData) {
for (const [baseAsset, info] of Object.entries(snapshot.data)) {
if (!stats[baseAsset]) {
stats[baseAsset] = { high: 0, medium: 0, low: 0, total: 0 };
}
stats[baseAsset].total++;
if (info.confidence === 'high') stats[baseAsset].high++;
// ... 统计其他置信度
}
}
Luego, las monedas se clasifican según los niveles de confianza más frecuentes y se calcula una puntuación ponderada:
score = (high出现次数 × 3 + medium出现次数 × 2 + low出现次数) / 总次数
Esta calificación refleja la estabilidad de las oportunidades de arbitraje. Cuanto más alta sea la calificación, más consistente ha sido el rendimiento de la oportunidad en los datos históricos y más confiable es.
Tras el análisis de comisiones, la estrategia comprobará las posiciones existentes utilizando la lista de oportunidades de arbitraje más reciente. La lógica principal de la detección de cierre de posiciones consiste en iterar en todas las plataformas de intercambio para determinar el estado actual de la posición:
function scanAllPositions() {
const allPositions = {};
for (const [exName, exIndex] of Object.entries(EXCHANGE_MAP)) {
const positions = exchanges[exIndex].GetPositions();
for (const pos of positions) {
const baseAsset = pos.Symbol.match(/^([A-Z0-9]+)_/)[1];
const isLong = pos.Amount > 0;
// 记录多空仓位信息
}
}
return allPositions;
}
Luego, determine qué posiciones deben cerrarse. Hay dos escenarios:
El primer tipoLas oportunidades de arbitraje han desaparecido. Si la divisa correspondiente a una posición en particular ya no figura en la lista de oportunidades de arbitraje más reciente, significa que el diferencial de comisiones se ha reducido y debería cerrar su posición para asegurar ganancias.
El segundo tipoLa dirección ha cambiado. Por ejemplo, si antes tenía una posición larga en el punto A y corta en el punto B, pero ahora las posiciones se han invertido, primero debe cerrar las posiciones anteriores.
Al cerrar una posición se cerrarán simultáneamente ambas posiciones:
// 平多仓
exchanges[longExIndex].CreateOrder(symbol, "closebuy", -1, amount);
// 平空仓
exchanges[shortExIndex].CreateOrder(symbol, "closesell", -1, amount);
Y limpie los registros de tenencia para garantizar que las posiciones vencidas se gestionen antes de buscar nuevas oportunidades.
Tras la verificación del cierre de la posición, la estrategia realizará operaciones en vivo para verificar las oportunidades de arbitraje seleccionadas. La verificación incluye dos aspectos:
Calcule la diferencia de precio histórica obteniendo datos de gráficos de velas de ambos intercambios:
// 获取240根K线
const recordsLong = EX_Long.GetRecords(symbol, PERIOD_M1, 240);
const recordsShort = EX_Short.GetRecords(symbol, PERIOD_M1, 240);
// 计算价差
const spreads = [];
for (const time of commonTimes) {
const midPrice = (priceMapLong[time] + priceMapShort[time]) / 2;
const spread = (priceMapLong[time] - priceMapShort[time]) / midPrice;
spreads.push(spread);
}
// 统计指标
const avgSpread = 平均值(spreads);
const range = 最大值(spreads) - 最小值(spreads);
const stdDev = 标准差(spreads);
Estos indicadores reflejan la consistencia de las fluctuaciones de precios entre ambas bolsas. Las fluctuaciones pronunciadas en los precios indican un mayor riesgo.
Obtenga datos del mercado en tiempo real y calcule los costos de transacción:
const tickerLong = EX_Long.GetTicker(symbol);
const tickerShort = EX_Short.GetTicker(symbol);
// 买卖价差(反映深度)
const longSpread = (tickerLong.Sell - tickerLong.Buy) / tickerLong.Last;
const shortSpread = (tickerShort.Sell - tickerShort.Buy) / tickerShort.Last;
// 开仓成本(在Long所买入,Short所卖出)
const openCost = (tickerLong.Sell - tickerShort.Buy) / midPrice;
// 平仓成本(在Short所买入,Long所卖出)
const closeCost = (tickerShort.Sell - tickerLong.Buy) / midPrice;
// 往返总成本
const roundTripCost = openCost + closeCost;
Si el costo de abrir y cerrar posiciones es demasiado alto, erosionará los ingresos por comisiones y no vale la pena aprovechar esas oportunidades.
Después de la verificación, si no hay oportunidades de arbitraje disponibles en los datos (dataSi el objeto está vacío, el proceso finaliza directamente. Si surge una nueva oportunidad de entrada, comienza la fase de evaluación de IA.
Las posibilidades de verificación exitosa se asignarán a la IA para una evaluación exhaustiva. Utilizamos un mensaje cuidadosamente diseñado para que la IA piense como un analista de arbitraje profesional.
La IA analizará varias dimensiones:
Si los ingresos por comisiones pueden cubrir el riesgo de fluctuaciones en el diferencial de precios. La lógica fundamental del juicio es:
如果 rateSpread(每8小时收益)> range × 0.3
说明即使价差波动到极端情况,1-2个结算周期就能覆盖风险
Si el diferencial de precios promedio es negativo y la posición larga está en un intercambio con un precio más bajo, entonces abrir una posición le permite comprar a un precio más barato, lo que es una condición favorable para abrir una posición.
¿Son suficientes los volúmenes de negociación en ambas bolsas y es razonable el diferencial entre oferta y demanda? Si el volumen de negociación de 24 horas de cualquiera de las bolsas es inferior a 100.000 $, o si el diferencial entre oferta y demanda supera el 0,3 %, la liquidez podría ser insuficiente.
¿Puede el costo de apertura y cierre de posiciones cubrirse con los ingresos por comisiones dentro de un plazo de tiempo razonable?
如果 roundTripCost < rateSpread × 2
意味着 2 个结算周期(16小时)就能覆盖交易成本
La IA calificará cada oportunidad (de 0 a 100 puntos) y determinará su nivel de riesgo (bajo/medio/alto). Solo se ejecutarán las oportunidades que cumplan con la puntuación. Simultáneamente, la IA sugerirá un importe de entrada adecuado según el nivel de riesgo.
La salida de la IA es una matriz JSON, donde cada elemento contiene: si se recomienda abrir una posición, calificación, monto recomendado, nivel de riesgo y motivo de la decisión.
Una vez superada la evaluación de IA, la estrategia ejecutará la posición inicial. El proceso de ejecución es muy riguroso:
Calcula cuántos contratos deben abrirse en función del importe de apertura sugerido y el precio actual:
const currentPrice = getCurrentPrice(ex, symbol);
const contractAmount = amountUSD / currentPrice / ctVal;
en ctValEs el valor nominal del contrato, que puede variar entre diferentes bolsas.
Intente establecer un apalancamiento objetivo (predeterminado 10x) y, si no es compatible, redúzcalo paso a paso:
const leveragesToTry = [10, 5, 3, 2, 1];
for (let lev of leveragesToTry) {
const result = ex.SetMarginLevel(symbol, lev);
if (result === true) {
return lev; // 设置成功
}
}
Después de realizar un pedido, éste no se considera realizado de inmediato; deberá esperar la confirmación del pedido.
const orderId = ex.CreateOrder(symbol, 'buy', -1, contractAmount);
// 循环检查订单状态
for (let i = 0; i < 20; i++) {
const order = ex.GetOrder(orderId);
if (order.Status === ORDER_STATE_CLOSED) {
// 完全成交
break;
}
Sleep(500);
}
Incluso si la orden aparece como ejecutada, aún es necesario verificar nuevamente las tenencias reales:
const position = getPosition(ex, symbol);
if (!position || Math.abs(position.Amount) === 0) {
// 订单成交但无持仓,开仓失败
return { success: false };
}
Si solo se abre con éxito una dirección de la posición (por ejemplo, se abre con éxito una posición larga, pero falla una posición corta), la estrategia cerrará automáticamente las posiciones abiertas:
if (!results.short.success && results.long.success) {
// 尝试平掉多仓
const pos = getPosition(longEx, longSymbol);
executeClose(longEx, longSymbol, true, pos.Amount, longExchange);
}
Esto evita la exposición unilateral y garantiza la naturaleza de cobertura del arbitraje.
Una vez abierta con éxito una posición, la estrategia guardará la información de la posición de arbitraje, incluida la hora de apertura, el precio y la cantidad, para su uso en verificaciones de cierre posteriores.
Durante la ejecución de la estrategia, toda la información se muestra en tiempo real en el panel de monitoreo, dividido en cinco tablas: Descripción general de la cuenta muestra el saldo, el monto congelado, el capital total y el resumen total de ganancias y pérdidas para cada intercambio; Señales de arbitraje presenta las oportunidades de arbitraje detectadas actualmente, el estado de ejecución y las razones del fracaso; Detalles de decisión de posición de apertura registran la puntuación de IA, el nivel de riesgo y la base de juicio para cada oportunidad; Posiciones de arbitraje en tiempo real muestran la cartera de arbitraje actualmente en pie, las ganancias y pérdidas largas/cortas y la duración de la tenencia; Las Estadísticas de ganancias de arbitraje resumen las ganancias y los retornos de arbitraje de hoy, esta semana, este mes y acumulativamente.

Estos paneles le permiten monitorear el estado de la estrategia en tiempo real, incluida la salud de la cuenta, las oportunidades actuales y toda la información clave, como las ganancias y pérdidas de la cartera.
Por último, hablemos de los riesgos y precauciones:
Si bien el arbitraje de la tasa de financiación es una estrategia de cobertura, conlleva riesgos. La diferencia de precio entre dos bolsas puede fluctuar, y si esta fluctuación supera las ganancias de la tasa de financiación, se producirán pérdidas. Por ello, la estrategia debe verificar la estabilidad de la diferencia de precio.
Si una bolsa no cuenta con suficiente liquidez, el deslizamiento al abrir y cerrar posiciones puede ser significativo. Por ejemplo, si la profundidad del libro de órdenes es insuficiente, su orden de mercado podría ejecutarse a un precio muy bajo, lo que resultaría en un costo real de apertura mucho mayor de lo esperado.
En particular, algunos DEX nuevos podrían presentar problemas con vulnerabilidades contractuales o escasez de liquidez. Se han dado casos de usuarios que han perdido fondos debido a vulnerabilidades de contratos inteligentes en DEX.
Esta estrategia requiere que los fondos se mantengan en varias plataformas. Por ejemplo, si se realiza arbitraje en tres plataformas, los fondos se distribuirán entre tres lugares, lo que resulta en una utilización de capital relativamente baja.
Te sugiero que pruebes primero con una pequeña cantidad de dinero.Tras familiarizarse con la lógica operativa de la estrategia, aumente gradualmente su inversión. Puede empezar arbitrando entre dos plataformas de intercambio tradicionales para adquirir experiencia antes de expandirse a más plataformas.
Hoy presentamos esta estrategia de arbitraje de tasas de financiación basada en la plataforma VarFunding. Implementa un proceso completo, desde la recopilación de datos, la verificación de estabilidad, la evaluación con IA hasta la ejecución automatizada, y ofrece un seguimiento visual claro.
La idea central de la estrategia es:
Por supuesto, este es solo un marco básico y todavía hay mucho espacio para la optimización:
El código completo se ha hecho público en la Plataforma de Cuantificación de Inventores.Estrategia de arbitraje de la tasa de financiación del flujo de trabajoInvitamos a todos a usarlo y mejorarlo.