3
fokus pada
1444
Pengikut

Pengantar Arbitrase Lead-Lag dalam Cryptocurrency (2)

Dibuat di: 2024-12-18 11:16:41, diperbarui pada: 2024-12-19 15:42:52
comments   0
hits   1677

Pengantar Arbitrase Lead-Lag dalam Cryptocurrency (2)

Pengantar Arbitrase “Pemindahan Batu Bata”

Pada artikel pertama, kami secara singkat memperkenalkan cara melakukan arbitrase menggunakan fenomena Lead-Lag. Artikel ini terutama akan memperkenalkan arbitrase lintas bursa “brick moving”. Prinsip dasarnya adalah menggunakan fenomena jeda harga (efek Lead-Lag) antara bursa yang berbeda. Karena likuiditas pasar, kecepatan transaksi, dan penundaan jaringan setiap bursa berbeda, harga mata uang yang sama di bursa yang berbeda sering kali berbeda. sinkron . Pelaku arbitrase dapat memantau perubahan harga yang tertinggal tersebut dan segera melakukan arbitrase untuk memperoleh keuntungan bebas risiko.

Bagaimana cara menggunakan efek Lead-Lag untuk arbitrase?

1. Pantau perbedaan harga

Pertama, pelaku arbitrase perlu memantau perbedaan harga antara bursa yang berbeda secara real time, terutama harga permintaan dan harga penawaran. Dengan melacak harga permintaan bursa A dan harga penawaran bursa B, jika harga permintaan bursa A lebih rendah daripada harga penawaran bursa B, dapat dianggap terdapat peluang arbitrase. Misalnya, harga permintaan bursa A adalah 10.000 USDT, dan harga penawaran bursa B adalah 10.100 USDT. Selisih harga adalah 100 USDT, yang merupakan peluang arbitrase potensial. Tentu saja, kita juga perlu mempertimbangkan rentang perbedaan harga historis terkini sebagai referensi untuk perbedaan harga pembukaan dan penutupan, dan waktu tunggu juga merupakan salah satu biayanya.

2. Eksekusi Lintas Bursa

Ketika peluang arbitrase ditemukan, pelaku arbitrase harus membeli aset di bursa dengan harga permintaan yang lebih rendah (seperti Bursa A) dan menjualnya di bursa dengan harga penawaran yang lebih tinggi (seperti Bursa B). Ini dapat diotomatisasi melalui API, memastikan eksekusi cepat dan memaksimalkan penggunaan perbedaan harga. Namun, saat mengeksekusi perdagangan, biaya transaksi (seperti biaya dan selisih harga) serta guncangan harga harus dipertimbangkan. Asumsikan biaya transaksi pertukaran A sebesar 0,1%, sedangkan biaya transaksi pertukaran B sebesar 0,2%, dan terjadi slippage di pasar. Misalnya, saat membeli 1 Bitcoin di Bursa A, harga transaksi aktual dapat meningkat karena eksekusi pesanan dalam jumlah besar, dengan asumsi slippage-nya adalah 0,1%. Maka, harga transaksi aktual akan menjadi 0,1% lebih tinggi daripada yang diharapkan, yang mengakibatkan kenaikan dalam biaya pembelian.

Jika selisih dan biaya diperhitungkan, biaya pembelian dan pendapatan penjualan aktual akan berbeda dari ekspektasi.

3. Tutup posisi

Langkah terakhir dalam arbitrase adalah menutup posisi. Misalnya, setelah jangka waktu tertentu, jika harga beli bursa A adalah 10.100 USDT dan harga jual bursa B adalah 10.150 USDT, dan perbedaan harga menyempit dari 100 USDT menjadi 50 USDT, program akan secara otomatis menutup posisi dan merealisasikan keuntungan. Tentu saja, dalam beberapa kasus, spread dapat terus melebar, dan Anda dapat terus membuka posisi hingga dana Anda habis. Pelaku arbitrase menyumbang sebagian besar alasan mengapa perbedaan harga di bursa tidak dapat dipertahankan.

Masalah dan solusi dalam praktik

1. Tidak ada kesempatan untuk membuka posisi

Karena adanya sejumlah besar pelaku arbitrase dan pembuat pasar, perbedaan harga antara bursa yang berbeda tidak akan jauh berbeda, jika tidak, akan segera diratakan. Inilah masalah terbesar yang dihadapi dalam perdagangan carry.

Larutan:

  • Tunggu divergensi harga terbentuk secara alami:Pasar mata uang digital sangat fluktuatif, dan biasanya terdapat perbedaan harga jangka pendek. Kesabaran adalah cara terbaik untuk menyelesaikan masalah ini.
  • Menggunakan strategi pembuat: Secara aktif menempatkan order beli dan jual pada buku order bursa, dan terus membatalkan dan menyesuaikan order saat harga berubah. Jika satu pihak menyelesaikan transaksi, pihak lain akan mengambil alih order tersebut. Dengan cara ini, biaya transaksi lebih rendah, spread lebih kecil dapat diterima, dan transaksi dijamin selesai pada saat pertama.
  • Pantau lebih banyak pasangan perdagangan:Anda tidak bisa hanya fokus pada mata uang utama. Peluang arbitrase mereka biasanya telah dimanfaatkan oleh sejumlah besar pelaku arbitrase, yang menyebabkan perbedaan harga menyempit. Mata uang yang tidak populer dan baru terdaftar mungkin memiliki selisih harga yang besar karena likuiditas yang buruk dan sedikitnya persaingan, dan merupakan peluang arbitrase yang patut diperhatikan.
  • Pilih pertukaran kecil:Bursa kecil biasanya memiliki likuiditas yang buruk dan penyesuaian harga yang lebih lambat, membuatnya lebih rentan terhadap perbedaan harga yang lebih besar. Pada saat ini, pelaku arbitrase dapat memilih untuk menempatkan pesanan dan mengeksekusinya terlebih dahulu untuk memperoleh keuntungan.
  • Pilih pertukaran ambang batas tinggi:Beberapa bursa memerlukan sertifikasi KYC yang ketat, seperti bursa Korea Upbit. Ada lebih banyak peluang arbitrase di tempat-tempat ini yang sulit dimasuki oleh pedagang biasa. Tentu saja, Anda perlu menemukan cara untuk mengatasi kesulitan itu sendiri.

2. Perbedaan antara spread transaksi dan spread pemantauan terlalu besar

Kegagalan dalam mengambil order merupakan masalah yang umum. Ketika program menemukan perbedaan harga dan menempatkan order arbitrase, perbedaan harga transaksi yang sebenarnya tidak terlalu besar dan sering kali mengakibatkan kerugian. Pada saat ini, respon tercepat dan kecepatan eksekusi sangat penting.

Larutan:

  • Mengoptimalkan lokasi jaringan dan server: Pilih node yang dekat dengan server pertukaran untuk mengurangi latensi. Misalnya, memilih bursa kecil dengan likuiditas yang buruk untuk beroperasi dapat mengurangi kecepatan reaksi pasar dan dengan demikian mengambil inisiatif.
  • Pemrosesan Asinkron dan WebSocket:Dengan menggunakan kode asinkron dan WebSocket untuk terhubung dengan kondisi pasar, Anda dapat menerima informasi harga secara real time dan merespons dengan cepat guna menghindari hilangnya peluang akibat keterlambatan informasi.

3. Kesepakatan satu kaki

Transaksi single-leg mengacu pada transaksi di mana satu pihak menyelesaikan transaksi sementara pihak lain gagal menyelesaikan transaksi, yang biasanya terjadi ketika pasar berfluktuasi cepat. Jika hanya satu sisi perintah yang berhasil, maka pelaku arbitrase akan menghadapi risiko eksposur.

Larutan:

  • Siapkan mekanisme stop loss yang wajar: Saat transaksi single-leg terjadi, Anda dapat menetapkan stop loss. Penutupan posisi yang tepat waktu merupakan cara yang efektif untuk mengurangi risiko.
  • Gunakan order pasar:Harga pasar dapat menjamin transaksi, tetapi masalahnya adalah perbedaan harga transaksi tidak dapat dikendalikan dan dapat mengakibatkan kerugian.

4. Gudang penuh di satu bursa

Apabila perbedaan harga berlangsung lama, dana di bursa tertentu akan cepat terbeli, dan pelaku arbitrase mungkin tidak dapat meneruskan operasi arbitrase mereka. Pada saat ini, pelaku arbitrase perlu segera mentransfer dana atau menyesuaikan posisi mereka.

Larutan:

  • Operasi transfer koin: Gunakan transfer mata uang lintas bursa untuk mentransfer dana dan melanjutkan arbitrase. Dengan cara ini, adalah mungkin untuk menghindari penumpukan dana di satu pasar dan meningkatkan likuiditas dana.
  • Menunggu spread berubah: Mengingat biaya waktu penarikan, menunggu perbedaan harga kembali juga merupakan pilihan.

Kode Demo

Kode tersebut bukan kode sebenarnya dan hanya untuk tujuan demonstrasi. Kode tersebut tidak memperhitungkan masalah seperti jumlah pasar, kegagalan akses API, percepatan pesanan asinkron, dll.


// 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); // 每秒钟执行一次
    }
}

Meringkaskan

Arbitrase Lead-Lag merupakan strategi arbitrase lintas bursa yang didasarkan pada reaksi kelambatan pasar. Dengan menganalisis perbedaan harga di pasar secara akurat dan mengeksekusi perdagangan dengan cepat, pelaku arbitrase mampu memperoleh laba stabil di pasar mata uang kripto. Namun, keberhasilan strategi ini tidak hanya bergantung pada desain strategi itu sendiri, tetapi juga memerlukan pelaksanaan yang baik dan pemahaman yang cermat terhadap waktu pasar. Karena persaingan pasar makin ketat, pelaku arbitrase perlu terus mengoptimalkan strategi serta teknik mereka dan meningkatkan kecepatan dan daya tanggap mereka untuk menjaga efektivitas peluang arbitrase agar tetap berkelanjutan.