پہلے مضمون میں ، ہم نے مختصر طور پر لیڈ لیگ رجحان کو ثالثی کے لئے استعمال کرنے کا طریقہ متعارف کرایا۔ اس مضمون میں ، ہم بنیادی طور پر کراس ایکسچینج
سب سے پہلے ، ثالثوں کو حقیقی وقت میں مختلف تبادلے کے مابین قیمت کے اختلافات کی نگرانی کرنے کی ضرورت ہے ، خاص طور پر پوچھ قیمت اور بولی کی قیمت۔ تبادلے کی A کی پوچھ قیمت اور تبادلے کی B کی بولی کی قیمت کو ٹریک کرکے ، اگر تبادلے کی A کی پوچھ قیمت تبادلے کی B کی بولی کی قیمت سے کم ہے تو ، اس کو ثالثی کا موقع سمجھا جاسکتا ہے۔ مثال کے طور پر ، تبادلے کی A کی پوچھ قیمت 10،000 USDT ہے ، اور تبادلے کی B کی بولی کی قیمت 10،100 USDT ہے ، قیمت کا فرق 100 USDT ہے ، پھر ثالثی کا ممکنہ موقع موجود ہے۔ یقینا ، حالیہ تاریخی قیمت کے فرق کی حد کو بھی افتتاحی اور اختتامی قیمت کے فرق کے لئے ایک حوالہ کے طور پر مدنظر رکھا جانا چاہئے ، اور انتظار کا وقت بھی لاگت میں سے ایک ہے۔
ایک بار جب ثالثی کا موقع مل جاتا ہے تو ، ثالث کو کم پوچھ قیمت (جیسے ایکسچینج اے) والے ایکسچینج پر اثاثہ خریدنا چاہئے اور اسے زیادہ بولی کی قیمت (جیسے ایکسچینج بی) والے ایکسچینج پر فروخت کرنا چاہئے۔ یہ آپریشن API کے ذریعہ خودکار کیا جاسکتا ہے تاکہ تیز رفتار عملدرآمد کو یقینی بنایا جاسکے اور قیمت کے فرق کو زیادہ سے زیادہ کیا جاسکے۔ تاہم ، تجارت کو انجام دیتے وقت ، لین دین کے اخراجات (جیسے فیس اور سکڑ) کے ساتھ ساتھ قیمت کے جھٹکے کو بھی مدنظر رکھنا چاہئے۔ فرض کریں کہ ایکسچینج اے کی فیس 0.1٪ ہے ، جبکہ ایکسچینج بی کی فیس 0.2٪ ہے ، اور مارکیٹ میں سکڑ ہے۔ مثال کے طور پر ، جب ایکسچینج اے پر 1 بٹ کوائن خریدتے ہیں تو ، بڑی مقدار میں سکڑ کے احکامات کے نفاذ کی وجہ سے اصل لین دین کی قیمت میں اضافہ ہوسکتا ہے ، فرض کریں کہ 0.1٪ ہے۔ پھر ، اصل لین دین کی قیمت توقع سے 0.1٪ زیادہ ہوگی ، جس کے نتیجے میں خریداری کی لاگت میں اضافہ ہوگا۔
اگر سلائیپ اور فیس کو مدنظر رکھا جائے تو اصل خریداری لاگت اور فروخت کی آمدنی توقعات سے مختلف ہوگی۔
ثالثی کا آخری مرحلہ پوزیشن کو بند کرنا ہے۔ مثال کے طور پر ، ایک عرصے کے بعد ، ایکسچینج اے کی خریداری کی قیمت 10،100 امریکی ڈالر ہے ، اور ایکسچینج بی کی فروخت کی قیمت 10،150 امریکی ڈالر ہے۔ جب قیمت کا فرق 100 امریکی ڈالر سے 50 امریکی ڈالر تک کم ہوجاتا ہے تو ، پروگرام خود بخود پوزیشن کو بند کردے گا اور منافع لے گا۔ یقینا ، کچھ معاملات میں ، قیمت کا فرق بڑھتا ہی جارہا ہے ، اور آپ فنڈز ختم ہونے تک پوزیشنیں کھولنا جاری رکھ سکتے ہیں۔ تبادلے کی قیمت کا فرق برقرار نہیں رہ سکتا اس کی وجہ یہ ہے کہ ثالثی کرنے والے طاقت کی اکثریت میں حصہ ڈالتے ہیں۔
بڑی تعداد میں ثالثوں اور مارکیٹ بنانے والوں کے وجود کی وجہ سے ، مختلف تبادلے کے مابین قیمت کے اختلافات بہت بڑے نہیں ہوں گے ، ورنہ وہ تیزی سے برابر ہوجائیں گے۔ یہ ثالثی کی تجارت کا سب سے بڑا مسئلہ ہے۔
حل: - قیمت کے اختلافات قدرتی طور پر تشکیل دینے کے لئے انتظار کریں:کریپٹوکرنسی مارکیٹ انتہائی اتار چڑھاؤ والی ہے ، اور عام طور پر قلیل مدتی قیمت کے فرق ہوتے ہیں۔ صبر سے انتظار کرنا اس مسئلے کو حل کرنے کا بہترین طریقہ ہے۔- بنانے والے کی حکمت عملی کا استعمال کریں:تبادلہ آرڈر بک پر فعال طور پر آرڈر خریدیں اور بیچیں ، اور آرڈرز کو منسوخ کریں اور قیمتوں میں تبدیلی کے ساتھ ان کو ایڈجسٹ کریں۔ اگر ایک فریق ٹرانزیکشن مکمل کرتا ہے تو ، دوسری فریق آرڈر لے گی۔ اس کا نتیجہ کم ٹرانزیکشن فیس ، چھوٹا پھیلاؤ ہوگا ، اور فوری طور پر ٹرانزیکشن کو یقینی بنائے گا۔- زیادہ ٹریڈنگ جوڑوں کی نگرانی:صرف مرکزی دھارے کی کرنسیوں پر توجہ نہ دیں ، کیونکہ ان کے ثالثی کے مواقع عام طور پر بڑی تعداد میں ثالثوں نے حاصل کیے ہیں ، جس کی وجہ سے قیمت کے اختلافات کم ہوجاتے ہیں۔ غیر مقبول کرنسیوں اور نئی درج کرنسیوں میں خراب لیکویڈیٹی اور کم مقابلہ کی وجہ سے قیمت کا فرق زیادہ ہوسکتا ہے ، اور ثالثی کے مواقع پر توجہ دینے کے قابل ہیں۔- چھوٹے تبادلے کا انتخاب کریں:چھوٹے تبادلے میں عام طور پر کم لیکویڈیٹی اور سست قیمتوں کی ایڈجسٹمنٹ ہوتی ہے ، جس سے قیمتوں میں بڑے اختلافات کا سامنا کرنا آسان ہوجاتا ہے۔ اس وقت ، ثالثی کرنے والے منافع کمانے کے لئے آرڈر دینے اور ان کو روکنے کا انتخاب کرسکتے ہیں۔- اعلی حد کے تبادلے کا انتخاب کریں:کچھ تبادلے کے لئے سخت KYC سرٹیفیکیشن کی ضرورت ہوتی ہے ، جیسے کوریائی تبادلے اپبٹ۔ عام تاجروں کے لئے ان جگہوں میں داخل ہونا مشکل ہے ، اور ثالثی کے زیادہ مواقع موجود ہیں۔ یقینا ، آپ کو مشکلات پر قابو پانے کے طریقے تلاش کرنے کی ضرورت ہے۔
آرڈرز کو پکڑنے میں ناکامی ایک عام مسئلہ ہے۔ جب پروگرام قیمت کا فرق ڈھونڈتا ہے اور ثالثی کے لئے آرڈر دیتا ہے تو ، اصل قیمت کا فرق اتنا بڑا نہیں ہوتا ہے ، اور عام طور پر نقصان ہوتا ہے۔ اس وقت ، تیز ترین ردعمل اور عملدرآمد کی رفتار اہم ہوتی ہے۔
حل: - نیٹ ورک اور سرور مقام کو بہتر بنائیں:لیٹینسی کو کم کرنے کے لئے ایکسچینج سرور کے قریب ایک نوڈ کا انتخاب کریں۔ مثال کے طور پر ، کام کرنے کے لئے کم لیکویڈیٹی کے ساتھ ایک چھوٹا سا تبادلہ منتخب کرنا مارکیٹ کی رد عمل کی رفتار کو کم کرسکتا ہے اور موقع کو استعمال کرسکتا ہے۔- غیر متزلزل پروسیسنگ اور ویب ساکٹ:مارکیٹ کے حالات سے منسلک کرنے کے لئے غیر متزلزل کوڈ اور ویب ساکٹ کا استعمال کرتے ہوئے حقیقی وقت میں قیمت کی معلومات حاصل کرسکتے ہیں اور معلومات کی تاخیر کی وجہ سے کھوئے ہوئے مواقع سے بچنے کے لئے تیزی سے جواب دے سکتے ہیں۔
ایک رخا لین دین اس وقت ہوتا ہے جب آرڈر کا ایک رخ مکمل ہوجاتا ہے لیکن دوسرا رخ لین دین مکمل کرنے میں ناکام ہوجاتا ہے ، جو عام طور پر تیزی سے اتار چڑھاؤ والی مارکیٹ میں ہوتا ہے۔ اگر آرڈر کا صرف ایک رخ کامیاب ہوتا ہے تو ، ثالث کو نمائش کے خطرے کا سامنا کرنا پڑے گا۔
حل: - ایک معقول سٹاپ نقصان میکانیزم قائم کریں:جب ایک طرفہ لین دین ہوتا ہے تو ، آپ اسٹاپ نقصان مرتب کرسکتے ہیں۔ پوزیشنوں کو بروقت بند کرنا خطرات کو کم کرنے کا ایک موثر طریقہ ہے۔- ایک آرڈر رکھنے کے لئے مارکیٹ کی قیمت کا استعمال کریں:مارکیٹ کی قیمت ٹرانزیکشن کی ضمانت دے سکتی ہے، لیکن مسئلہ یہ ہے کہ ٹرانزیکشن کی قیمت میں فرق ناقابل کنٹرول ہے اور اس کے نتیجے میں نقصان ہوسکتا ہے۔
جب قیمت کا فرق طویل عرصے تک موجود ہوتا ہے تو ، کسی خاص تبادلے کے فنڈز تیزی سے خریدے جائیں گے ، اور ثالثی کرنے والے ثالثی کے عمل کو جاری رکھنے کے قابل نہیں ہوسکتے ہیں۔ اس وقت ، ثالثوں کو فنڈز کو تیزی سے منتقل کرنے یا اپنی پوزیشنوں کو ایڈجسٹ کرنے کی ضرورت ہوتی ہے۔
حل: - کرنسی ٹرانسفر آپریشن:فنڈز کی منتقلی کے لئے کراس ایکسچینج کرنسی ٹرانسفر کا استعمال کریں اور ثالثی جاری رکھیں۔ اس طرح ، آپ ایک ہی مارکیٹ میں فنڈز کے جمع ہونے سے بچ سکتے ہیں اور فنڈز کی لیکویڈیٹی میں اضافہ کرسکتے ہیں۔- قیمت کے فرق کو تبدیل کرنے کے لئے انتظار کر رہے ہیں:واپسی کے وقت کی لاگت کو مدنظر رکھتے ہوئے ، قیمت کے فرق کی واپسی کا انتظار کرنا بھی ایک آپشن ہے۔
یہ کوڈ براہ راست تجارتی کوڈ نہیں ہے اور یہ صرف مظاہرے کے مقاصد کے لئے ہے۔ اس میں ایسے معاملات کو مدنظر نہیں رکھا گیا ہے ، جیسے مارکیٹوں کی تعداد ، API تک رسائی میں ناکامی ، غیر متزلزل آرڈر کی رفتار ، وغیرہ۔
// 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
}
}
لیڈ لیگ اینٹوں کو منتقل کرنے والی آربیٹریج ایک کراس ایکسچینج آربیٹریج حکمت عملی ہے جو مارکیٹ لیگ رد عمل پر مبنی ہے۔ مارکیٹ میں قیمت کے اختلافات کا درست تجزیہ کرکے اور تیزی سے لین دین پر عمل درآمد کرکے ، آربیٹریجرز کرپٹوکرنسی مارکیٹ میں مستحکم منافع حاصل کرسکتے ہیں۔ تاہم ، حکمت عملی کی کامیابی نہ صرف حکمت عملی کے ڈیزائن پر منحصر ہے ، بلکہ اچھی کارکردگی اور مارکیٹ کے وقت کو سمجھنے پر بھی منحصر ہے۔ جیسے جیسے مارکیٹ میں مقابلہ شدت اختیار کرتا ہے ، آربیٹریجرز کو حکمت عملی اور تکنیک کو مستقل طور پر بہتر بنانے ، رفتار اور ردعمل کو بہتر بنانے کی ضرورت ہوتی ہے ، تاکہ آربیٹریج کے مواقع کی مستقل تاثیر کو برقرار رکھا جاسکے۔