Sha256: 3e635c1ca3376f74d4dc50053a7d9962bdaaff60b2b451b1fcec610d84351dfe

Contents?: true

Size: 1.37 KB

Versions: 2

Compression:

Stored size: 1.37 KB

Contents

require 'csv'
require 'daru'
require 'tmpdir'
require "yquotes/version"
require "yquotes/yahoo"

module YQuotes

	class Client

		def initialize
			@yahoo_client = Yahoo.new
		end

		# get_quote: returns Daru::DataFrame of the quote with volume and close
		def get_quote(ticker, args = {})

			if args.is_a? Hash
				start_date = args[:start_date] if args[:start_date]
				start_date ||= args[:s] if args[:s]

				end_date = args[:end_date] if args[:end_date]
				end_date ||= args[:e] if args[:e]

				period = args[:period] if args[:period]
				period ||= args[:p] if args[:p]
			end

			csv = @yahoo_client.get_csv(ticker, start_date, end_date, period)
			create_from_csv(csv)
		end

		alias_method :historical_data, :get_quote
		alias_method :historical_quote, :get_quote

		private

		def create_from_csv(data)

			file_path = Dir.tmpdir() + "/#{Time.now.to_i}"

			CSV.open(file_path, 'w') do |out|
				data.each do |row|
					out << row
				end
			end

			df = nil

			df = Daru::DataFrame.from_csv(file_path, :converters => :numeric)
			File.delete(file_path) if File.exists?(file_path)

			#sort from earlier to latest
			df = df.sort ['Date']

			# strip columns and create index
			df.index = Daru::Index.new(df['Date'].to_a)
			df = df['Volume', 'Adj Close']
			df.rename_vectors 'Volume' => :volume, 'Adj Close' => :close

			d = df.filter(:row) { |row| row[:volume] > 0}
		end

	end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
yquotes-0.1.7 lib/yquotes.rb
yquotes-0.1.5 lib/yquotes.rb