MovingAvg

Calculate Moving Average in Ruby.

Installation

Add this line to your application's Gemfile:

gem 'moving_avg'

And then execute:

$ bundle

Or install it yourself as:

$ gem install moving_avg

Usage

data = [100, 200, 200, 500]

# Basic Usage
calculator = MovingAvg::Calculator.new(strategy: :sma)
p calculator.moving_avg(data)  #=> 250.0

# You can call MovingAvg::Base class methods
p MovingAvg::Base.sma(data)  #=> 250.0
p MovingAvg::Base.wma(data)  #=> 190.0
p MovingAvg::Base.ewma(data) #=> 298.4
p MovingAvg::Base.mma(data)  #=> 232.8125

MovingAvg::Calculator

data = [100, 200, 200, 500]

calculator = MovingAvg::Calculator.new(strategy: :sma)
p calculator.moving_avg(data)  #=> 250.0

MovingAvg::Base

Simple Moving Average

  • aliases
    • MovingAvg::Base.simple_moving_average()
    • MovingAvg::Base.sma()

Weighted Moving Average

  • a.k.a. Linear Weighted Moving Average
  • aliases
    • MovingAvg::Base.weighted_moving_average()
    • MovingAvg::Base.wma()
    • MovingAvg::Base.lwma()

Exponentially Weighted Moving Average

  • aliases
    • MovingAvg::Base.exponentially_weighted_moving_average()
    • MovingAvg::Base.ewma()

Modified Moving Average

  • aliases
    • MovingAvg::Base.modified_moving_average()
    • MovingAvg::Base.mma()

Simple Moving Mean

  • aliases
    • MovingAvg::Base.simple_moving_mean()
    • MovingAvg::Base.smm()

MovingAvg::Evaluator

.error_sum

Helper method for calculating the sum of errors.

training_items = [100, 300, 350, 280, 500]
teacher_items = [110.0, 200.0, 300.0]
%i(sma wma ewma mma).each { |strategy|
  error = MovingAvg::Evaluator.error_sum(
    training_items: training_items,
    teacher_items: teacher_items,
    window_size: 3,
    strategy: strategy,
  )
  puts "#{strategy.to_s.ljust(4).rjust(10)} = #{error}"
  # sma  = 326.6666666666667
  # wma  = 263.33333333333337
  # ewma = 375.0
  # mma  = 306.66666666666674
}

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/kenju/moving_avg.