এই বট প্রতিটি সম্পদের মূল্যের একটি নির্দিষ্ট অনুপাত বজায় রাখবে যেমন আপনি সেট করেছেন।
আপনি যদি ETH মানটি পোর্টফোলিওর 25% ((0.25) এ সেট করেন, তবে 0.1 এর বিচ্যুতি, যখন মানের অনুপাত 0.9*0.25 এর নিচে থাকে তখন বট 0.25 এ কিনবে এবং যখন এটি 1.1*0.25 এর উপরে থাকে তখন বিক্রি করবে, সুতরাং, ETH মানটি একটি নির্দিষ্ট অনুপাতের মধ্যে রাখা হয়।
একের অধিক সম্পদের ভারসাম্য বজায় রাখতে, আপনাকে আলাদাভাবে ট্রেডিং জোড়া যোগ করতে হবে, এবং অনুপাত
সূচক ভারসাম্য কৌশল. সম্পদগুলিকে একটি পূর্বনির্ধারিত অনুপাত অনুসারে ভারসাম্য করা যেতে পারে, যা ক্রস-এক্সচেঞ্জ ভারসাম্যকে সমর্থন করে।
ফ্ল্যাশ ক্র্যাশ বট একটি নির্দিষ্ট বেস মূল্যের উপরে এবং নীচে প্রাক-অর্ডার সেট করে। ক্রয় অর্ডারগুলি পূর্বনির্ধারিত মূল্য পয়েন্টগুলিতে স্থাপন করা হয় যা সেট বেস মূল্যের নীচে পড়ে। বিপরীতভাবে, বিক্রয় অর্ডারগুলি এই বেস দামের উপরে স্থাপন করা হয়। এই বটটি একটি অস্থির বাজারে সবচেয়ে কার্যকর।
var account = _C(exchanges[0].GetAccount); var coinValue = {}; var totalValue = 0; function updateValue(){ var logString = 'Time: '+ _D() + '\n'; totalValue = 0; coinValue[BaseAsset] = 0; logString += BaseAsset + ': ' + _N(coinValue[BaseAsset].value,5) + '\n'; for(var i=0;i<exchanges.length;i++){ var account = _C(exchanges[i].GetAccount); if(i > 0 && exchanges[i].GetLabel != exchanges[i-1].GetLabel){ coinValue[BaseAsset] += {amount:account.Balance + account.FrozenBalance, value:account.Balance + account.FrozenBalance}; } var ticker = _C(exchanges[i].GetTicker); var symbol = exchanges[i].GetCurrency().split('_')[0]; coinValue[symbol].amount = account.Stocks + account.FrozenStocks; coinValue[symbol].value = coinValue[symbol].amount * ticker.Last; totalValue += coinValue[symbol].value; coinValue[symbol].buyPrice = ticker.Buy; coinValue[symbol].sellPrice = ticker.Sell; logString += symbol + ': ' + _N(coinValue[symbol].value,5) + '\n' } totalValue += coinValue[BaseAsset].value; LogStatus(logString); } var keepPercent = Ratio.split('|').map(Number); if(math.sum(keepPercent) > 1){ throw 'sum of keep percent should be lower than 1'; } var buyPercent = ToBuy.split('|').map(Number); var sellPercent = ToSell.split('|').map(Number); for(var i=0;i<exchanges.length;i++){ var symbol = exchanges[i].GetCurrency().split('_')[0]; coinValue[symbol] = {amount:0, value:0, buyPrice:0, sellPrice:0, keepPercent:0, buyPercent:0, sellPercent:0}; coinValue[symbol].keepPercent = keepPercent[i]; coinValue[symbol].buyPercent = buyPercent[i]; coinValue[symbol].sellPercent = sellPercent[i]; } function CancelPendingOrders(e) { var orders = _C(e.GetOrders); for (var j = 0; j < orders.length; j++) { exchange.CancelOrder(orders[j].Id, orders[j]); Sleep(300); } } function onTick(){ updateValue(); for(var i=0;i<exchanges.length;i++){ var symbol = exchanges[i].GetCurrency().split('_')[0]; if(coinValue[symbol].value > (1+coinValue[symbol].sellPercent)*totalValue*coinValue[symbol].keepPercent){ var sellAmount = (coinValue[symbol].value - totalValue*coinValue[symbol].keepPercent)/coinValue[symbol].buyPrice exchanges[i].Sell(coinValue[symbol].buyPrice, sellAmount) CancelPendingOrders(exchanges[i]); } else if(coinValue[symbol].value < (1-coinValue[symbol].buyPercent)*totalValue*coinValue[symbol].keepPercent){ var buyAmount = (totalValue*coinValue[symbol].keepPercent - coinValue[symbol].value)/coinValue[symbol].sellPrice exchanges[i].Buy(coinValue[symbol].sellPrice, buyAmount); CancelPendingOrders(exchanges[i]); } } } function main() { while(true){ onTick(); Sleep(Interval*1000); } }
প্যানমিংহ্যালো, এটা কি ডিস্কের সাথে কাজ করে?