Este bot mantendrá una proporción específica del valor de cada activo según lo establezca.
Si establece el valor de ETH en 25% ((0.25) de la cartera, desviación a 0.1, el bot comprará a 0.25 cuando la relación de valor esté por debajo de 0.9*0.25 y venderá cuando esté por encima de 1.1*0.25, por lo tanto, el valor de ETH se mantiene en una cierta relación.
Equilibrando más de un activo, usted tiene que añadir el par de negociación por separado, y las proporciones es la entrada como
Las estrategias de equilibrio por índices. Se pueden equilibrar los activos en proporciones predeterminadas, lo que apoya el equilibrio entre los intercambios. Tenga en cuenta que los intercambios deben agregarse en estrecha proximidad.
El Flash Crash Bot establece pre-ordenes por encima y por debajo de un precio base especificado. Las órdenes de compra se colocan en puntos de precio predefinidos que caen por debajo del precio base establecido. Por el contrario, las órdenes de venta se colocan por encima de este precio base. Este bot es más efectivo en un mercado volátil.
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); } }
el panmingHola, ¿esto funciona en un disco real?