File Exchange

image thumbnail

RSI calculator

version (2.28 KB) by Josiah Renfree
Calculate the RSI for a stock over any time range for any given period


Updated 16 Apr 2008

View License

This program is used to calculate the Relative Strength Index (RSI) technical indicator for a user-provided vector giving stock prices. The user may also specify the number of samples to use for each period. The default period is 14 samples.

RSI = calc_RSI(data,N) calculates the RSI over the stock price values found in data using a period of N samples.

RSI = calc_RSI(data) calculates the RSI using the default period of 14 samples.

The vector 'data' must be formatted so that the value corresponding to the most recent date is at the end of the vector, while the oldest price value is found at the beginning of the vector. The vector RSI is formatted in the same way.

The vector 'RSI' will not be the same length as the vector 'data', since the first N samples of 'data' need to be used to calculate the first 'RSI' sample.

NOTE: I commonly use my other program, "Historical Stock Data Downloader," to retrieve the stock data that I pass to this RSI function for RSI calculation. If you use my other program, be aware that the stock data downloader returns data with the most recent date first, and the oldest date at the end of the array. The "calc_RSI" function must take data in the reverse order, with the most recent date at the end of the array. To flip the data, you will need to use the flipud command in Matlab. Just be aware of how the data needs to be formatted.

Cite As

Josiah Renfree (2020). RSI calculator (, MATLAB Central File Exchange. Retrieved .

Comments and Ratings (7)

siriphan wichaidit

Hi, thanks a lot for the code but I am confused about the last if-clause below;

if AvgLoss == 0
RSI(i-N) = 100;
RS = AvgGain / AvgLoss;
RSI(i+1-N) = 100 - (100/(1+RS));

Why if AvgLoss ==0, you put RSI in the index i-N (why not i+1-N). Because if you put it in i-N, it means you just replace with RSI from the day before?

tony evans

I am indeed mistaken, it appears there are multiple embodiments of the algorithm, apologies.

tony evans

I may be mistaken, but I don't believe you should be including the zeros when calculate the average Gain / loss for each period on line 66/67?


A very nice, handy piece of code. All I'd add is an error check for short arrays.

venugopal ramachandran

your product is good

Fernando Oliveira

Josiah Renfree, correct me if I am wrong, but in lines 90 and 91 you should use (N-1)/N instead of 13 and 14 for a period of N trading days.

ghssan dar

MATLAB Release Compatibility
Created with R14
Compatible with any release
Platform Compatibility
Windows macOS Linux

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!