Index-Bilanz-Bot

Schriftsteller:Das Gras, Datum: 2018-09-11
Tags:PortfolioAusgleichsbetrag

Dieser Bot wird einen bestimmten Anteil des Werts jedes Vermögenswerts halten, wie Sie es festlegen. Wenn Sie den ETH-Wert auf 25% ((0.25) des Portfolios festlegen, Abweichung auf 0.1, wird der Bot auf 0.25 kaufen, wenn das Wertverhältnis unter 0.9 liegt0,25 und verkaufen, wenn sie über 1,1 liegtDer Wert der ETH wird somit in einem bestimmten Verhältnis gehalten. Ausgleich mehr als ein Vermögenswert, müssen Sie das Handelspaar separat hinzufügen, und Verhältnisse ist Eingabe wie "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);
    }
}

Verwandt

Mehr

PanmingHallo, funktioniert das auf einer echten Scheibe?