Class: TechnicalAnalysis::Vpt

Inherits:
Indicator show all
Defined in:
lib/technical_analysis/indicators/vpt.rb

Overview

Volume-price Trend

Class Method Summary collapse

Methods inherited from Indicator

find, roster

Class Method Details

.calculate(data) ⇒ Array<VptValue>

Calculates the volume-price trend (VPT) for the data en.wikipedia.org/wiki/Volume%E2%80%93price_trend

Parameters:

  • data (Array)

    Array of hashes with keys (:date_time, :close, :volume)

Returns:

  • (Array<VptValue>)

    An array of VptValue instances



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/technical_analysis/indicators/vpt.rb', line 52

def self.calculate(data)
  Validation.validate_numeric_data(data, :close, :volume)
  Validation.validate_length(data, min_data_size({}))
  Validation.validate_date_time_key(data)

  data = data.sort_by { |row| row[:date_time] }

  output = []
  prev_price = data.shift
  prev_pvt = 0

  data.each do |v|
    pvt = prev_pvt + (((v[:close] - prev_price[:close]) / prev_price[:close]) * v[:volume])
    output << VptValue.new(date_time: v[:date_time], vpt: pvt)
    prev_price = v
    prev_pvt = pvt
  end

  output.sort_by(&:date_time).reverse
end

.indicator_nameString

Returns the name of the technical indicator

Returns:

  • (String)

    A string of the name of the technical indicator



15
16
17
# File 'lib/technical_analysis/indicators/vpt.rb', line 15

def self.indicator_name
  "Volume-price Trend"
end

.indicator_symbolString

Returns the symbol of the technical indicator

Returns:

  • (String)

    A string of the symbol of the technical indicator



8
9
10
# File 'lib/technical_analysis/indicators/vpt.rb', line 8

def self.indicator_symbol
  "vpt"
end

.min_data_size(**params) ⇒ Integer

Calculates the minimum number of observations needed to calculate the technical indicator

Parameters:

  • options (Hash)

    The options for the technical indicator

Returns:

  • (Integer)

    Returns the minimum number of observations needed to calculate the technical indicator based on the options provided



42
43
44
# File 'lib/technical_analysis/indicators/vpt.rb', line 42

def self.min_data_size(**params)
  2
end

.valid_optionsArray

Returns an array of valid keys for options for this technical indicator

Returns:

  • (Array)

    An array of keys as symbols for valid options for this technical indicator



22
23
24
# File 'lib/technical_analysis/indicators/vpt.rb', line 22

def self.valid_options
  []
end

.validate_options(options) ⇒ Boolean

Validates the provided options for this technical indicator

Parameters:

  • options (Hash)

    The options for the technical indicator to be validated

Returns:

  • (Boolean)

    Returns true if options are valid or raises a ValidationError if they’re not



31
32
33
34
# File 'lib/technical_analysis/indicators/vpt.rb', line 31

def self.validate_options(options)
  return true if options == {}
  raise Validation::ValidationError.new "This indicator doesn't accept any options."
end