Les ressources ont été chargées... Je charge...

Stratégie pour équilibrer les indices

Auteur:Le foin, Date: 2018-09-11 10:06:23 Je suis désolé
Les étiquettes:VariétéL'équilibre

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 0.25 pour 0.2 pour 0.3. Rappelez-vous, le ratio total ajouté doit être inférieur à 1 et a une pièce supplémentaire à acheter.

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);
    }
}

Contenu lié

En savoir plus

le paningBonjour, cela fonctionne-t-il sur le disque?