ヤフー ファイナンス API を使用して、入力された株式数の過去の終値データを収集し、30 日間のデータの単純移動平均 (SMA) を計算するプログラムに取り組んでいます。これまでのところ、次のものがあります。
require 'rubygems'
require 'yahoofinance'
array = []
while line = gets
break if line.chomp =~ /N/ #exit when 'N' is entered
array << line.chomp
end
puts "Values: #{array.join(',')}" #joining all the elements with a comma
array.each do |s|
print "\n______\n"
puts s
YahooFinance::get_HistoricalQuotes( s,
Date.parse( '2012-10-06' ),
Date.today() ) do |hq|
puts "#{hq.close}"
end
end
このコードは、指定された範囲の株式の終値を示しています。2 つの質問があります。
現在、
hq.close
すべての株式の値を保持しています。これらの値を配列に入れ、それを計算して各株式データの SMA を計算できるようにするにはどうすればよいですか?私はこのようなことをしてみました:
"#{hq.close}" my_val = [hq.close] puts my_val
しかし、これは の最初の在庫の値のみを示します
my_val
。ここにループを配置する必要があることはわかっています。入れてみたwhile(!hq.close.emply?) my_val = [hq.close] puts my_val end
しかし、これは私にエラーを与えます:
C:/Users/Muktak/workspace/RubySample/sample_program.rb:23:in block (2 levels) in <main>': undefined methodemplty?' for 19.52:Float (NoMethodError) from C:/Ruby193/lib/ruby/gems/1.9.1/gems/yahoofinance-1.2.2/lib/yahoofinance.rb:491:in block in get_HistoricalQuotes' from C:/Ruby193/lib/ruby/gems/1.9.1/gems/yahoofinance-1.2.2/lib/yahoofinance.rb:456:inblock in get_historical_quotes' from C:/Ruby193/lib/ruby/gems/1.9.1/gems/yahoofinance-1.2.2/lib/yahoofinance.rb:456:in each' from C:/Ruby193/lib/ruby/gems/1.9.1/gems/yahoofinance-1.2.2/lib/yahoofinance.rb:456:inget_historical_quotes' from C:/Ruby193/lib/ruby/gems/1.9.1/gems/yahoofinance-1.2.2/lib/yahoofinance.rb:489:in get_HistoricalQuotes' from C:/Users/Muktak/workspace/RubySample/sample_program.rb:19:inblock in ' from C:/Users/Muktak/workspace/RubySample/sample_program.rb:13:in each' from C:/Users/Muktak/workspace/RubySample/sample_program.rb:13:in' Values: FB,GOOG
RubyでSMAを計算するにはどうすればよいですか?