Die Ressourcen sind geladen. Beförderung...

Einführung in Lead-Lag-Arbitrage in Kryptowährungen (2)

Schriftsteller:FMZ~Lydia, Erstellt: 2024-12-19 09:27:27, aktualisiert: 2024-12-19 11:33:45

img

Einführung in Brick Moving Arbitrage

In dem ersten Artikel haben wir kurz vorgestellt, wie man das Lead-Lag-Phänomen für die Arbitrage verwendet. In diesem Artikel werden wir hauptsächlich die Cross-Exchange Brick-Moving-Arbitrage vorstellen. Das Grundprinzip besteht darin, die Preisverzögerung zwischen verschiedenen Börsen zu nutzen (Lead-Lag-Effekt). Da die Marktliquidität, Transaktionsgeschwindigkeit und Netzwerkverzögerung jeder Börse unterschiedlich sind, sind die Preise der gleichen Währung an verschiedenen Börsen oft nicht synchron. Arbitrager können schnell arbitragieren, indem sie die Verzögerung der Preisänderung überwachen und so risikofreie Gewinne erzielen.

Wie kann der Lead-Lag-Effekt für das Arbitrage angewendet werden?

1. Preisunterschiede überwachen

Erstens müssen Arbitrager die Preisunterschiede zwischen verschiedenen Börsen in Echtzeit überwachen, insbesondere den Ask-Preis und den Bid-Preis. Durch die Verfolgung des Ask-Preises des A-Austauschs und des Bid-Preises des B-Austauschs kann davon ausgegangen werden, dass es eine Arbitragemöglichkeit gibt, wenn der Ask-Preis des A-Austauschs niedriger als der Bid-Preis des B-Austauschs ist. Zum Beispiel beträgt der Ask-Preis des A-Austauschs 10.000 USDT und der Bid-Preis des B-Austauschs 10.100 USDT, der Preisunterschied beträgt 100 USDT, dann besteht eine potenzielle Arbitragemöglichkeit. Natürlich sollte auch die jüngste historische Preisunterschiedsspanne als Referenz für die Öffnungs- und Schließpreisunterschiede berücksichtigt werden, und die Wartezeit ist auch eine der Kosten.

2. Cross-Exchange-Ausführung

Sobald eine Arbitrage-Möglichkeit gefunden wurde, sollte der Arbitrageur den Vermögenswert an einer Börse mit einem niedrigeren Ask-Preis (wie Exchange A) kaufen und an einer Börse mit einem höheren Bid-Preis (wie Exchange B) verkaufen. Dieser Vorgang kann über die API automatisiert werden, um eine schnelle Ausführung zu gewährleisten und den Preisunterschied zu maximieren. Bei der Ausführung eines Handels müssen jedoch Transaktionskosten (wie Gebühren und Rutsch) sowie Preisschocks berücksichtigt werden. Angenommen, die Gebühr der Börse A beträgt 0,1%, während die Gebühr der Börse B 0,2%, und es gibt einen Rutsch auf dem Markt. Zum Beispiel kann der tatsächliche Transaktionspreis durch die Ausführung von großen Aufträgen, vorausgesetzt der Rutsch beträgt 0,1%, steigen, wenn man 1 Bitcoin an Exchange A kauft. Dann wird der tatsächliche Transaktionspreis um 0,1% höher sein als erwartet, was zu einer Erhöhung der Kaufkosten führt.

Bei Berücksichtigung von Verschiebungen und Gebühren unterscheiden sich die tatsächlichen Kaufkosten und Verkaufserlöse von den Erwartungen.

3. Schließen Sie die Position

Der letzte Schritt der Arbitrage besteht darin, die Position zu schließen. Zum Beispiel beträgt der Kaufpreis des A-Austauschs nach einer bestimmten Zeit 10,100 USDT und der Verkaufspreis des B-Austauschs 10,150 USDT. Wenn sich die Preisdifferenz von 100 USDT auf 50 USDT verringert, schließt das Programm die Position automatisch und nimmt Gewinne. Natürlich kann sich die Preisdifferenz in einigen Fällen weiter verbreiten und Sie können weiterhin Positionen eröffnen, bis die Mittel erschöpft sind. Der Grund, warum die Preisdifferenz des Austauschs nicht aufrechterhalten werden kann, ist, dass Arbitrager den überwiegenden Teil der Macht beitragen.

Probleme und Lösungen in der Praxis

1. Keine Möglichkeit, eine Position zu eröffnen

Aufgrund der Existenz einer großen Anzahl von Arbitrageuren und Market Makern sind die Preisunterschiede zwischen den verschiedenen Börsen nicht sehr groß, sonst werden sie schnell ausgeglichen.

Lösungen: - Warten Sie, bis sich die Preisunterschiede selbstverständlich bilden.Der Kryptowährungsmarkt ist sehr volatil und kurzfristige Preisunterschiede treten normalerweise auf. Geduldiges Warten ist der beste Weg, um dieses Problem zu lösen.- Verwenden Sie die Maker-Strategie:Kaufen und verkaufen Sie Bestellungen in einem Exchange-Orderbuch aktiv und stornieren Sie Bestellungen und passen Sie sie an, wenn sich die Preise ändern. Wenn eine Partei die Transaktion abschließt, nimmt die andere Partei die Order an. Dies führt zu niedrigeren Transaktionsgebühren, einem kleineren Spread und sorgt für eine sofortige Transaktion.- Überwachen Sie mehr Handelspare:Konzentrieren Sie sich nicht nur auf die Mainstream-Währungen, da ihre Arbitragiemöglichkeiten in der Regel von einer großen Anzahl von Arbitrageuren erfasst wurden, was dazu führt, dass sich die Preisunterschiede verringern.- Wählen Sie kleine Börsen:Kleine Börsen haben in der Regel schlechte Liquidität und langsame Preisanpassungen, was es einfacher macht, dass große Preisunterschiede auftreten.- Wählen Sie Hochschwellenbörsen:Einige Börsen erfordern eine strenge KYC-Zertifizierung, wie die koreanische Börse Upbit. Diese Orte sind für gewöhnliche Händler schwierig zu betreten, und es gibt mehr Arbitragemöglichkeiten. Natürlich müssen Sie Wege finden, um die Schwierigkeiten zu überwinden.

2. Der Unterschied zwischen dem Transaktions- und dem Monitoring-Spread ist zu groß

Wenn das Programm die Preisdifferenz findet und einen Auftrag für die Arbitrage platziert, ist der tatsächliche Preisunterschied nicht so groß, und es gibt normalerweise einen Verlust.

Lösungen: - Optimieren Sie Netzwerk- und Serverstandort:Wählen Sie einen Knoten in der Nähe des Exchange-Servers, um die Latenzzeit zu reduzieren. Zum Beispiel kann die Wahl einer kleinen Börse mit geringer Liquidität die Reaktionsgeschwindigkeit des Marktes reduzieren und die Gelegenheit nutzen.- Asynchrone Verarbeitung und WebSocket:Die Verwendung von asynchronen Codes und WebSockets zur Verbindung zu Marktbedingungen kann Preisinformationen in Echtzeit empfangen und schnell reagieren, um verpasste Chancen aufgrund von Informationsverzögerungen zu vermeiden.

3. Einbahntransaktionen

Ein einseitiges Geschäft ist, wenn eine Seite des Auftrags abgeschlossen wird, aber die andere Seite den Auftrag nicht abschließt, was normalerweise in einem schnell schwankenden Markt geschieht.

Lösungen: - Ein angemessener Stop-Loss-Mechanismus:Wenn ein einseitiger Handel stattfindet, können Sie einen Stop-Loss festlegen.- Verwenden Sie den Marktpreis, um eine Bestellung zu platzieren:Der Marktpreis kann die Transaktion garantieren, aber das Problem besteht darin, dass die Differenz des Transaktionspreises unkontrollierbar ist und zu einem Verlust führen kann.

4. Vollständige Position auf einer einzigen Börse

Wenn die Preisunterschiede für eine lange Zeit bestehen, werden die Mittel einer bestimmten Börse schnell aufgekauft, und Arbitrager können möglicherweise nicht in der Lage sein, Arbitrageoperationen fortzusetzen.

Lösungen: - Währungsüberweisung:Sie können die Akkumulation von Geldern auf einem einzigen Markt vermeiden und die Liquidität von Geldern erhöhen.- Warten, bis sich die Preisunterschiede ändern.Angesichts der zeitlichen Kosten für den Rückzug ist auch das Warten auf die Rückkehr der Preisunterschiede eine Option.

Demo-Code

Der Code ist kein Live-Trading-Code und dient nur dem Demonstrationszweck.


// 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
    }
}

Zusammenfassung

Lead-Lag-Brick-Moving-Arbitrage ist eine Cross-Exchange-Arbitrage-Strategie, die auf der Marktverzögerungsreaktion basiert. Durch die genaue Analyse der Preisunterschiede auf dem Markt und die schnelle Ausführung von Transaktionen können Arbitrager stabile Gewinne auf dem Kryptowährungsmarkt erzielen. Der Erfolg der Strategie hängt jedoch nicht nur von der Gestaltung der Strategie selbst ab, sondern auch von einer guten Ausführung und einem sensiblen Verständnis des Markttemps. Mit zunehmendem Marktwettbewerb müssen Arbitrager Strategien und Techniken kontinuierlich optimieren, Geschwindigkeit und Reaktionsfähigkeit verbessern, um die anhaltende Wirksamkeit von Arbitragemöglichkeiten zu erhalten.


Mehr