Class: Array

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

Instance Method Summary collapse

Instance Method Details

#averageObject



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