DEV Community

Cover image for Calculating the Relative Strength Index (RSI) with JavaScript
Mustafa Onur Çelik
Mustafa Onur Çelik

Posted on • Edited on

14 2

Calculating the Relative Strength Index (RSI) with JavaScript

To calculate the Relative Strength Index (RSI) with JavaScript, you can use the following formula:

RSI = 100 - (100 / (1 + (average of upward price changes / average of downward price changes)))

Enter fullscreen mode Exit fullscreen mode

Here's an example of how you can implement this formula to calculate the RSI for a given array of closing prices:

function calculateRSI(closingPrices) {
  // Calculate the average of the upward price changes
  let avgUpwardChange = 0;
  for (let i = 1; i < closingPrices.length; i++) {
    avgUpwardChange += Math.max(0, closingPrices[i] - closingPrices[i - 1]);
  }
  avgUpwardChange /= closingPrices.length;

  // Calculate the average of the downward price changes
  let avgDownwardChange = 0;
  for (let i = 1; i < closingPrices.length; i++) {
    avgDownwardChange += Math.max(0, closingPrices[i - 1] - closingPrices[i]);
  }
  avgDownwardChange /= closingPrices.length;

  // Calculate the RSI
  const rsi = 100 - (100 / (1 + (avgUpwardChange / avgDownwardChange)));

  return rsi;
}

// Example usage
const closingPrices = [100, 110, 105, 115, 120, 130, 140, 150, 145, 155];
const rsi = calculateRSI(closingPrices);
console.log(rsi); // Output: 71.43

Enter fullscreen mode Exit fullscreen mode

This code calculates the RSI for a given array of closing prices by first calculating the average of the upward and downward price changes, and then applying the formula to these values to calculate the RSI. You can adjust the number of closing prices used in the calculation by changing the length of the array passed to the calculateRSI() function.

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (3)

Collapse
 
joseperales_ profile image
Jose Perales

:Heart

Thank you for the calculation and explanation. QQ: The constant closingPrices here is an array of the last n number of closing of a candle or closing price of the day?

Collapse
 
onurcelik profile image
Mustafa Onur Çelik

those closing prices are candle bar closing prices.

Collapse
 
void0 profile image
Charlie Martin

Thanks. You could do the calculation with a single loop for a small perf boost.

FYI I get 86.67 as the RSI when I run the code not 71.43

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

AWS GenAI LIVE!

GenAI LIVE! is a dynamic live-streamed show exploring how AWS and our partners are helping organizations unlock real value with generative AI.

Tune in to the full event

DEV is partnering to bring live events to the community. Join us or dismiss this billboard if you're not interested. ❤️