Class: MovingAvg::Base
- Inherits:
-
Object
- Object
- MovingAvg::Base
- Defined in:
- lib/moving_avg/base.rb
Class Method Summary collapse
-
.exponentially_weighted_moving_average(u) ⇒ Object
(also: ewma)
EWMA - Exponentially Weighted Moving Average.
-
.modified_moving_average(u) ⇒ Object
(also: mma)
MMA - Modified Moving Average.
-
.simple_moving_average(u) ⇒ Object
(also: sma)
SMA - Simple Moving Average.
-
.simple_moving_median(u) ⇒ Object
(also: smm)
SMM - Simple Moving Median.
-
.weighted_moving_average(u) ⇒ Object
(also: wma, lwma)
WMA - Weighted Moving Average.
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
MMA - Modified Moving Average
en.wikipedia.org/wiki/Moving_average#Modified_moving_average
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
SMA - Simple Moving Average
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
SMM - Simple Moving Median
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
WMA - Weighted Moving Average
en.wikipedia.org/wiki/Moving_average#Weighted_moving_average
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 |