Class: FinModeling::FamaFrench::EquityHistoricalData

Inherits:
Object
  • Object
show all
Defined in:
lib/finmodeling/fama_french_cost_of_equity.rb

Instance Method Summary collapse

Constructor Details

#initialize(company_ticker, num_days) ⇒ EquityHistoricalData

Returns a new instance of EquityHistoricalData.



56
57
58
59
60
61
62
# File 'lib/finmodeling/fama_french_cost_of_equity.rb', line 56

def initialize(company_ticker, num_days)
  daily_quotes = YahooFinance::get_HistoricalQuotes_days(URI::encode(company_ticker), num_days)
  @monthly_quotes = daily_quotes.group_by{ |x| x.date.gsub(/-[0-9][0-9]$/, "") }
                                .values
                                .map{ |x| x.sort{ |x,y| x.date <=> y.date }.first }
                                .sort{ |x,y| x.date <=> y.date }[1..-1]
end

Instance Method Details

#filter_by_date!(dates_to_keep) ⇒ Object



68
69
70
# File 'lib/finmodeling/fama_french_cost_of_equity.rb', line 68

def filter_by_date!(dates_to_keep)
  @monthly_quotes  = @monthly_quotes.select{ |x| dates_to_keep.include?(x.date.gsub(/-[0-9][0-9]$/, "").gsub(/-/, "")) }
end

#monthly_excess_returns(rf, dividends = []) ⇒ Object



81
82
83
84
85
86
87
88
89
# File 'lib/finmodeling/fama_french_cost_of_equity.rb', line 81

def monthly_excess_returns(rf, dividends=[])
  @monthly_quotes.each_cons(2)
                 .map { |pair| 
                        div_entry = dividends.find{ |d| d[:ex_eff_date].strftime("%Y-%m") == pair[1].date.gsub(/-[0-9][0-9]$/, "") }
                        dividend = div_entry ? div_entry[:cash_amt] : 0.0
                        (pair[1].adjClose - pair[0].adjClose + dividend) / pair[0].adjClose 
                      }
                 .zip(rf).map{ |pair| pair[0] - pair[1] }
end

#monthly_returns(dividends = []) ⇒ Object



72
73
74
75
76
77
78
79
# File 'lib/finmodeling/fama_french_cost_of_equity.rb', line 72

def monthly_returns(dividends=[])
   @monthly_quotes.each_cons(2)
                  .map { |pair| 
                         div_entry = dividends.find{ |d| d[:ex_eff_date].strftime("%Y-%m") == pair[1].date.gsub(/-[0-9][0-9]$/, "") }
                         dividend = div_entry ? div_entry[:cash_amt] : 0.0
                         (pair[1].adjClose - pair[0].adjClose + dividend) / pair[0].adjClose 
                       }
end

#year_and_month_stringsObject



64
65
66
# File 'lib/finmodeling/fama_french_cost_of_equity.rb', line 64

def year_and_month_strings
  @monthly_quotes.map{ |x| x.date.gsub(/-[0-9][0-9]$/, "").gsub(/-/, "") }
end