En la carga de los recursos... Cargando...

Introducción al arbitraje de lead-lag en criptomonedas (2)

El autor:FMZ~Lydia, Creado: 2024-12-19 09:27:27, Actualizado: 2024-12-19 11:33:45

img

Introducción al movimiento de ladrillos

En el primer artículo, presentamos brevemente cómo usar el fenómeno del Lead-Lag para el arbitraje. En este artículo, presentaremos principalmente el arbitraje de intercambio cruzado. El principio básico es aprovechar el retraso de precios entre diferentes intercambios (efecto Lead-Lag). Debido a que la liquidez del mercado, la velocidad de transacción y el retraso de la red de cada intercambio son diferentes, los precios de la misma moneda en diferentes intercambios a menudo no están sincronizados. Los arbitrajes pueden arbitraje rápidamente monitoreando el cambio de precio rezagado, obteniendo así ganancias sin riesgo.

¿Cómo utilizar el efecto lead-lag para el arbitraje?

1. Seguimiento de las diferencias de precios

En primer lugar, los arbitrajes deben monitorear las diferencias de precios entre diferentes intercambios en tiempo real, especialmente el precio de compra y el precio de oferta. Al rastrear el precio de compra de A y el precio de oferta de B, si el precio de compra de A es menor que el precio de oferta de B, se puede considerar que existe una oportunidad de arbitraje. Por ejemplo, el precio de compra de A es de 10,000 USDT, y el precio de oferta de B es de 10,100 USDT, la diferencia de precio es de 100 USDT, entonces existe una oportunidad de arbitraje potencial. Por supuesto, el rango de diferencia de precio histórico reciente también debe tenerse en cuenta como referencia para la diferencia de precio de apertura y cierre, y el tiempo de espera también es uno de los costos.

2. Ejecución de intercambios cruzados

Una vez que se encuentra una oportunidad de arbitraje, el árbitro debe comprar el activo en un intercambio con un precio de compra más bajo (como Exchange A) y venderlo en un intercambio con un precio de oferta más alto (como Exchange B). Esta operación se puede automatizar a través de la API para garantizar una ejecución rápida y maximizar la diferencia de precio. Sin embargo, al ejecutar un comercio, los costos de transacción (como tarifas y deslizamiento) así como los choques de precios deben ser considerados. Supongamos que la tarifa de Exchange A es del 0,1%, mientras que la tarifa de Exchange B es del 0,2%, y hay un deslizamiento en el mercado. Por ejemplo, al comprar 1 Bitcoin en Exchange A, el precio real de la transacción puede aumentar debido a la ejecución de órdenes de deslizamiento, asumiendo que el gran deslizamiento es del 0,1%.

Si se tienen en cuenta el deslizamiento y las comisiones, el coste real de compra y los ingresos de venta serán diferentes de las expectativas.

Cerrar la posición

El último paso del arbitraje es cerrar la posición. Por ejemplo, después de un período de tiempo, el precio de compra del intercambio A es de 10,100 USDT, y el precio de venta del intercambio B es de 10,150 USDT. Cuando la diferencia de precio se reduce de 100 USDT a 50 USDT, el programa cerrará la posición automáticamente y obtendrá ganancias. Por supuesto, en algunos casos, la diferencia de precio puede seguir ampliándose, y puede continuar abriendo posiciones hasta que se agoten los fondos. La razón por la que la diferencia de precio del intercambio no se puede mantener es que los arbitrajes contribuyen con la gran mayoría del poder.

Problemas y soluciones en la práctica

No hay posibilidad de abrir una posición

Debido a la existencia de un gran número de árbitros y creadores de mercado, las diferencias de precios entre los diferentes intercambios no serán muy grandes, de lo contrario se nivelarán rápidamente.

Soluciones: - Espera a que las diferencias de precios se formen naturalmente:El mercado de criptomonedas es altamente volátil, y generalmente se producen diferencias de precios a corto plazo.- Usa la estrategia del creador:Comprar y vender órdenes en un libro de órdenes de intercambio activamente, y cancelar órdenes y ajustarlas a medida que los precios cambian. Si una de las partes completa la transacción, la otra parte tomará la orden. Esto resultará en menores tarifas de transacción, un menor margen de diferencia y garantizará una transacción inmediata.- Vigilar más pares comerciales:No se centren solo en las monedas convencionales, ya que sus oportunidades de arbitraje generalmente han sido capturadas por un gran número de arbitrajes, lo que hace que las diferencias de precios se reduzcan.- Elige los intercambios pequeños:Los intercambios pequeños suelen tener poca liquidez y ajustes de precios lentos, lo que facilita que ocurran grandes diferencias de precios.- Elige los intercambios de alto umbral:Algunos intercambios requieren una estricta certificación KYC, como el intercambio coreano Upbit. Estos lugares son difíciles de ingresar para los comerciantes comunes, y hay más oportunidades de arbitraje. Por supuesto, debe encontrar formas de superar las dificultades.

2. La diferencia entre el diferencial de transacción y el diferencial de seguimiento es demasiado grande

Cuando el programa encuentra la diferencia de precio y coloca una orden para el arbitraje, la diferencia de precio real no es tan grande, y generalmente hay una pérdida.

Soluciones: - Optimiza la red y la ubicación del servidor:Por ejemplo, elegir un intercambio pequeño con poca liquidez para operar puede reducir la velocidad de reacción del mercado y aprovechar la oportunidad.- Procesamiento asíncrono y WebSocket:El uso de código asíncrono y WebSocket para conectarse a las condiciones del mercado puede recibir información de precios en tiempo real y responder rápidamente para evitar oportunidades perdidas debido a retrasos de información.

3. Transacción en una sola dirección

Una transacción unidireccional es cuando un lado de la orden se completa, pero el otro lado no logra completar la transacción, lo que generalmente ocurre en un mercado que fluctúa rápidamente.

Soluciones: - Establezca un mecanismo razonable de stop-loss:Cuando se produce una transacción unidireccional, puede establecer un stop loss.- Utilice el precio de mercado para realizar una orden:El precio de mercado puede garantizar la transacción, pero el problema es que la diferencia en el precio de transacción es incontrolable y puede resultar en una pérdida.

4. Posición total en una sola bolsa

Cuando la diferencia de precio existe durante mucho tiempo, los fondos de un determinado intercambio se comprarán rápidamente, y los arbitrajes pueden no ser capaces de continuar con las operaciones de arbitraje.

Soluciones: - Operación de transferencia de divisas:Utilice la transferencia de divisas cruzada para transferir fondos y continuar el arbitraje.De esta manera, puede evitar la acumulación de fondos en un mercado único y aumentar la liquidez de los fondos.- Esperando a que la diferencia de precio cambie:Teniendo en cuenta el costo de tiempo de la retirada, esperar a que la diferencia de precio regrese también es una opción.

Código de demostración

El código no es código de negociación en vivo y es solo para fines de demostración.


// Symbol is the arbitrage trading pair, such as BTC/USDT
let symbol = "BTC_USDT";

// Set commissions, slippage, profit margins for opening and closing positions
let fee = 0.1 / 100;      // 0.1% Fee
let slippage = 0.1 / 100; // 0.1% slippage
let entryThreshold = 0.005; // Opening threshold: Opening a position when the price difference is greater than 0.5%
let exitThreshold = 0.001;  // Closing threshold: Closing when the price difference returns to 0.1%

// The specific operations performed in each loop
function OnTick() {
    // Get ticker data from various exchanges
    let tickers = exchanges.map(exchange => exchange.GetTicker(symbol));

    // Calculate arbitrage opportunities (based on profit margins)
    // profitAB: Buy from exchange 0, sell from exchange 1
    const profitAB = (tickers[1].bid - tickers[0].ask) / tickers[0].ask - fee * 2 - slippage * 2;
    // profitBA: Buy from exchange 1, sell from exchange 0
    const profitBA = (tickers[0].bid - tickers[1].ask) / tickers[1].ask - fee * 2 - slippage * 2;

    // Print log
    Log(`Tickers: Exchange0 Buy: ${tickers[0].ask}, Exchange1 Sell: ${tickers[1].bid}, Profit AB: ${profitAB} USDT`);
    Log(`Tickers: Exchange1 Buy: ${tickers[1].ask}, Exchange0 Sell: ${tickers[0].bid}, Profit BA: ${profitBA} USDT`);

    // Determine whether to perform arbitrage operations based on profits
    if (profitAB > entryThreshold) {  // Open a position when the profit is greater than the opening threshold
        Log(`Arbitrage opportunity: Buy BTC from exchange 0, sell from exchange 1, profit: ${profitAB} USDT`);
        executeArbitrage(0, 1, tickers[0].ask, tickers[1].bid, profitAB);  // Buy from exchange 0 and sell from exchange 1
    } else if (profitBA > entryThreshold) {
        Log(`Arbitrage opportunity: Buy BTC from exchange 1, sell from exchange 0, profit: ${profitBA} USDT`);
        executeArbitrage(1, 0, tickers[1].ask, tickers[0].bid, profitBA);  // Buy from exchange 1 and sell from exchange 0
    } else if (profitAB < exitThreshold) {  // If the spread reverts, close the position
        Log(`Close position: Arbitrage opportunity bought from exchange 0 and sold on exchange 1, profit has returned to the close threshold`);
        closeArbitrage(0, 1, tickers[0].ask, tickers[1].bid); // Execute the closing operation
    } else if (profitBA < exitThreshold) { 
        Log(`Close position: Arbitrage opportunity bought from exchange 1 and sold on exchange 0, profit has returned to the closing threshold`);
        closeArbitrage(1, 0, tickers[1].ask, tickers[0].bid); // Execute the closing operation
    } else {
        Log("Not enough profit to take profit or close the position");
    }
}

// Executing arbitrage trades
function executeArbitrage(buyExchangeIndex, sellExchangeIndex, buyPrice, sellPrice) {
    let buyExchange = exchanges[buyExchangeIndex];
    let sellExchange = exchanges[sellExchangeIndex];

    // Get account balance (assuming BTC balance)
    let accountBuy = buyExchange.GetAccount();
    let accountSell = sellExchange.GetAccount();
    
    let amountBTC = Math.min(accountBuy.Balance / buyPrice, accountSell.Amount);

    // Assume that the transaction volume is 0.1 BTC per transaction
    let amount = Math.min(amountBTC, 0.1);

    // Ensure sufficient trading volume
    if (amount <= 0) {
        Log("Insufficient balance to conduct arbitrage");
        return;
    }

    // Place a buy order on the buying exchange
    Log(`Place an order to buy ${amount} BTC @ ${buyPrice} on exchange ${buyExchangeIndex}`);
    buyExchange.Buy(symbol, buyPrice * (1 + slippage), amount);

    // Place a sell order on the selling exchange
    Log(`Place an order to sell ${amount} BTC @ ${sellPrice} on exchange ${sellExchangeIndex}`);
    sellExchange.Sell(symbol, sellPrice * (1 - slippage), amount);
}

// Closing position operation
function closeArbitrage(buyExchangeIndex, sellExchangeIndex, buyPrice, sellPrice) {
    let buyExchange = exchanges[buyExchangeIndex];
    let sellExchange = exchanges[sellExchangeIndex];

    // Get account balance (assuming BTC balance)
    let accountBuy = buyExchange.GetAccount();
    let accountSell = sellExchange.GetAccount();

    let amountBTC = Math.min(accountBuy.Balance / buyPrice, accountSell.Amount);
    let amount = Math.min(amountBTC, 0.1);

    // Place a sell order on the buying exchange
    Log(`Close and sell ${amount} BTC @ ${buyPrice} on exchange ${buyExchangeIndex}`);
    buyExchange.Sell(symbol, buyPrice * (1 - slippage), amount);

    // Place a buy order on the selling exchange
    Log(`Close buy ${amount} BTC @ ${sellPrice} on exchange ${sellExchangeIndex}`);
    sellExchange.Buy(symbol, sellPrice * (1 + slippage), amount);
}

// Main loop
function main() {
    while (true) {
        OnTick();
        Sleep(1000); // Execute once every second
    }
}

Resumen de las actividades

El arbitraje de movimiento de ladrillos es una estrategia de arbitraje cruzado basada en la reacción de retraso del mercado. Al analizar con precisión las diferencias de precios en el mercado y ejecutar transacciones rápidamente, los arbitrajes pueden obtener ganancias estables en el mercado de criptomonedas. Sin embargo, el éxito de la estrategia depende no solo del diseño de la estrategia en sí, sino también de una buena ejecución y una comprensión sensible del tiempo del mercado.


Más.