Index Balance Bot

Penulis:Rumput, Tanggal: 2018-09-11 10:06:23
Tag:PortfolioSaldo

Robot ini akan mempertahankan proporsi tertentu dari nilai setiap aset seperti yang Anda tetapkan. Jika Anda menetapkan nilai ETH menjadi 25% ((0.25) dari portofolio, penyimpangan menjadi 0.1, bot akan membeli menjadi 0.25 ketika rasio nilai di bawah 0.90,25 dan jual jika di atas 1,10.25, sehingga nilai ETH disimpan pada rasio tertentu. Menimbang lebih dari satu aset, Anda harus menambahkan pasangan perdagangan secara terpisah, dan rasio input seperti "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);
    }
}

Berkaitan

Lebih banyak

panmingHalo, apakah ini bisa dioperasikan di komputer?