Class: TechnicalAnalysis::Ema
- Defined in:
- lib/technical_analysis/indicators/ema.rb
Overview
Exponential Moving Average
Class Method Summary collapse
-
.calculate(data, period: 30, price_key: :value, date_time_key: :date_time) ⇒ Array<EmaValue>
Calculates the exponential moving average (EMA) for the data over the given period en.wikipedia.org/wiki/Moving_average#Exponential_moving_average.
-
.indicator_name ⇒ String
Returns the name of the technical indicator.
-
.indicator_symbol ⇒ String
Returns the symbol of the technical indicator.
-
.min_data_size(period: 30, **params) ⇒ Integer
Calculates the minimum number of observations needed to calculate the technical indicator.
-
.valid_options ⇒ Array
Returns an array of valid keys for options for this technical indicator.
-
.validate_options(options) ⇒ Boolean
Validates the provided options for this technical indicator.
Methods inherited from Indicator
Class Method Details
.calculate(data, period: 30, price_key: :value, date_time_key: :date_time) ⇒ Array<EmaValue>
Calculates the exponential moving average (EMA) for the data over the given period en.wikipedia.org/wiki/Moving_average#Exponential_moving_average
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/technical_analysis/indicators/ema.rb', line 54 def self.calculate(data, period: 30, price_key: :value, date_time_key: :date_time) period = period.to_i price_key = price_key.to_sym date_time_key = date_time_key.to_sym Validation.validate_numeric_data(data, price_key) Validation.validate_length(data, min_data_size(period: period)) Validation.validate_date_time_key(data, date_time_key) data = data.sort_by { |row| row[date_time_key] } output = [] period_values = [] previous_ema = nil data.each do |v| period_values << v[price_key] if period_values.size == period ema = StockCalculation.ema(v[price_key], period_values, period, previous_ema) previous_ema = ema output << EmaValue.new(date_time: v[date_time_key], ema: ema) period_values.shift end end output.sort_by(&:date_time).reverse end |
.indicator_name ⇒ String
Returns the name of the technical indicator
15 16 17 |
# File 'lib/technical_analysis/indicators/ema.rb', line 15 def self.indicator_name "Exponential Moving Average" end |
.indicator_symbol ⇒ String
Returns the symbol of the technical indicator
8 9 10 |
# File 'lib/technical_analysis/indicators/ema.rb', line 8 def self.indicator_symbol "ema" end |
.min_data_size(period: 30, **params) ⇒ Integer
Calculates the minimum number of observations needed to calculate the technical indicator
41 42 43 |
# File 'lib/technical_analysis/indicators/ema.rb', line 41 def self.min_data_size(period: 30, **params) period.to_i end |
.valid_options ⇒ Array
Returns an array of valid keys for options for this technical indicator
22 23 24 |
# File 'lib/technical_analysis/indicators/ema.rb', line 22 def self. %i(period price_key date_time_key) end |
.validate_options(options) ⇒ Boolean
Validates the provided options for this technical indicator
31 32 33 |
# File 'lib/technical_analysis/indicators/ema.rb', line 31 def self.() Validation.(, ) end |