# End-to-End Workflow

    library(finlabR)

## 1. Load prices and compute returns

    prices <- get_example_prices()
    rets <- calc_returns(prices[, -1], method = "log")

## 2. Correlation analysis across assets

    cor_mat <- asset_correlation(rets)
    cor_mat[1:3, 1:3]
    #>              EQ1          EQ2         EQ3
    #> EQ1  1.000000000  0.006707895 -0.02176708
    #> EQ2  0.006707895  1.000000000 -0.01836227
    #> EQ3 -0.021767078 -0.018362273  1.00000000

## 3. Mean-variance optimization

    ef <- mvo_efficient_frontier(rets, n = 25, rf = 0.02)
    max_sharpe <- mvo_max_sharpe(rets, rf = 0.02)
    min_var <- mvo_min_variance(rets)

## 4. CVaR and risk parity portfolios

    cvar <- cvar_minimize(rets, alpha = 0.95)
    rp <- risk_parity_weights(stats::cov(rets))

## 5. Regime clustering and asset clustering

    regimes <- market_regime_kmeans(rets, k = 3, window = 60)
    clusters <- asset_clustering(rets, method = "kmeans", reduce = "pca", k = 3)

## 6. Risk analytics

    var_cvar(rets, alpha = 0.95)
    #>     asset         VaR        CVaR
    #> 1     EQ1 0.018348805 0.023653700
    #> 2     EQ2 0.015278103 0.019074063
    #> 3     EQ3 0.024202496 0.029746296
    #> 4    CMD1 0.025586040 0.032379499
    #> 5 CRYPTO1 0.086507269 0.107429605
    #> 6   BOND1 0.005233202 0.006338586

## 7. Monte Carlo and option pricing

    paths <- simulate_gbm_paths(100, 0.08, 0.2, time_horizon = 1, n_steps = 252, n_sims = 500)
    price_option_mc(100, 100, 0.02, 0.2, time_to_maturity = 1, n_sims = 10000)
    #> $price
    #> [1] 9.065308
    #>
    #> $std_error
    #> [1] 0.1414864
    price_option_binomial(100, 100, 0.02, 0.2, time_to_maturity = 1, n_steps = 200, american = TRUE)
    #> [1] 8.906137