Onboarding as a wealth manager would run it: eight questions scored on two separate dimensions — willingness (attitude to risk) and capacity (financial ability to absorb losses). The lower of the two governs, and the result is translated into the coefficient of risk aversion A in the mean-variance utility U = E[r] − ½·A·σ² that drives the allocation engine.
Risk Questionnaire
Pre-filled with a sample mid-career salaried client — change any answer and every module updates.
Risk Profile
Suitability Notes
Recommended Allocation
Method — how answers become A
Each answer scores 0–3. Willingness = Q1–Q4 total ÷ 12; capacity = Q5–Q8 total ÷ 12. The governing score
is s = min(willingness, capacity), the standard IPS rule that the more restrictive dimension wins.
The mapping is log-linear because the optimal risky share y* = (E[rP] − rf) / (A·σP²) is inversely proportional to A, so equal score steps give proportional steps in risky exposure. The 1.5–12 range is a design calibration (textbook examples typically use A ≈ 2–4 for an average investor), not an empirically estimated scale.
Full transparency on what this platform is built from: every instrument in the universe, the 12 stocks in the Indian equity basket, their latest closing prices, returns, ranges, risk and correlations — all real market data, refreshed every weekday evening by the pipeline. Nothing on this page is simulated.
Asset Universe
The five sleeves the optimizer allocates across, plus the benchmark, currency and risk-free rate the analytics depend on.
Relative Performance — Rebased to 100 (INR)
The 12-Stock Indian Equity Basket
Equal-weighted (8.33% each) and rebalanced monthly, chosen to span nine sectors of the Nifty 50. Pick a stock in the chart card below (or click any row); click a column header to sort.
Constituents — Latest Close & Statistics
Prices are dividend- and split-adjusted closes from Yahoo Finance. Beta and correlation are vs the Nifty 50 over the last year of daily returns. Market cap, P/E and dividend yield come from the latest quote summary and may be blank if unavailable.
Stock Chart
Candlestick (OHLC) — daily candles
Basket Correlation Matrix (Weekly)
Sector Composition
1-Year Return by Stock
Rolling 52-Week Correlations Between Sleeves
Diversification is not constant: correlations drift and often rise in sell-offs. The optimizer uses the full-window average.
Macro & Rates
Risk-Free Rate by Calendar Year
Download the Data
Everything the platform computes from is downloadable — verify any number yourself in Excel or Python.
Data dictionary & sourcing
- Source. Yahoo Finance via the open-source
yfinancelibrary, called server-side by a GitHub Actions job — no API keys, and your browser makes no market-data calls. - Refresh. Every weekday (Monday–Friday) at 5:30 PM IST, two hours after the NSE close. US funds show their most recent completed session, since the US market closes after the run; a session still in progress is never recorded as a close. Each instrument shows its own last close date; NSE and US markets close on different days and holidays. GitHub sometimes starts scheduled jobs a few hours late.
- Prices daily, estimation weekly. Prices, returns, VaR and charts use the latest daily closes. The optimizer's expected returns and covariances use completed Friday-to-Friday weeks only, so the efficient frontier updates once a week rather than jittering day to day.
- Prices. Dividend- and split-adjusted closes. Bad ticks (a price that collapses and snaps back within days) are removed automatically and listed in the footer.
- Returns. 1W/1M/3M/6M/1Y are simple returns versus the close on or before that many calendar days ago; YTD is versus the last close of the previous year; 3Y is annualized.
- Volatility. Standard deviation of the last year's daily returns × √252. Beta = cov(stock, Nifty) / var(Nifty) on the same daily returns.
- Basket index. Equal-weight, monthly-rebalanced index of the 12 stocks, starting at 1.00 in January 2005. USD sleeves are shown in USD on their cards and converted to INR everywhere else.
Strategic asset allocation across five sleeves in INR. The pipeline solves the long-only mean-variance problem (SciPy SLSQP) along the full N-asset efficient frontier, finds the Minimum Variance Portfolio and the tangency Optimal Risky Portfolio, and the browser places the client on the Capital Allocation Line using their risk aversion A.
Engine Settings
Key Portfolios
Efficient Frontier & Capital Allocation Line
x-axis: annualized volatility · y-axis: annualized expected return (INR). Hover any point for its weights.
Portfolio Weights
Frontier Transition Map
How the optimal mix shifts as you move along the frontier from MVP to maximum return.
Estimation Inputs
Method — optimization, shrinkage and the complete portfolio
Inputs. Weekly (Friday-close) INR returns over the common window; USD sleeves converted at USDINR, unhedged. Weekly sampling avoids the non-synchronous close problem (NSE closes ~10:00 UTC, US ~20:00 UTC), which biases daily cross-market correlations toward zero. Means and covariances are annualized ×52.
Policy model. Sample means are shrunk with the Bayes-Stein estimator (Jorion, 1986) toward the mean of the global minimum-variance portfolio, and every sleeve is bounded to a 5–50% policy range, as an IPS would.
Textbook model. Raw sample means, long-only, weights in [0, 1] — the classroom formulation, shown for contrast. Its corner solutions illustrate why practitioners shrink estimates and impose ranges.
Frontier. For 120 target returns between the MVP and the maximum-return portfolio the pipeline
solves min w′Σw s.t. w′μ = target, Σw = 1, bounds. The ORP maximizes
(w′μ − rf) / √(w′Σw) (12 random restarts). Validation gates fail the pipeline if weights
do not sum to 1, the frontier is non-concave, or any grid point beats the ORP's Sharpe ratio.
Complete portfolio. y* = (E[rP] − rf) / (A·σP²). If y* ≤ 1 the client
lends at rf. If y* > 1 and borrowing is off, the client stays fully invested and moves up the frontier to
the point maximizing U = E[r] − ½Aσ². With borrowing at rB = rf + spread, the efficient set is
the kinked CAL: lending line → frontier → borrowing line tangent from rB (leverage capped at 1.5×).
Risk-free rate. Trailing 12-month return of a growth-option liquid-fund NAV, which tracks 91-day T-bill yields.
The FRM lens on the portfolio built on the Allocation tab: Value-at-Risk and Expected Shortfall (historical simulation and parametric-normal), a rolling VaR backtest with the Kupiec test, drawdowns, risk contributions, the correlation structure, and historical stress scenarios replayed on the current allocation.
Risk Parameters
Pipeline Parity Check
The browser recomputes the ORP's risk metrics from the shipped daily returns and compares them with the Python pipeline's reference values.
Return Distribution
Risk Contribution vs Weight
Share of portfolio variance each sleeve contributes: wi(Σw)i / w′Σw.
VaR Backtest — Rolling 250-Day Historical VaR
Each day's 1-day VaR is estimated from the previous 250 sessions only (no look-ahead); a breach is a realized loss larger than that VaR.
Drawdown (Underwater) Chart
Correlation Heatmap
Historical Stress Scenarios
Each sleeve's actual return over the crisis window, applied to today's weights. Badges show whether a sleeve's input is the live vehicle, a documented proxy, or an explicit assumption.
Custom Hypothetical Shock
Set an instantaneous shock per sleeve (risk-free leg unchanged) to see the impact on the selected portfolio.
Method — VaR, Expected Shortfall, backtesting and stress
Historical simulation. Today's weights applied to every daily return vector in the window (hypothetical P&L). h-day VaR uses overlapping compounded h-day returns. VaR = −q1−c; ES/CVaR = −mean of returns at or below that quantile.
Kupiec proportion-of-failures test. With T days and x breaches at expected rate p = 1−c: LR = −2 ln[(1−p)T−xpx] + 2 ln[(1−x/T)T−x(x/T)x] ~ χ²(1). A small p-value rejects the VaR model. The Basel traffic light is reported on the last 250 days at 99%: green ≤ 4 breaches, yellow 5–9, red ≥ 10.
Stress scenarios. COVID-19 and the 2022 rate shock use the live vehicles. For the 2008 window several vehicles did not exist yet, so documented proxies are used (gold futures × USDINR for Indian gold, ACWI for global equity, BND for global bonds, all converted to INR). No investable Indian bond series exists for 2008, so the Indian-debt shock is an explicit 0% assumption. A leveraged portfolio's borrowing leg is charged the cash return plus the borrowing spread over the window.
Caveat. Daily returns mix markets that close at different times (NSE vs US), which understates daily diversification effects; the weekly correlation matrix is the better guide to true co-movement.
How the allocation would have performed over the data window, held at target weights with monthly rebalancing: risk-adjusted ratios benchmarked against the Nifty 50, and a Brinson-Fachler attribution that splits active return against the strategic policy benchmark into allocation, selection and interaction effects.
Settings
Read With Care
- In-sample. ORP weights were estimated on this same window, so the backtest flatters the optimized portfolios — especially alpha.
- Survivorship. The Indian equity basket was picked from today's large caps, which biases its history — and the selection effect — upward.
- Benchmark. Nifty 50 BeES (incl. dividends reinvested by the fund) stands in for the Nifty 50 total-return index.
Risk-Adjusted Performance
Daily data; rf = liquid-fund NAV return each day. Beta, Treynor, Jensen's α, tracking error and information ratio are measured against the Nifty 50.
Growth of ₹10 Lakh
Rolling 1-Year Sharpe Ratio
Brinson-Fachler Attribution vs Policy Benchmark
Method — ratios and attribution
All annualized from daily returns (means ×252, deviations ×√252). Downside deviation uses the risk-free rate as the target: √(mean(min(Rp − Rf, 0)²)). β is the slope of portfolio excess returns on Nifty 50 excess returns.
Brinson-Fachler (per month). With portfolio weights wp,i, policy weights wb,i, sleeve returns Rp,i and segment benchmark returns Rb,i:
The Indian equity segment benchmark is the Nifty 50; every other sleeve is its own benchmark (passive ETF), and the cash segment is the liquid fund — so selection arises only from the stock basket and, if leveraged, from financing cost. Monthly effects are linked with Carino (1999) log-smoothing coefficients so they sum exactly to the cumulative active return.
Target weights do not stay put. Starting from the client's allocation on the first day of the window, this simulator lets weights drift with real daily prices and compares buy-and-hold, tolerance-band rebalancing (trade back to target when any sleeve drifts beyond the band) and calendar rebalancing, net of transaction costs.
Rebalancing Policy
Strategy Comparison
Portfolio Value
Weight Drift
Largest Deviation From Target
Method — drift, triggers and costs
Each sleeve's holding compounds at its own daily INR return; the cash leg earns the liquid-fund return (or pays it plus the borrowing spread if levered). On each monitoring date the band strategy checks every sleeve: absolute bands trigger when |w − w*| exceeds the band in percentage points; relative bands when |w − w*| / w* exceeds the band in percent. When triggered, the whole portfolio is traded back to target.
Costs proxy brokerage, exchange charges, STT and bid-ask spread on ETFs and large caps. Capital-gains tax on rebalancing sales is not modeled — in a taxable Indian account it would further favour wider bands or rebalancing with new cash flows.
Goals-based planning: given a lump sum, a monthly SIP with an annual step-up, and a target in today's rupees, the browser simulates 5,000 monthly return paths from the client portfolio's expected return and volatility and reports the probability of reaching the goal, the range of outcomes, and the SIP needed to reach it with a chosen confidence.
Goal
Contributions
Return Assumptions
Projected Wealth — Fan Chart
Probability of Success by Year
Share of paths at or above the inflation-adjusted target if the goal fell due in that year.
What It Takes
Method — the simulation
Annual arithmetic expected return μ and volatility σ default to the client's complete portfolio on the Allocation tab (ex-ante, policy or textbook model as selected). They are converted to lognormal parameters by moment matching so that the simulated simple returns have exactly that mean and variance:
Each month the SIP is added at the start and the balance compounds by ert; the SIP steps up once a year. The target is inflated to nominal rupees at the chosen inflation rate. Because terminal wealth on each path is linear in the SIP, WT = ai + SIP·bi, the SIP that reaches the goal with confidence q is solved exactly as the q-quantile of per-path break-even SIPs (G − ai)/bi. Returns are i.i.d. — no regime shifts, fat tails or sequence-of-return clustering — and the 5,000 paths use a seeded PRNG so results are reproducible.