Sha256: 1ec7535eb2b9a1e692e3b4f06f8eede52fb6c3f5575ba19bc6e6cee4dcb5e682

Contents?: true

Size: 1.47 KB

Versions: 7

Compression:

Stored size: 1.47 KB

Contents

# lib/sqa/strategy.rb

class SQA::Strategy
  attr_accessor :strategies

  def initialize
    @strategies = []
  end

  def add(a_strategy)
    raise BadParameterError unless [Class, Method].include? a_strategy.class

    a_proc  = if Class == a_strategy.class
                a_strategy.method(:trade)
              else
                a_strategy
              end

    @strategies << a_proc
  end

  def execute(v)
    result = []
    # TODO: Can do this in parallel ...
    @strategies.each { |signal| result << signal.call(v) }
    result
  end

  def auto_load(except: [:common], only: [])
    dir_path  = Pathname.new(__dir__) + "strategy"
    except    = Array(except).map{|f| f.to_s.downcase}
    only      = Array(only).map{|f| f.to_s.downcase}

    dir_path.children.each do |child|
      next unless ".rb" == child.extname.downcase

      basename = child.basename.to_s.split('.').first.downcase

      next if except.include? basename
      next if !only.empty?  && !only.include?(basename)

      print "loading #{basename} ... "
      load child
      puts "done"
    end

    nil
  end

  def available
    ObjectSpace.each_object(Class).select { |klass|
      klass.to_s.start_with?("SQA::Strategy::")
    }
  end
end

require_relative 'strategy/common'
require_relative 'strategy/consensus'
require_relative 'strategy/ema'
require_relative 'strategy/mp'
require_relative 'strategy/mr'
require_relative 'strategy/random'
require_relative 'strategy/rsi'
require_relative 'strategy/sma'

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
sqa-0.0.24 lib/sqa/strategy.rb
sqa-0.0.22 lib/sqa/strategy.rb
sqa-0.0.21 lib/sqa/strategy.rb
sqa-0.0.20 lib/sqa/strategy.rb
sqa-0.0.19 lib/sqa/strategy.rb
sqa-0.0.18 lib/sqa/strategy.rb
sqa-0.0.17 lib/sqa/strategy.rb