Class: FinModeling::FamaFrench::MarketHistoricalData
- Inherits:
-
Object
- Object
- FinModeling::FamaFrench::MarketHistoricalData
- Defined in:
- lib/finmodeling/fama_french_cost_of_equity.rb
Constant Summary collapse
- URL =
"http://mba.tuck.dartmouth.edu/pages/faculty/ken.french/ftp/F-F_Research_Data_Factors.zip"
- DATA_PATH =
File.join(FinModeling::BASE_PATH, "fama-french/")
- ZIP_FILE =
File.join(DATA_PATH, "F-F_Research_Data_Factors.zip")
- TXT_FILE =
File.join(DATA_PATH, "F-F_Research_Data_Factors.txt")
- CSV_FILE =
File.join(DATA_PATH, "F-F_Research_Data_Factors.csv")
Class Method Summary collapse
Instance Method Summary collapse
- #filter_by_date!(dates_to_keep) ⇒ Object
- #hml ⇒ Object
-
#initialize ⇒ MarketHistoricalData
constructor
A new instance of MarketHistoricalData.
- #rf ⇒ Object
-
#rm_rf ⇒ Object
mkt return - risk free rate.
- #smb ⇒ Object
- #year_and_month_strings ⇒ Object
Constructor Details
#initialize ⇒ MarketHistoricalData
Returns a new instance of MarketHistoricalData.
24 25 26 27 28 |
# File 'lib/finmodeling/fama_french_cost_of_equity.rb', line 24 def initialize MarketHistoricalData.download_data! if !File.exists?(CSV_FILE) @rows = CSV.read(CSV_FILE, headers: true) raise RuntimeError.new("couldn't read fama-french data. try deleting #{CSV_FILE} and re-running") if @rows.length < 10 end |
Class Method Details
.download_data! ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/finmodeling/fama_french_cost_of_equity.rb', line 10 def self.download_data! FileUtils.mkdir_p(DATA_PATH) if !File.exists?(DATA_PATH) `rm #{ZIP_FILE} #{TXT_FILE} #{CSV_FILE} > /dev/null 2>&1` `curl -s -o "#{ZIP_FILE}" "#{URL}"` prev_pwd=`pwd` ` cd #{DATA_PATH}; unzip -q #{ZIP_FILE}; rm #{ZIP_FILE}; echo "date,RmRf,SMB,HML,Rf" > #{CSV_FILE}; grep '^[0-9][0-9][0-9][0-9][0-9][0-9]' #{TXT_FILE} | sed -e 's/ */,/g' | sed -e 's/ //g' >> #{CSV_FILE}; rm #{TXT_FILE}; cd #{prev_pwd} ` end |
Instance Method Details
#filter_by_date!(dates_to_keep) ⇒ Object
34 35 36 |
# File 'lib/finmodeling/fama_french_cost_of_equity.rb', line 34 def filter_by_date!(dates_to_keep) @rows = @rows.select{ |x| dates_to_keep.include?(x["date"]) } end |
#hml ⇒ Object
46 47 48 |
# File 'lib/finmodeling/fama_french_cost_of_equity.rb', line 46 def hml @rows.map{ |x| x["HML"].to_f / 100.0 } end |
#rf ⇒ Object
50 51 52 |
# File 'lib/finmodeling/fama_french_cost_of_equity.rb', line 50 def rf @rows.map{ |x| x["Rf"].to_f / 100.0 } end |
#rm_rf ⇒ Object
mkt return - risk free rate
38 39 40 |
# File 'lib/finmodeling/fama_french_cost_of_equity.rb', line 38 def rm_rf # mkt return - risk free rate @rows.map{ |x| x["RmRf"].to_f / 100.0 } end |
#smb ⇒ Object
42 43 44 |
# File 'lib/finmodeling/fama_french_cost_of_equity.rb', line 42 def smb @rows.map{ |x| x["SMB"].to_f / 100.0 } end |
#year_and_month_strings ⇒ Object
30 31 32 |
# File 'lib/finmodeling/fama_french_cost_of_equity.rb', line 30 def year_and_month_strings @rows.map{ |x| x["date"] } end |