Ce robot maintiendra une proportion spécifique de la valeur de chaque actif que vous définissez.
Si vous définissez la valeur de l'ETH à 25% ((0.25) du portefeuille, déviation à 0.1, le bot achètera à 0.25 lorsque le rapport de valeur est inférieur à 0.9*0.25 et vendra lorsqu'il est supérieur à 1.1*0.25, de sorte que la valeur de l'ETH est maintenue à un certain rapport.
Pour équilibrer plus d'un actif, vous devez ajouter des paires de trading séparément, et les ratios sont entrés comme
Stratégie d'équilibrage d'indices. Il est possible d'équilibrer les actifs selon des proportions prédéfinies, ce qui favorise l'équilibrage entre les échanges.
Le Flash Crash Bot définit des pré-ordres au-dessus et en dessous d'un prix de base spécifié. Les ordres d'achat sont placés à des prix prédéfinis qui sont inférieurs au prix de base défini. Inversement, les ordres de vente sont placés au-dessus de ce prix de base. Ce bot est le plus efficace dans un marché volatil.
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); } }
le paningBonjour, cela fonctionne-t-il sur le disque?