Robot ini akan mempertahankan proporsi tertentu dari nilai setiap aset seperti yang Anda tetapkan. Jika Anda menetapkan nilai ETH menjadi 25% ((0.25) dari portofolio, penyimpangan menjadi 0.1, bot akan membeli menjadi 0.25 ketika rasio nilai di bawah 0.90,25 dan jual jika di atas 1,10.25, sehingga nilai ETH disimpan pada rasio tertentu. Menimbang lebih dari satu aset, Anda harus menambahkan pasangan perdagangan secara terpisah, dan rasio input seperti "0.25
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); } }
panmingHalo, apakah ini bisa dioperasikan di komputer?