
پہلے مضمون میں، ہم نے مختصراً یہ بتایا کہ Lead-Lag رجحان کا استعمال کرتے ہوئے ثالثی کیسے کی جائے، یہ مضمون بنیادی طور پر کراس ایکسچینج “برک موونگ” کو متعارف کرائے گا۔ بنیادی اصول مختلف ایکسچینجز کے درمیان قیمت کے وقفے کے رجحان (لیڈ-لیگ اثر) کو استعمال کرنا ہے کیونکہ ہر ایکسچینج میں ایک ہی کرنسی کی قیمت مختلف ہوتی ہے۔ . ثالث قیمت میں اس طرح کی تاخیر سے ہونے والی تبدیلیوں کی نگرانی کر سکتے ہیں اور خطرے سے پاک منافع حاصل کرنے کے لیے تیزی سے ثالثی کر سکتے ہیں۔
سب سے پہلے، ثالثوں کو حقیقی وقت میں مختلف ایکسچینجز کے درمیان قیمت کے فرق کی نگرانی کرنے کی ضرورت ہے، خاص طور پر پوچھنے کی قیمت اور بولی کی قیمت۔ ایکسچینج A کی پوچھ قیمت اور ایکسچینج B کی بولی کی قیمت کا پتہ لگا کر، اگر ایکسچینج A کی پوچھ قیمت ایکسچینج B کی بولی کی قیمت سے کم ہے، تو یہ سمجھا جا سکتا ہے کہ ثالثی کا موقع موجود ہے۔ مثال کے طور پر، ایکسچینج A کی پوچھ قیمت 10,000 USDT ہے، اور ایکسچینج B کی بولی کی قیمت 10,100 USDT ہے، جو کہ ایک ممکنہ ثالثی کا موقع ہے۔ بلاشبہ، ہمیں قیمتوں کے افتتاحی اور اختتامی فرق کے حوالہ کے طور پر حالیہ تاریخی قیمت کے فرق پر بھی غور کرنے کی ضرورت ہے، اور انتظار کا وقت بھی اخراجات میں سے ایک ہے۔
ایک بار جب ثالثی کا موقع مل جاتا ہے، ثالث کو چاہیے کہ وہ اثاثہ ایکسچینج پر کم پوچھ قیمت (جیسے ایکسچینج A) کے ساتھ خریدے اور اسے زیادہ بولی کی قیمت کے ساتھ ایکسچینج پر فروخت کرے (جیسے کہ ایکسچینج B)۔ اسے API کے ذریعے خودکار کیا جا سکتا ہے، تیزی سے عملدرآمد کو یقینی بنا کر اور قیمت کے فرق کو زیادہ سے زیادہ استعمال کیا جا سکتا ہے۔ تاہم، تجارت کو انجام دیتے وقت، لین دین کے اخراجات (جیسے فیس اور پھسلن) کے ساتھ ساتھ قیمت کے جھٹکے پر بھی غور کیا جانا چاہیے۔ فرض کریں کہ ایکسچینج A کی ٹرانزیکشن فیس 0.1% ہے، جبکہ ایکسچینج B کی ٹرانزیکشن فیس 0.2% ہے، اور مارکیٹ میں پھسلن ہے۔ مثال کے طور پر، ایکسچینج A پر 1 بٹ کوائن خریدتے وقت، لین دین کی اصل قیمت بڑے آرڈرز کے نفاذ کی وجہ سے بڑھ سکتی ہے، یہ فرض کرتے ہوئے کہ پھسلن 0.1% ہے۔ پھر، لین دین کی اصل قیمت متوقع سے 0.1% زیادہ ہوگی، جس کے نتیجے میں خریداری کی لاگت میں اضافہ ہوگا۔
اگر پھسلن اور فیسوں کو مدنظر رکھا جائے تو اصل خرید لاگت اور فروخت کی آمدنی توقعات سے مختلف ہوگی۔
ثالثی کا آخری مرحلہ پوزیشن کو بند کرنا ہے۔ مثال کے طور پر، ایک مدت کے بعد، اگر ایکسچینج A کی قیمت خرید 10,100 USDT اور ایکسچینج B کی فروخت کی قیمت 10,150 USDT ہے، اور قیمت کا فرق 100 USDT سے 50 USDT تک کم ہو جاتا ہے، تو پروگرام خود بخود پوزیشن کو بند کر دے گا اور منافع کا احساس. بلاشبہ، بعض صورتوں میں، پھیلاؤ بڑھتا جا سکتا ہے، اور آپ اس وقت تک پوزیشنیں کھولنا جاری رکھ سکتے ہیں جب تک کہ آپ کے فنڈز ختم نہیں ہو جاتے۔ ثالثی اس وجہ سے زیادہ تر حصہ ڈالتے ہیں کہ ایکسچینج پر قیمت کے فرق کو برقرار نہیں رکھا جا سکتا۔
ثالثوں اور مارکیٹ سازوں کی ایک بڑی تعداد کی موجودگی کی وجہ سے، مختلف ایکسچینجز کے درمیان قیمتوں میں فرق بہت زیادہ مختلف نہیں ہوگا، بصورت دیگر وہ تیزی سے برابر ہوجائیں گے۔ یہ کیری ٹریڈنگ کا سب سے بڑا مسئلہ ہے۔
آرڈرز حاصل کرنے میں ناکامی ایک عام مسئلہ ہے جب پروگرام قیمت میں فرق تلاش کرتا ہے اور ثالثی آرڈر دیتا ہے، اصل لین دین کی قیمت کا فرق اتنا بڑا نہیں ہوتا ہے اور اکثر نقصان ہوتا ہے۔ اس وقت، تیز ترین ردعمل اور عملدرآمد کی رفتار بہت اہم ہے۔
سنگل ٹانگ ٹرانزیکشن سے مراد وہ لین دین ہے جس میں ایک فریق لین دین مکمل کرتا ہے جبکہ دوسرا فریق لین دین کو مکمل کرنے میں ناکام رہتا ہے، جو عام طور پر اس وقت ہوتا ہے جب مارکیٹ میں تیزی سے اتار چڑھاؤ آتا ہے۔ اگر حکم کا صرف ایک رخ کامیاب ہوتا ہے، تو ثالث کو نمائش کے خطرے کا سامنا کرنا پڑے گا۔
جب قیمت کا فرق طویل عرصے تک موجود رہتا ہے، تو ایک مخصوص ایکسچینج کے فنڈز جلد خرید لیے جائیں گے، اور اربیٹریج اپنی ثالثی کارروائیوں کو جاری رکھنے کے قابل نہیں ہو سکتے ہیں۔ اس وقت، ثالثوں کو فوری طور پر فنڈز کی منتقلی یا اپنی پوزیشن کو ایڈجسٹ کرنے کی ضرورت ہے۔
کوڈ حقیقی کوڈ نہیں ہے اور صرف نمائشی مقاصد کے لیے ہے اس میں مارکیٹوں کی تعداد، API تک رسائی میں ناکامی، غیر مطابقت پذیر آرڈر کی رفتار وغیرہ کو مدنظر نہیں رکھا گیا ہے۔
// 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); // 每秒钟执行一次
}
}
Lead-Lag Arbitrage ایک کراس ایکسچینج ثالثی حکمت عملی ہے جس کی بنیاد مارکیٹ کے وقفے کے رد عمل پر ہے۔ مارکیٹ میں قیمت کے فرق کا درست تجزیہ کرکے اور تجارت کو تیزی سے انجام دینے سے، اربابِ اختیار کرپٹو کرنسی مارکیٹ میں مستحکم منافع کمانے کے قابل ہوتے ہیں۔ تاہم، اس حکمت عملی کی کامیابی کا انحصار نہ صرف خود حکمت عملی کے ڈیزائن پر ہے، بلکہ اس کے لیے اچھی کارکردگی اور مارکیٹ کے وقت کی حساس گرفت کی بھی ضرورت ہے۔ جیسے جیسے مارکیٹ میں مسابقت بڑھ رہی ہے، ثالثوں کو اپنی حکمت عملیوں اور تکنیکوں کو مسلسل بہتر بنانے اور ثالثی کے مواقع کی مسلسل تاثیر کو برقرار رکھنے کے لیے اپنی رفتار اور ردعمل کو بہتر بنانے کی ضرورت ہے۔