Class: FinModeling::FamaFrench::MarketHistoricalData

Inherits:
Object
  • Object
show all
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

Constructor Details

#initializeMarketHistoricalData

Returns a new instance of MarketHistoricalData.

Raises:

  • (RuntimeError)


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

#hmlObject



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

#rfObject



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_rfObject

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

#smbObject



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_stringsObject



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