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