Skip to contents

These helpers reopen compact walk-forward evidence from the experiment store without recomputing, rerunning, or mutating stored artifacts.

Usage

ledgr_walk_forward_open(snapshot, session_id)

ledgr_walk_forward_scores(snapshot, session_id)

ledgr_walk_forward_folds(snapshot, session_id)

Arguments

snapshot

A sealed ledgr_snapshot locating the experiment store.

session_id

Walk-forward session identifier.

Value

ledgr_walk_forward_open() returns a ledgr_walk_forward_results list. Reopened sessions do not rehydrate live backtest objects in test_runs; that field contains linked test run_id strings. The reopened object includes the same programmatic degradation table fields used by print. ledgr_walk_forward_scores() and ledgr_walk_forward_folds() return tibbles. Score rows derive stop_reason, affected_instrument_ids, and the valuation flags (valuation_state, frozen_instrument_sessions, max_frozen_equity_weight, frozen_at_end_value, assumed_terminal_outcomes) from completion_json, and print reports attempted, done, incomplete, and failed counts per window.

Examples

bars <- ledgr_sim_bars(n_instruments = 2, n_days = 60, seed = 1)
snapshot <- ledgr_snapshot_from_df(bars, db_path = tempfile(fileext = ".duckdb"))
strategy <- function(ctx, params) {
  targets <- ctx$flat()
  targets[] <- params$qty
  targets
}
exp <- ledgr_experiment(snapshot, strategy, cost_model = ledgr_cost_zero())
grid <- data.frame(qty = c(1, 2))
folds <- ledgr_folds_rolling(
  start = min(bars$ts_utc),
  end = max(bars$ts_utc),
  train_window = "5 weeks",
  test_window = "3 weeks",
  step = "3 weeks"
)
wf <- ledgr_walk_forward(
  exp,
  grid = grid,
  folds = folds,
  selection_rule = ledgr_rule_argmax("sharpe_ratio"),
  seed = 1L
)

reopened <- ledgr_walk_forward_open(snapshot, wf$session_id)
reopened$status
#> [1] "DONE"
ledgr_walk_forward_scores(snapshot, wf$session_id)
#> # A tibble: 54 × 28
#>    session_id         fold_id fold_seq candidate_key candidate_label params_hash
#>    <chr>              <chr>      <int> <chr>         <chr>           <chr>      
#>  1 adefd46eead1c9ec8… 22857d…        1 822c7e60f5db… wf_adefd46eead… 830c3a62eb…
#>  2 adefd46eead1c9ec8… 22857d…        1 822c7e60f5db… wf_adefd46eead… 830c3a62eb…
#>  3 adefd46eead1c9ec8… 22857d…        1 822c7e60f5db… wf_adefd46eead… 830c3a62eb…
#>  4 adefd46eead1c9ec8… 22857d…        1 822c7e60f5db… wf_adefd46eead… 830c3a62eb…
#>  5 adefd46eead1c9ec8… 22857d…        1 822c7e60f5db… wf_adefd46eead… 830c3a62eb…
#>  6 adefd46eead1c9ec8… 22857d…        1 822c7e60f5db… wf_adefd46eead… 830c3a62eb…
#>  7 adefd46eead1c9ec8… 22857d…        1 822c7e60f5db… wf_adefd46eead… 830c3a62eb…
#>  8 adefd46eead1c9ec8… 22857d…        1 822c7e60f5db… wf_adefd46eead… 830c3a62eb…
#>  9 adefd46eead1c9ec8… 22857d…        1 822c7e60f5db… wf_adefd46eead… 830c3a62eb…
#> 10 adefd46eead1c9ec8… 22857d…        1 93642065f8b6… strategy_eeb75… eeb75fd8d6…
#> # ℹ 44 more rows
#> # ℹ 22 more variables: feature_params_hash <chr>, feature_set_hash <chr>,
#> #   alias_map_hash <chr>, metric_context_hash <chr>, cost_model_hash <chr>,
#> #   risk_chain_hash <chr>, window <chr>, metric_name <chr>, metric_value <dbl>,
#> #   n_trades <int>, status <chr>, completion_json <chr>, stop_reason <chr>,
#> #   affected_instrument_ids <list>, valuation_state <chr>,
#> #   frozen_instrument_sessions <int>, max_frozen_equity_weight <dbl>, …
ledgr_walk_forward_folds(snapshot, wf$session_id)
#> # A tibble: 2 × 16
#>   session_id     fold_id fold_seq scheme train_start_utc     train_end_utc      
#>   <chr>          <chr>      <int> <chr>  <dttm>              <dttm>             
#> 1 adefd46eead1c… 22857d…        1 rolli… 2018-01-01 00:00:00 2018-02-04 23:59:59
#> 2 adefd46eead1c… 25be31…        2 rolli… 2018-01-22 00:00:00 2018-02-25 23:59:59
#> # ℹ 10 more variables: test_start_utc <dttm>, test_end_utc <dttm>,
#> #   train_scoring_start_utc <dttm>, test_scoring_start_utc <dttm>,
#> #   opening_state_policy <chr>, selected_candidate_key <chr>,
#> #   selected_at_utc <dttm>, test_run_id <chr>, status <chr>,
#> #   selection_source <chr>

ledgr_snapshot_close(snapshot)