Class: MovingAvg::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/moving_avg/base.rb

Class Method Summary collapse

Class Method Details

.exponentially_weighted_moving_average(u) ⇒ Object Also known as: ewma

EWMA - Exponentially Weighted Moving Average

en.wikipedia.org/wiki/Moving_average#Exponential_moving_average



28
29
30
31
32
# File 'lib/moving_avg/base.rb', line 28

def exponentially_weighted_moving_average(u)
  factor = 2.0 / (u.size + 1) # 2 / (N + 1) a.k.a. smoothing factor
  weighted = exponentially_weighting(u, factor)
  weighted.last
end

.modified_moving_average(u) ⇒ Object Also known as: mma



38
39
40
41
42
# File 'lib/moving_avg/base.rb', line 38

def modified_moving_average(u)
  factor = 1.0 / u.size # 1 / N
  weighted = exponentially_weighting(u, factor)
  weighted.last
end

.simple_moving_average(u) ⇒ Object Also known as: sma



9
10
11
# File 'lib/moving_avg/base.rb', line 9

def simple_moving_average(u)
  sum_vector(u).to_f / u.size
end

.simple_moving_median(u) ⇒ Object Also known as: smm



48
49
50
51
52
# File 'lib/moving_avg/base.rb', line 48

def simple_moving_median(u)
  sorted = u.sort
  len = sorted.length
  (sorted[(len - 1) / 2] + sorted[len / 2]) / 2
end

.weighted_moving_average(u) ⇒ Object Also known as: wma, lwma



17
18
19
20
21
# File 'lib/moving_avg/base.rb', line 17

def weighted_moving_average(u)
  weights = (1..u.size).to_a.reverse # [n, n-1, n-2 ... 2, 1]
  weighted = weights.zip(u).map { |w, x| w * x  }
  sum_vector(weighted).to_f / sum_vector(weights)
end