Проблема вычисления правильного RSI от API узла Binance - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь рассчитать RSI из API узла Binance, я дошел до того, что получил какой-то RSI, но это довольно далеко от «правильного» RSI, показанного в Binance.

Формула для расчета RSI выглядит следующим образом

RSI = 100 – 100/ (1 + RS)
RS = Average Gain of n days UP  / Average Loss of n days DOWN

И мой код для расчета RSI из Binance

const binance = require('node-binance-api')().options({
    APIKEY: 'xxx',
    APISECRET: 'xxx',
    useServerTime: true,
    test: true // True = SandboxMode
});

/* VARIABLES */
let listLow = [];
let changeUp = 0;
let changeDown = 0;
let last_close = 0;
let current_time = Date.now();
        calculateRSI();

function calculateRSI() {
    console.log("Generating RSI");
    binance.candlesticks("ETHBTC", "1d", (error, ticks, symbol) => {
        for (i = 0; i < ticks.length; i++) {
            let last_tick = ticks[i];
            let [time, open, high, low, close, volume, closeTime, assetVolume, trades, buyBaseVolume, buyAssetVolume, ignored] = last_tick;
            listLow.push(close);
            if (i == ticks.length -1 ) {
                for (x = 0; x < listLow.length; x++) {
                    previous_close = (parseFloat(listLow[x - 1]));
                    current_close = (parseFloat(listLow[x]));
                    // HIGH
                    if (current_close > previous_close) {
                        upChange = current_close - previous_close;
                        changeUp += upChange;
                        if (x == listLow.length -1) {
                            last_close = current_close - previous_close;
                        }
                    }
                    // LOW
                    if (previous_close > current_close) {
                        downChange = previous_close - current_close;
                        changeDown += downChange;
                        if (x == listLow.length - 1) {
                            last_close = previous_close - current_close;
                        }
                    }
                    if (x == (listLow.length - 1)) {
                        AVGHigh = changeUp / (ticks.length);
                        AVGLow = changeDown / (ticks.length);
                        Upavg = (AVGHigh * (ticks.length -1) + last_close) / (ticks.length);
                        Downavg = (AVGLow * (ticks.length -1) + last_close) / (ticks.length);
                        RS = Upavg / Downavg;
                        console.log(RS + " RS");
                        RSI = (100 - (100 / (1 + RS)));
                        console.log(RSI);
                    }
                }
            }
        }
    }, {
        limit: 14,
        endTime: current_time
    });
}

Когда я запускаю свой код, я получаю RSIзначение: 30,973505422917697

Но Бинанс говорит, что это правильный RSI: 39,615540.

Что я делаю неправильно или чего мне не хватает?

Спасибо, что нашли времячтение, // Jonas

...