Learn R Programming

PortfolioTesteR (version 0.1.4)

calculate_daily_values: Daily equity curve from positions and daily prices

Description

Carries portfolio positions (from a weekly or lower-frequency backtest) forward to daily dates, multiplies by daily prices, and combines with cash to produce a daily portfolio value series for monitoring and analytics.

Usage

calculate_daily_values(
  positions,
  daily_prices,
  strategy_dates,
  initial_capital,
  cash_values
)

Value

A list with components:

  • dates Daily dates within the strategy span.

  • portfolio_values Daily total portfolio value (positions + cash).

  • positions_value Daily mark-to-market of positions only.

  • cash Daily carried cash series.

Arguments

positions

A data.frame/data.table of portfolio positions with columns Date + symbols. Values should be the backtest's position inventory per symbol at each rebalance date (typically shares or notional units consistent with your backtest's accounting).

daily_prices

A data.frame/data.table of daily prices with columns Date + the same symbol set present in positions (at least the intersection).

strategy_dates

A Date vector of the backtest's decision/rebalance calendar (e.g., backtest_result$dates).

initial_capital

Numeric scalar. Starting cash used for days before the first position exists (typically backtest_result$initial_capital).

cash_values

Optional numeric vector of cash balances at the strategy dates (e.g., backtest_result$cash). If NULL, leading days are treated as all-cash (= initial_capital) and post-rebalance cash defaults to 0.

Examples

Run this code
# \donttest{
  # Minimal end-to-end example using bundled data and a simple weekly backtest
  library(PortfolioTesteR)
  data(sample_prices_weekly); data(sample_prices_daily)

  # Build a tiny strategy: momentum -> top-3 -> equal weights
  mom <- calc_momentum(sample_prices_weekly, lookback = 12)
  sel <- filter_top_n(mom, n = 3)
  W   <- weight_equally(sel)
  bt  <- run_backtest(sample_prices_weekly, W, name = "Demo")

  # Compute daily monitoring values from positions + cash
  vals <- calculate_daily_values(
    positions       = bt$positions,
    daily_prices    = sample_prices_daily,
    strategy_dates  = bt$dates,
    initial_capital = bt$initial_capital,
    cash_values     = bt$cash
  )

  # Quick sanity checks
  head(vals$dates)
  head(vals$portfolio_values)
# }

Run the code above in your browser using DataLab