প্রথম নিবন্ধে, আমরা কীভাবে লিড-ল্যাগ ঘটনাটি সালিশের জন্য ব্যবহার করতে পারি তা সংক্ষেপে পরিচয় করিয়ে দিয়েছি। এই নিবন্ধে, আমরা মূলত ক্রস-এক্সচেঞ্জ
প্রথমত, সালিসিরদের বিভিন্ন এক্সচেঞ্জের মধ্যে রিয়েল টাইমে মূল্যের পার্থক্য, বিশেষত জিজ্ঞাসা মূল্য এবং বিড মূল্য পর্যবেক্ষণ করতে হবে। বিনিময় A এর জিজ্ঞাসা মূল্য এবং বিনিময় B এর বিড মূল্য ট্র্যাক করে, যদি বিনিময় A এর জিজ্ঞাসা মূল্য বিনিময় B এর বিড মূল্যের চেয়ে কম হয়, তবে এটি একটি সালিসির সুযোগ বলে মনে করা যেতে পারে। উদাহরণস্বরূপ, বিনিময় A এর জিজ্ঞাসা মূল্য 10,000 ইউএসডিটি, এবং বিনিময় B এর বিড মূল্য 10,100 ইউএসডিটি, দামের পার্থক্য 100 ইউএসডিটি, তারপরে একটি সম্ভাব্য সালিসির সুযোগ রয়েছে। অবশ্যই, সাম্প্রতিক ঐতিহাসিক মূল্য পার্থক্য পরিসীমাটিও খোলার এবং বন্ধের মূল্য পার্থক্যের জন্য একটি রেফারেন্স হিসাবে বিবেচনা করা উচিত, এবং অপেক্ষা সময়ও ব্যয়গুলির মধ্যে একটি।
একবার একটি সালিশের সুযোগ পাওয়া গেলে, সালিশকে কম জিজ্ঞাসা মূল্যের (যেমন এক্সচেঞ্জ এ) একটি এক্সচেঞ্জে সম্পদটি কিনতে হবে এবং উচ্চতর বিড মূল্যের (যেমন এক্সচেঞ্জ বি) একটি এক্সচেঞ্জে এটি বিক্রি করতে হবে। দ্রুত কার্যকরকরণ নিশ্চিত করতে এবং দামের পার্থক্য সর্বাধিকীকরণের জন্য এই অপারেশনটি এপিআই এর মাধ্যমে স্বয়ংক্রিয় করা যেতে পারে। তবে, যখন কোনও বাণিজ্য সম্পাদন করা হয়, তখন লেনদেনের ব্যয় (যেমন ফি এবং স্লিপজ) পাশাপাশি মূল্যের শকগুলি বিবেচনা করা উচিত। অনুমান করুন যে এক্সচেঞ্জ এ এর ফি 0.1%, যখন এক্সচেঞ্জ বি এর ফি 0.2%, এবং বাজারে স্লিপজ রয়েছে। উদাহরণস্বরূপ, এক্সচেঞ্জ এ 1 বিটকয়েন কেনার সময়, বড় অর্ডার স্লিপজ 0.1% বলে ধরে নিলে, বড় অর্ডার কার্যকরকরণের কারণে প্রকৃত লেনদেনের দাম বৃদ্ধি পেতে পারে। তারপরে, প্রকৃত লেনদেনের দাম প্রত্যাশার চেয়ে 0.1% বেশি হবে, যার ফলে ক্রয়ের ব্যয় বৃদ্ধি পাবে।
যদি স্লিপ এবং ফি বিবেচনা করা হয়, তাহলে প্রকৃত ক্রয় ব্যয় এবং বিক্রয় আয় প্রত্যাশার থেকে আলাদা হবে।
আর্বিট্রেজের শেষ ধাপটি হল অবস্থানটি বন্ধ করা। উদাহরণস্বরূপ, একটি নির্দিষ্ট সময়ের পরে, এক্সচেঞ্জ এ এর ক্রয় মূল্য 10,100 ইউএসডিটি, এবং এক্সচেঞ্জ বি এর বিক্রয় মূল্য 10,150 ইউএসডিটি। যখন মূল্য পার্থক্য 100 ইউএসডিটি থেকে 50 ইউএসডিটি পর্যন্ত সঙ্কুচিত হয়, তখন প্রোগ্রামটি স্বয়ংক্রিয়ভাবে অবস্থানটি বন্ধ করবে এবং মুনাফা নেবে। অবশ্যই, কিছু ক্ষেত্রে, মূল্য পার্থক্যটি প্রসারিত হতে পারে এবং আপনি তহবিলগুলি শেষ না হওয়া পর্যন্ত অবস্থানগুলি খোলা চালিয়ে যেতে পারেন। এক্সচেঞ্জের মূল্য পার্থক্য বজায় রাখতে পারে না কারণ আর্বিট্রেজাররা শক্তির বিশাল সংখ্যাগরিষ্ঠতা অবদান করে।
বিপুল সংখ্যক আরবিট্রেজার এবং মার্কেট মেকারের অস্তিত্বের কারণে, বিভিন্ন এক্সচেঞ্জের মধ্যে মূল্য পার্থক্য খুব বড় হবে না, অন্যথায় তারা দ্রুত সমতুল্য হবে। এটি আরবিট্রেজ ট্রেডিংয়ের মুখোমুখি সবচেয়ে বড় সমস্যা।
সমাধান: - দামের পার্থক্য স্বাভাবিকভাবে গঠনের জন্য অপেক্ষা করুন:ক্রিপ্টোকারেন্সি বাজার অত্যন্ত অস্থির, এবং স্বল্পমেয়াদী মূল্য পার্থক্য সাধারণত ঘটে। ধৈর্য ধরে অপেক্ষা করা এই সমস্যা সমাধানের সর্বোত্তম উপায়।- মেকার কৌশল ব্যবহার করুন:একটি এক্সচেঞ্জ অর্ডার বইতে ক্রয় এবং বিক্রয় আদেশ সক্রিয়ভাবে, এবং আদেশ বাতিল এবং দাম পরিবর্তন হিসাবে তাদের সামঞ্জস্য। যদি এক পক্ষ লেনদেন সম্পন্ন করে, অন্য পক্ষ অর্ডার গ্রহণ করবে। এর ফলে কম লেনদেনের ফি, একটি ছোট স্প্রেড, এবং তাত্ক্ষণিক লেনদেন নিশ্চিত হবে।- আরো ট্রেডিং জোড়া পর্যবেক্ষণ করুন:কেবলমাত্র মূলধারার মুদ্রাগুলিতে মনোনিবেশ করবেন না, কারণ তাদের সালিশের সুযোগগুলি সাধারণত বিপুল সংখ্যক সালিশের দ্বারা ধরা পড়েছে, যার ফলে দামের পার্থক্যগুলি সংকীর্ণ হয়ে পড়েছে। দুর্বল তরলতা এবং কম প্রতিযোগিতার কারণে অপ্রচলিত মুদ্রাগুলি এবং নতুন তালিকাভুক্ত মুদ্রাগুলির দামের পার্থক্য বেশি হতে পারে এবং সালিশের সুযোগগুলি মনোযোগ দেওয়ার মতো।- ছোট ছোট এক্সচেঞ্জ বেছে নিন:ছোট এক্সচেঞ্জগুলিতে সাধারণত দুর্বল তরলতা এবং ধীর মূল্যের সমন্বয় থাকে, যা বড় দামের পার্থক্যের জন্য এটি সহজ করে তোলে। এই সময়ে, সালিশকারীরা লাভ অর্জনের জন্য অর্ডার স্থাপন এবং তাদের পূর্বাভাস হিসাবে কার্যকর করতে বেছে নিতে পারে।- উচ্চ প্রান্তিক বিনিময় চয়ন করুনঃকিছু এক্সচেঞ্জের জন্য কঠোর কেওয়াইসি শংসাপত্রের প্রয়োজন হয়, যেমন কোরিয়ান এক্সচেঞ্জ আপবিট। এই জায়গাগুলি সাধারণ ব্যবসায়ীদের প্রবেশ করা কঠিন এবং আরও বেশি সালিশের সুযোগ রয়েছে। অবশ্যই, আপনাকে অসুবিধাগুলি কাটিয়ে উঠার উপায় খুঁজে বের করতে হবে।
অর্ডারগুলি ধরতে ব্যর্থতা একটি সাধারণ সমস্যা। যখন প্রোগ্রামটি দামের পার্থক্য খুঁজে পায় এবং সালিশের জন্য একটি অর্ডার দেয়, তখন প্রকৃত দামের পার্থক্য এত বড় নয়, এবং সাধারণত ক্ষতি হয়। এই সময়ে, দ্রুততম প্রতিক্রিয়া এবং সম্পাদনের গতি অত্যন্ত গুরুত্বপূর্ণ।
সমাধান: - নেটওয়ার্ক এবং সার্ভারের অবস্থান অপ্টিমাইজ করুনঃল্যাটেনসি কমাতে এক্সচেঞ্জ সার্ভারের কাছাকাছি একটি নোড নির্বাচন করুন। উদাহরণস্বরূপ, কাজ করার জন্য দুর্বল তরলতার সাথে একটি ছোট এক্সচেঞ্জ নির্বাচন করা বাজারের প্রতিক্রিয়া গতি হ্রাস করতে পারে এবং সুযোগটি দখল করতে পারে।- অ্যাসিনক্রোন প্রসেসিং এবং ওয়েবসকেট:বাজারের অবস্থার সাথে সংযোগ স্থাপনের জন্য অ্যাসিনক্রোন কোড এবং ওয়েবসকেট ব্যবহার করে রিয়েল টাইমে মূল্যের তথ্য পেতে পারে এবং তথ্য বিলম্বের কারণে মিস করা সুযোগগুলি এড়াতে দ্রুত প্রতিক্রিয়া জানাতে পারে।
একটি একমুখী লেনদেন হল যখন অর্ডারের একটি পক্ষ সম্পন্ন হয় কিন্তু অন্য পক্ষ লেনদেনটি সম্পন্ন করতে ব্যর্থ হয়, যা সাধারণত দ্রুত ওঠানামা বাজারে ঘটে। যদি অর্ডারের কেবলমাত্র একটি পক্ষ সফল হয়, তবে সালিসির এক্সপোজার ঝুঁকির মুখোমুখি হবে।
সমাধান: - একটি যুক্তিসঙ্গত স্টপ-লস প্রক্রিয়া স্থাপন করুনঃযখন একমুখী লেনদেন হয়, তখন আপনি স্টপ লস সেট করতে পারেন। সময়মত পজিশন বন্ধ করা ঝুঁকি কমানোর একটি কার্যকর উপায়।- অর্ডার দেওয়ার জন্য বাজার মূল্য ব্যবহার করুন:বাজার মূল্য লেনদেনের গ্যারান্টি দিতে পারে, কিন্তু সমস্যা হল লেনদেনের দামের পার্থক্য অনিয়ন্ত্রিত এবং ক্ষতির কারণ হতে পারে।
যখন দামের পার্থক্য দীর্ঘ সময়ের জন্য বিদ্যমান থাকে, তখন একটি নির্দিষ্ট এক্সচেঞ্জের তহবিলগুলি দ্রুত কেনা হবে, এবং সালিশকারীরা সালিশ কার্যক্রম চালিয়ে যেতে সক্ষম নাও হতে পারে। এই সময়ে সালিশকারীদের তহবিল দ্রুত স্থানান্তর করতে বা তাদের অবস্থানগুলি সামঞ্জস্য করতে হবে।
সমাধান: - মুদ্রা স্থানান্তর অপারেশনঃতহবিল স্থানান্তর করতে এবং আরবিট্রেজ চালিয়ে যাওয়ার জন্য ক্রস এক্সচেঞ্জ মুদ্রা স্থানান্তর ব্যবহার করুন। এইভাবে, আপনি একক বাজারে তহবিলের জমে যাওয়া এড়াতে এবং তহবিলের তরলতা বৃদ্ধি করতে পারেন।- দামের পার্থক্যের জন্য অপেক্ষা করছিঃপ্রত্যাহারের সময় ব্যয় বিবেচনা করে, দামের পার্থক্য ফিরে আসার জন্য অপেক্ষা করাও একটি বিকল্প।
কোডটি লাইভ ট্রেডিং কোড নয় এবং এটি কেবলমাত্র প্রদর্শন উদ্দেশ্যে। এটি বাজারের সংখ্যা, এপিআই অ্যাক্সেস ব্যর্থতা, অ্যাসিনক্রোন অর্ডার গতি বাড়ানো ইত্যাদির মতো বিষয়গুলি বিবেচনা করে না।
// 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
}
}
লিড-ল্যাগ ইট-মুভিং আর্বিট্রেজ বাজার বিলম্ব প্রতিক্রিয়ার উপর ভিত্তি করে একটি ক্রস-এক্সচেঞ্জ আর্বিট্রেজ কৌশল। বাজারে দামের পার্থক্যগুলি সঠিকভাবে বিশ্লেষণ করে এবং দ্রুত লেনদেন সম্পাদন করে, আর্বিট্রেজাররা ক্রিপ্টোকারেন্সি বাজারে স্থিতিশীল মুনাফা অর্জন করতে পারে। তবে কৌশলটির সাফল্য কেবল কৌশলটির নকশার উপর নির্ভর করে না, তবে বাজারের সময় নির্ধারণের ভাল সম্পাদন এবং সংবেদনশীল বোঝার উপরও নির্ভর করে। বাজারের প্রতিযোগিতা তীব্র হওয়ার সাথে সাথে আর্বিট্রেজারদের কৌশল এবং কৌশলগুলি ক্রমাগত অনুকূল করতে হবে, গতি এবং প্রতিক্রিয়াশীলতা উন্নত করতে হবে, যাতে আর্বিট্রেজ সুযোগগুলির অব্যাহত কার্যকারিতা বজায় রাখা যায়।