리소스 로딩... 로딩...

지수 균형 전략

저자:초목, 날짜: 2018-09-11 10:06:23
태그:다양한 종류균형

이 봇은 당신이 설정한 각 자산 가치의 특정 비율을 유지합니다. 만약 당신이 ETH 값을 포트폴리오의 25% ((0.25) 로 설정하면, 오차는 0.1, bot는 가치 비율이 0.9*0.25 이하일 때 0.25로 구매하고 1.1*0.25 이상일 때 판매합니다. 따라서 ETH 값은 특정 비율로 유지됩니다. 하나 이상의 자산을 균형을 맞추는 경우, 거래 쌍을 별도로 추가해야 합니다. 그리고 비율은 0.25 0.2 0.3처럼 입력됩니다. 기억하세요, 합이 1보다 작아야 하고, 추가로 방을 사야 합니다.

지수균형 전략. 재산을 미리 설정된 비율로 균형을 잡을 수 있으며, 거래소 간 균형을 지원합니다. 거래소가 인접하게 추가되도록 동의하십시오.

플래시 크래시 봇은 지정된 기본 가격 이상 및 이하의 사전 주문을 설정합니다. 구매 주문은 설정된 기본 가격 이하의 미리 정의된 가격 지점에 배치됩니다. 반대로 판매 주문은이 기본 가격 이상에 배치됩니다. 이 봇은 변동성 시장에서 가장 효과적입니다.


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

관련 내용

더 많은 내용

안녕하세요, 이게 실제 디스크에서 작동할까요?