Die Ressourcen sind geladen. Beförderung...

Strategie zur Ausgleichung von Indizes

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

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*0.25 liegt und verkaufen, wenn es über 1.1*0.25 liegt, so dass der ETH-Wert auf einem bestimmten Verhältnis gehalten wird. Balancing mehr als ein Vermögenswert, müssen Sie das Handelspaar separat hinzufügen, und Verhältnisse ist Eingabe wie 0.25 zu 0,2 zu 0,3. Denken Sie daran, dass die Summe kleiner als 1 sein muss und dass Sie einen zusätzlichen Raum kaufen müssen.

Eine Index-Bilanzierungsstrategie. Es ist möglich, die Vermögenswerte in einem vorgegebenen Verhältnis auszugleichen, um die Balance zwischen den Börsen zu unterstützen.

Der Flash Crash Bot setzt Vorbestellungen über und unter einen bestimmten Basispreis. Kaufbestellungen werden zu vordefinierten Preispunkten platziert, die unter den festgelegten Basispreis fallen. Umgekehrt werden Verkaufsbestellungen über diesen Basispreis platziert. Dieser Bot ist in einem volatilen Markt am effektivsten.


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

Inhalte dazu

Weitere Informationen

PanmingHallo, funktioniert das auf einer echten Scheibe?