Class: Array
- Inherits:
-
Object
- Object
- Array
- Defined in:
- lib/pbyf.rb
Instance Method Summary collapse
- #average ⇒ Object
- #exp_moving_average(interval) ⇒ Object
- #macd(short, long) ⇒ Object
- #moving_average(interval) ⇒ Object
-
#pvma(interval = 20) ⇒ Object
measures diference between closing value and moving average.
Instance Method Details
#average ⇒ Object
139 140 141 |
# File 'lib/pbyf.rb', line 139 def average self.inject(:+)/(self.size.to_f) end |
#exp_moving_average(interval) ⇒ Object
125 126 127 128 129 130 131 132 133 134 135 136 137 |
# File 'lib/pbyf.rb', line 125 def exp_moving_average interval return self if interval == 1 a = self.dup.map{|i| i.to_f} result = [] result << a.moving_average(interval)[0] k = 2/(interval.to_f+1) (a.size-interval).times do |i| ema = ((a[i+interval]-result[i])*k + result[i]) result << ema end result end |
#macd(short, long) ⇒ Object
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/pbyf.rb', line 93 def macd short, long data = self raise 'Your historical data array is too short!' if (data.size < long) b = data.exp_moving_average(long) a = data.exp_moving_average(short) a.slice!(0, long-short) i=0 result = [] a.each do |ele| result << (ele-b[i]) i+=1 end result end |
#moving_average(interval) ⇒ Object
111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/pbyf.rb', line 111 def moving_average interval return self if interval == 1 a = self.dup.map{|i| i.to_f} result = [] i=0 while(i <= a.size-interval) data = a.slice(i,interval) result << data.average i+=1 end result end |
#pvma(interval = 20) ⇒ Object
measures diference between closing value and moving average. Defaults to 20 but use whatever you want
82 83 84 85 86 87 88 89 90 91 |
# File 'lib/pbyf.rb', line 82 def pvma interval=20 array = self result =[] mvgavg = self.moving_average(interval) @close.each_index do |i| result << (@close[i] - mvavg[i]) end result end |