Math::Business::RSI - Technical Analysis: Relative Strength Index


  use Math::Business::RSI;

  my $rsi = new Math::Business::RSI;
     $rsi->set_alpha(14); # issues a set days of 2*14-1
     $rsi->set_days(27);  # equivilent to set_alpha(14)

  # equivelent to set_days(27)/set_alpha(14):
  my $rsi = new Math::Business::RSI(14);

  # or to just get the recommended model ... set_alpha(14)
  my $rsi = Math::Business::RSI->recommended;

  my @closing_values = qw(
      3 4 4 5 6 5 6 5 5 5 5
      6 6 6 6 7 7 7 8 8 8 8

  # choose one:
  $rsi->insert( @closing_values );
  $rsi->insert( $_ ) for @closing_values;

  if( defined(my $q = $rsi->query) ) {
      print "RSI: $q.\n";

  } else {
      print "RSI: n/a.\n";


The RSI was designed by J. Welles Wilder Jr in 1978.

According to Wilder, a security is "overbought" it the RSI reaches an upper bound of 70 and is "oversold" when it moves below 30. Some sources also use thresholds of 80 and 20.

Therefore, moving above the upper threshold is a selling signal, whlie moving below the lower threshold is a signal to buy.

Oddly, RSI(14) uses a "smoothing period" of 14 days -- referring to an alpha of 1/14. This means the EMA[N]u/EMA[N]d has N set to 27. This also means the alpha is upside of other alpha you might see. RSI(14) actually uses an alpha of ~0.0714, but set_alpha() takes the inverse to make $rsi-set_alpha(14)> work.

If all of the above seems really confusing, no worries: RSI(14) means set_alpha(14) (or new(14) and is equivelent to set_days(27).


There are differing schools of thought on how to calculate this and how important it is to stick to precisely the formula Wilder used. Cutler used simple moving averages instead of exponential moving averages.

You can switch between Wilder and Cutler mode with these:

    $rsi->set_cutler; # for simple moving averages
    $rsi->set_standard; # for exponential moving averages

WARNING: Both of these clear out the value queue! If you need to track both, you'll need two objects.


Todd Litteken <>

Amit Dutt <>


Paul Miller <>

I am using this software in my own projects... If you find bugs, please please please let me know. There is a mailing list with very light traffic that you might want to join:


Copyright © 2013 Paul Miller


This is released under the Artistic License. See perlartistic.


perl(1), Math::Business::StockMonkey, Math::Business::StockMonkey::FAQ, Math::Business::StockMonkey::CookBook