指数移动平均线 - Ruby

时间:2013-12-16 18:29:03

标签: ruby-on-rails ruby

我一直在使用simple_statistics gem,但是我想在最后的x条记录上计算EMA。例如(计算WMA时)

@stockticker.ema10 = s.stocktickers.last(10).map(&:current_price).map{|f| f.to_f}.wma

我想知道是否有人可以就如何计算轨道中的EMA提供建议?

2 个答案:

答案 0 :(得分:3)

看起来Moving Averages宝石可能就是您正在寻找的东西。以下是exponential_moving_average方法的副本供参考。

class Array 
  def exponential_moving_average(idx=nil, tail=nil)
    idx, tail = idx_and_tail_or_defaults(idx, tail)
    valid_for_ma(idx, tail)
    alpha = 2.0 / (tail + 1)
    n = (1..tail).to_a.map{|tidx| (1 - alpha) ** (tidx - 1) * self[idx - tidx + 1]}.sum
    d = (1..tail).to_a.map{|tidx| (1 - alpha) ** (tidx - 1)}.sum
    n / d
   end
   alias_method :ema, :exponential_moving_average
end

答案 1 :(得分:2)

我是Statsample-timeseries gem的开发者,它是Statsample的扩展,是Ruby中的高级统计套件。它有很多统计方法(包括EMA),您可以对数据执行这些方法。

如果您需要任何帮助,我将非常乐意为您提供帮助。 :)