「日本株式日次リターンデータ」を月次リターンに変換する
Rubyの勉強をしていて、無性に Array#reduce が使いたくなったので、 日経メディアマーケティング株式会社が販売している「日本株式日次リターンデータ」を月次リターンに変換するスクリプトを書いてみました。
標準入力からデータを読み込んで、日経会社コード別の月次リターンと売買高を計算します。毎日の日次リターンを単純に集計しているだけの単純なスクリプトです。
# -*- coding: utf-8 -*- # # 標準入力から NPM データを読み込み、 # 月次収益率と月間取引量を表示する # 日経会社コードを集計の基準にする ret_vol = Hash.new{|hash,key| hash[key]=[]} prev_nkcode = "0000000" def print_monthly_returns(ret_vol,nkcode) ret_vol.keys.sort.each{|date| retvol = ret_vol[date].transpose returns = (retvol[0].map{|x| 1 + x/100.0}.reduce(1,:*)-1)*100 volume = retvol[1].reduce(0,:+) printf("%s,%s,%.2f,%d\n",nkcode,date,returns,volume) } end while line=gets do line.chomp! nkcode, date, ret, vol = line.split.values_at(0,1,20,22) ret = ret.to_f vol = vol.to_i date = date[0,6] if(nkcode != prev_nkcode) print_monthly_returns(ret_vol,prev_nkcode) ret_vol = Hash.new{|hash,key| hash[key]=[]} prev_nkcode = nkcode else ret_vol[date] << [ret,vol] end end print_monthly_returns(ret_vol,prev_nkcode)