You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Kraken OHLC计算RSI,需匹配cryptowatch.de的LTC-EUR数值

实现和cryptowatch.de匹配的LTC-EUR RSI计算(基于Kraken OHLC数据)

要完全匹配cryptowatch.de上的RSI数值,核心是严格遵循stockcharts.com的标准RSI算法,同时注意几个容易踩坑的细节。我帮你完善了代码,并且标注了关键要点:

// 核心说明:输入data必须是按**时间升序**排列的收盘价数组(最早的价格在索引0,最新的在最后)
// 如果你的原始Kraken数据是降序(最新价格在前),请先执行 data = data.reverse() 转换
function calculateRSI(data, period = 14) {
    // 确保数据是从旧到新的顺序
    const sortedData = [...data]; // 如果原始是降序,改成 [...data].reverse()
    
    // 第一步:计算每个周期的价格变化(当前收盘价 - 前一天收盘价)
    const priceChanges = [];
    for (let i = 1; i < sortedData.length; i++) {
        priceChanges.push(sortedData[i] - sortedData[i - 1]);
    }

    // 初始化前14周期的平均涨幅/跌幅(简单算术平均)
    let avgGain = 0;
    let avgLoss = 0;
    for (let i = 0; i < period; i++) {
        const change = priceChanges[i];
        if (change > 0) {
            avgGain += change;
        } else {
            avgLoss += Math.abs(change);
        }
    }
    avgGain /= period;
    avgLoss /= period;

    // 计算RSI数组
    const rsiResults = [];
    // 第一个RSI值对应第15个价格数据(前14个周期变化计算而来)
    let rs = avgGain / (avgLoss || 0.00001); // 防止除以0的边界情况
    rsiResults.push(100 - (100 / (1 + rs)));

    // 后续周期用平滑平均(EMA方式)计算
    for (let i = period; i < priceChanges.length; i++) {
        const currentChange = priceChanges[i];
        const currentGain = currentChange > 0 ? currentChange : 0;
        const currentLoss = currentChange < 0 ? Math.abs(currentChange) : 0;

        // 平滑公式:前平均*(period-1)/period + 当前变化/period
        avgGain = (avgGain * (period - 1) + currentGain) / period;
        avgLoss = (avgLoss * (period - 1) + currentLoss) / period;

        rs = avgGain / (avgLoss || 0.00001);
        rsiResults.push(100 - (100 / (1 + rs)));
    }

    // 返回的rsiResults长度为:原始数据长度 - period
    // 最后一个元素就是最新的RSI值,和cryptowatch显示的数值一致
    return rsiResults;
}

关键细节(决定是否匹配的核心):

  • 必须用收盘价:你原始代码里用的是开盘价数组,这是最容易导致数值不匹配的错误!cryptowatch和stockcharts的RSI都是基于收盘价计算的,一定要提取Kraken OHLC数据里的close字段,而不是open。
  • 数据顺序不能错:输入的价格数组必须是从旧到新的升序排列。如果Kraken返回的OHLC数据是按时间降序(最新在前),一定要先反转数组。
  • 平滑平均逻辑:前14个周期用简单算术平均,之后的周期必须用EMA式的平滑计算(而不是重新计算简单平均),这是stockcharts的标准算法,cryptowatch完全遵循这个规则。
  • 避免除以0:当连续上涨导致平均跌幅为0时,RS会趋近于无穷大,此时RSI=100,代码里用极小值0.00001代替0,避免计算报错。

验证匹配的步骤:

  1. 从Kraken获取和cryptowatch相同时间周期的LTC-EUR OHLC数据(比如1小时线)
  2. 提取所有收盘价,按时间升序排列
  3. 调用上述函数,取返回数组的最后一个值,和cryptowatch显示的RSI对比,误差会在小数点后两位以内(平台可能有四舍五入处理)

内容的提问来源于stack exchange,提问作者Simon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:44:55