이 봇은 당신이 설정한 각 자산 가치의 특정 비율을 유지합니다. 만약 당신이 ETH 값을 포트폴리오의 25% ((0.25) 로 설정하면, 오차는 0.1, bot는 가치 비율이 0.9보다 낮을 때 0.25로 구매합니다.0.25 이고 1.1 이 넘으면 팔아요0.25, 따라서 ETH 값은 특정 비율로 유지됩니다. 하나 이상의 자산을 균형, 당신은 개별적으로 거래 쌍을 추가해야합니다, 그리고 비율은 입력 "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); } }