3
konzentrieren Sie sich auf
1444
Anhänger

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

Erstellt in: 2024-12-18 11:16:41, aktualisiert am: 2024-12-19 15:42:52
comments   0
hits   1677

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

Einführung in die „Brick Moving“-Arbitrage

Im ersten Artikel haben wir kurz erläutert, wie Arbitrage mithilfe des Lead-Lag-Phänomens funktioniert. In diesem Artikel geht es hauptsächlich um die börsenübergreifende „Brick Moving“-Arbitrage. Das Grundprinzip besteht darin, das Preisverzögerungsphänomen (Lead-Lag-Effekt) zwischen verschiedenen Börsen auszunutzen. Da die Marktliquidität, die Transaktionsgeschwindigkeit und die Netzwerkverzögerung jeder Börse unterschiedlich sind, ist der Preis derselben Währung an verschiedenen Börsen oft unterschiedlich. synchron . Arbitrageure können solche verzögerten Preisänderungen überwachen und schnell Arbitragegeschäfte durchführen, um risikofreie Gewinne zu erzielen.

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

1. Preisunterschiede überwachen

Erstens müssen Arbitrageure die Preisunterschiede zwischen verschiedenen Börsen in Echtzeit überwachen, insbesondere den Briefkurs und den Geldkurs. Durch die Verfolgung des Briefkurses der Börse A und des Gebotskurses der Börse B kann davon ausgegangen werden, dass eine Arbitragemöglichkeit besteht, wenn der Briefkurs der Börse A niedriger ist als der Gebotskurs der Börse B. Beispielsweise beträgt der Briefkurs der Börse A 10.000 USDT und der Gebotskurs der Börse B 10.100 USDT. Der Preisunterschied beträgt 100 USDT, was eine potenzielle Arbitragemöglichkeit darstellt. Natürlich müssen wir auch den jüngsten historischen Preisunterschiedsbereich als Referenz für die Eröffnungs- und Schlusspreisunterschiede berücksichtigen, und die Wartezeit ist auch einer der Kosten.

2. Börsenübergreifende Ausführung

Sobald sich eine Arbitragemöglichkeit ergibt, sollte der Arbitrageur den Vermögenswert an einer Börse mit einem niedrigeren Briefkurs (z. B. Börse A) kaufen und ihn an einer Börse mit einem höheren Gebotskurs (z. B. Börse B) verkaufen. Dies kann über die API automatisiert werden, wodurch eine schnelle Ausführung gewährleistet und die Nutzung von Preisunterschieden maximiert wird. Allerdings müssen bei der Ausführung von Trades Transaktionskosten (wie Gebühren und Slippage) sowie Preisschocks berücksichtigt werden. Angenommen, die Transaktionsgebühr der Börse A beträgt 0,1 %, während die Transaktionsgebühr der Börse B 0,2 % beträgt und es zu Slippage auf dem Markt kommt. Wenn Sie beispielsweise 1 Bitcoin an der Börse A kaufen, kann sich der tatsächliche Transaktionspreis aufgrund der Ausführung großer Aufträge erhöhen, vorausgesetzt, dass die Slippage 0,1 % beträgt. Der tatsächliche Transaktionspreis ist dann um 0,1 % höher als erwartet, was zu einer Erhöhung der Anschaffungskosten führt.

Wenn Slippage und Gebühren berücksichtigt werden, weichen die tatsächlichen Kaufkosten und Verkaufserlöse von den Erwartungen ab.

3. Eine Position schließen

Der letzte Schritt beim Arbitragegeschäft besteht darin, die Position zu schließen. Wenn beispielsweise nach einer gewissen Zeit der Kaufpreis der Börse A 10.100 USDT und der Verkaufspreis der Börse B 10.150 USDT beträgt und sich der Preisunterschied von 100 USDT auf 50 USDT verringert, schließt das Programm die Position automatisch und Gewinn realisieren. Natürlich kann sich der Spread in manchen Fällen weiter vergrößern und Sie können weiterhin Positionen eröffnen, bis Ihre Mittel aufgebraucht sind. Arbitrageure tragen in weiten Teilen dazu bei, dass die Preisunterschiede an der Börse nicht aufrechterhalten werden können.

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 werden die Preisunterschiede zwischen verschiedenen Börsen nicht sehr groß sein, da sie sich sonst schnell ausgleichen würden. Dies ist das größte Problem beim Carry-Trading.

Lösung:

  • Warten Sie, bis sich eine natürliche Preisdivergenz bildet:Der Markt für digitale Währungen ist sehr volatil und es kommt normalerweise zu kurzfristigen Preisunterschieden. Geduld ist der beste Weg, dieses Problem zu lösen.
  • Die Maker-Strategie nutzen: Platzieren Sie aktiv Kauf- und Verkaufsaufträge in einem Börsenorderbuch und stornieren und passen Sie Aufträge kontinuierlich an, wenn sich die Preise ändern. Wenn eine Partei die Transaktion abschließt, nimmt die andere Partei den Auftrag an. Auf diese Weise ist die Transaktionsgebühr niedriger, ein kleinerer Spread kann akzeptiert werden und es kann garantiert werden, dass die Transaktion beim ersten Mal abgeschlossen wird.
  • Mehr Handelspaare überwachen:Man kann sich nicht nur auf die Mainstream-Währungen konzentrieren. Ihre Arbitragemöglichkeiten werden normalerweise von einer großen Anzahl von Arbitrageuren genutzt, wodurch die Preisunterschiede kleiner werden. Bei unbeliebten und neu an der Börse notierten Währungen kann es aufgrund mangelnder Liquidität und geringerer Konkurrenz zu großen Preisunterschieden kommen und es handelt sich um Arbitragemöglichkeiten, die einer Beachtung wert sind.
  • Wählen Sie eine kleine Börse:Kleine Börsen weisen im Allgemeinen eine geringe Liquidität und langsamere Preisanpassungen auf, wodurch sie anfälliger für größere Preisunterschiede sind. Zu diesem Zeitpunkt können Arbitrageure Aufträge erteilen und diese zuerst ausführen, um Gewinne zu erzielen.
  • Wählen Sie eine Börse mit hohem Schwellenwert:Einige Börsen verlangen eine strenge KYC-Zertifizierung, wie beispielsweise die koreanische Börse Upbit. An diesen Orten gibt es mehr Arbitragemöglichkeiten, die für normale Händler schwer zugänglich sind. Natürlich müssen Sie Wege finden, diese Schwierigkeiten selbst zu überwinden.

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

Das Versäumnis, Aufträge zu erhalten, ist ein häufiges Problem. Wenn das Programm den Preisunterschied feststellt und einen Arbitrageauftrag erteilt, ist der tatsächliche Preisunterschied bei der Transaktion nicht so groß und führt häufig zu einem Verlust. Zu diesem Zeitpunkt sind schnellste Reaktions- und Ausführungsgeschwindigkeit von entscheidender Bedeutung.

Lösung:

  • Optimieren Sie Netzwerk- und Serverstandorte: Wählen Sie einen Knoten, der sich in der Nähe des Exchange-Servers befindet, um die Latenz zu reduzieren. Wenn Sie sich beispielsweise für eine kleine Börse mit geringer Liquidität entscheiden, kann dies die Reaktionsgeschwindigkeit des Marktes verringern und dazu führen, dass dieser die Initiative ergreift.
  • Asynchrone Verarbeitung und WebSocket:Durch die Verwendung von asynchronem Code und WebSocket zur Verbindung mit den Marktbedingungen können Sie Preisinformationen in Echtzeit erhalten und schnell reagieren, um zu vermeiden, dass Sie aufgrund von Informationsverzögerungen Gelegenheiten verpassen.

3. Ein-Leg-Deal

Bei einer Single-Leg-Transaktion handelt es sich um eine Transaktion, bei der eine Partei die Transaktion abschließt, die andere Partei sie jedoch nicht abschließt. Dies kommt normalerweise bei starken Marktschwankungen vor. Wenn nur eine Seite der Order erfolgreich ist, besteht für den Arbitrageur ein Exposure-Risiko.

Lösung:

  • Richten Sie einen angemessenen Stop-Loss-Mechanismus ein: Bei einer Single-Leg-Transaktion können Sie einen Stop-Loss festlegen. Das rechtzeitige Schließen von Positionen ist eine effektive Möglichkeit, Risiken zu reduzieren.
  • Marktorder verwenden: Der Marktpreis kann die Transaktion garantieren, das Problem besteht jedoch darin, dass die Preisunterschiede bei der Transaktion unkontrollierbar sind und zu Verlusten führen können.

4. Volles Lager an einer einzigen Börse

Wenn der Preisunterschied über einen längeren Zeitraum besteht, werden die Mittel einer bestimmten Börse schnell aufgekauft, und Arbitrageure können ihre Arbitragegeschäfte möglicherweise nicht fortsetzen. Zu diesem Zeitpunkt müssen Arbitrageure schnell Gelder transferieren oder ihre Positionen anpassen.

Lösung:

  • Münztransfervorgang: Verwenden Sie börsenübergreifende Währungstransfers, um Geld zu überweisen und Arbitrage fortzusetzen. Auf diese Weise kann eine Anhäufung von Mitteln in einem einzigen Markt vermieden und die Liquidität der Mittel erhöht werden.
  • Warten auf eine Wende des Spreads: Angesichts des Zeitaufwands für die Auszahlung ist es auch eine Option, zu warten, bis die Preisdifferenz ausgeglichen ist.

Demo-Code

Der Code ist kein echter Code und dient nur zu Demonstrationszwecken. Er berücksichtigt keine Aspekte wie die Anzahl der Märkte, API-Zugriffsfehler, asynchrone Auftragsbeschleunigung usw.


// symbol 是套利的交易对,比如 BTC/USDT
let symbol = "BTC_USDT";
exchanges[0].SetCurrency(symbol);
exchanges[0].SetPrecision(2, 4); //设置精度
exchanges[1].SetCurrency(symbol);
exchanges[1].SetPrecision(2, 4);

// 设置手续费、滑点、开仓和平仓的利润率
let fee = 0.1 / 100;      // 0.1% 手续费
let slippage = 0.1 / 100; // 0.1% 滑点
let entryThreshold = 0.005; // 开仓阈值:价差大于0.5%时开仓
let exitThreshold = 0.001;  // 平仓阈值:价差回归到0.1%时平仓

// 每次循环执行的具体操作
function OnTick() {
    // 获取各个交易所的行情数据
    let tickers = exchanges.map(exchange => exchange.GetTicker(symbol));
    //容错处理
    if(!tickers[1] || !tickers[0]){
        return;
    }
    // 计算套利机会(基于利润率)
    // profitAB: 从交易所0买入,从交易所1卖出
    const profitAB = (tickers[1].Buy - tickers[0].Sell) / tickers[0].Sell - fee * 2 - slippage * 2;
    // profitBA: 从交易所1买入,从交易所0卖出
    const profitBA = (tickers[0].Buy - tickers[1].Sell) / tickers[1].Sell - fee * 2 - slippage * 2;

    // 打印日志
    Log(`Tickers: Exchange0 Buy: ${tickers[0].Sell}, Exchange1 Sell: ${tickers[1].Buy}, Profit AB: ${profitAB} USDT`);
    Log(`Tickers: Exchange1 Buy: ${tickers[1].Sell}, Exchange0 Sell: ${tickers[0].Buy}, Profit BA: ${profitBA} USDT`);

    // 根据利润判断是否执行套利操作
    if (profitAB > entryThreshold) {  // 当利润大于开仓阈值时开仓
        Log(`套利机会:从交易所0买入BTC,从交易所1卖出,利润:${profitAB} USDT`);
        executeArbitrage(0, 1, tickers[0].Sell, tickers[1].Buy, profitAB);  // 从交易所0买入并在交易所1卖出
    } else if (profitBA > entryThreshold) {
        Log(`套利机会:从交易所1买入BTC,从交易所0卖出,利润:${profitBA} USDT`);
        executeArbitrage(1, 0, tickers[1].Sell, tickers[0].Buy, profitBA);  // 从交易所1买入并在交易所0卖出
    } else if (profitAB < exitThreshold) {  // 如果价差回归,平仓
        Log(`平仓:从交易所0买入并在交易所1卖出的套利机会,利润已回归至平仓阈值`);
        closeArbitrage(0, 1, tickers[0].Sell, tickers[1].Buy); // 执行平仓操作
    } else if (profitBA < exitThreshold) { 
        Log(`平仓:从交易所1买入并在交易所0卖出的套利机会,利润已回归至平仓阈值`);
        closeArbitrage(1, 0, tickers[1].Sell, tickers[0].Buy); // 执行平仓操作
    } else {
        Log("没有足够的利润进行套利或平仓");
    }
}

// 执行套利交易
function executeArbitrage(buyExchangeIndex, sellExchangeIndex, buyPrice, sellPrice) {
    let buyExchange = exchanges[buyExchangeIndex];
    let sellExchange = exchanges[sellExchangeIndex];

    // 获取账户余额(假设为BTC余额)
    let accountBuy = buyExchange.GetAccount();
    let accountSell = sellExchange.GetAccount();

    //容错处理
    if(!accountBuy || !accountSell){
        return;
    }
    let amountBTC = Math.min(accountBuy.Balance / buyPrice, accountSell.Amount);

    // 假设每次交易量为 0.1 BTC
    let amount = Math.min(amountBTC, 0.1);

    // 确保交易量充足
    if (amount <= 0) {
        Log("余额不足,无法进行套利");
        return;
    }

    // 在买入交易所下单买入
    Log(`在交易所${buyExchangeIndex} 下单买入 ${amount} BTC @ ${buyPrice}`);
    buyExchange.Buy(buyPrice * (1 + slippage), amount);

    // 在卖出交易所下单卖出
    Log(`在交易所${sellExchangeIndex} 下单卖出 ${amount} BTC @ ${sellPrice}`);
    sellExchange.Sell(sellPrice * (1 - slippage), amount);
}

// 平仓操作
function closeArbitrage(buyExchangeIndex, sellExchangeIndex, buyPrice, sellPrice) {
    let buyExchange = exchanges[buyExchangeIndex];
    let sellExchange = exchanges[sellExchangeIndex];

    // 获取账户余额(假设为BTC余额)
    let accountBuy = buyExchange.GetAccount();
    let accountSell = sellExchange.GetAccount();

    //容错处理
    if(!accountBuy || !accountSell){
        return;
    }

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

    // 在买入交易所吃单卖出
    Log(`在交易所${buyExchangeIndex} 平仓卖出 ${amount} BTC @ ${buyPrice}`);
    buyExchange.Sell(buyPrice * (1 - slippage), amount);

    // 在卖出交易所吃单买入
    Log(`在交易所${sellExchangeIndex} 平仓买入 ${amount} BTC @ ${sellPrice}`);
    sellExchange.Buy(sellPrice * (1 + slippage), amount);
}

// 主循环
function main() {
    while (true) {
        OnTick();
        Sleep(1000); // 每秒钟执行一次
    }
}

Zusammenfassen

Lead-Lag-Arbitrage ist eine börsenübergreifende Arbitragestrategie, die auf der Verzögerungsreaktion des Marktes basiert. Durch die genaue Analyse von Preisunterschieden auf dem Markt und die schnelle Ausführung von Transaktionen können Arbitrageure auf dem Kryptowährungsmarkt stabile Gewinne erzielen. Der Erfolg dieser Strategie hängt allerdings nicht nur von der Ausgestaltung der Strategie selbst ab, sondern erfordert auch eine gute Umsetzung und ein sensibles Gespür für das richtige Timing der Märkte. Angesichts des zunehmenden Wettbewerbs auf den Märkten müssen Arbitrageure ihre Strategien und Techniken kontinuierlich optimieren und ihre Geschwindigkeit und Reaktionsfähigkeit verbessern, um die anhaltende Wirksamkeit von Arbitragemöglichkeiten aufrechtzuerhalten.