2025-04-14 11:40:34 -04:00
|
|
|
class Holding::ForwardCalculator < Holding::BaseCalculator
|
2025-03-07 17:35:55 -05:00
|
|
|
private
|
|
|
|
def portfolio_cache
|
2025-04-14 11:40:34 -04:00
|
|
|
@portfolio_cache ||= Holding::PortfolioCache.new(account)
|
2025-03-07 17:35:55 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def calculate_holdings
|
|
|
|
current_portfolio = generate_starting_portfolio
|
|
|
|
next_portfolio = {}
|
|
|
|
holdings = []
|
|
|
|
|
|
|
|
account.start_date.upto(Date.current).each do |date|
|
|
|
|
trades = portfolio_cache.get_trades(date: date)
|
|
|
|
next_portfolio = transform_portfolio(current_portfolio, trades, direction: :forward)
|
|
|
|
holdings += build_holdings(next_portfolio, date)
|
|
|
|
current_portfolio = next_portfolio
|
|
|
|
end
|
|
|
|
|
|
|
|
holdings
|
|
|
|
end
|
|
|
|
end
|