Λάδι Βιώσας

http://profile.hatena.ne.jp/kenkitii/

X営業日前の日付を求める ruby スクリプト

ある銘柄の株価の移動平均を求めたい場合、期間を指定して株価データを取得することが多いです。この時、たとえば、25日分の株価データが欲しいなんて思った場合、単純に25日前の日付を求めるのではなく、営業日ベースで日付の計算をする必要があります。

この営業日の計算、なんか何度も同じことやってる気がするので、忘れないようにダイアリーにメモをしておきます。

準備

祝日判定ライブラリの holiday_japan をインストールします。株価情報を弄りたい人は JpStock もインストールしましょう。

gem install holiday_japan
gem install jpstock

X営業日前の日付の計算

こんな感じで↓

require "holiday_japan"

class Date
  def business_days_before(i)
    date = self
    i.times.each do |j|
      date -= 1
      date -= 1 while (date.wday <= 0 || date.wday >= 6) or (date.national_holiday?) 
    end
    date
  end
end

東京電力の25日間の終値の平均

↑のコードを使ってこんな感じで↓

# -*- coding: utf-8 -*-
require "jpstock"
prices = JpStock.historical_prices(:code => "9501", :start_date => Date.today.business_days_before(24), :end_date => Date.today)
average = prices.inject(0) {|sum, price| sum + price.close} / prices.size.to_f

puts "東京電力の#{Date.today.business_days_before(24)}から#{Date.today}(#{prices.size}営業日間)の終値の平均 = #{average}"
# => 東京電力の2013-08-07から2013-09-10(25営業日間)の終値の平均 = 560.96