You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
tags$li(tags$b("Additive daily shock:"), " the same fixed ", tags$b("basis-point"), " amount is added to each selected holding’s ",
85
85
"daily simple return on every day in your analysis sample; the portfolio is recomputed with fixed weights. ",
86
-
"This is a mechanical sensitivity tool, not a model of how markets behave under stress.")
86
+
"This is a mechanical sensitivity tool, not a model of how markets behave under stress."),
87
+
tags$li(tags$b("Bootstrap fan:"), " independent resamples of the portfolio’s realized daily returns (same fixed weights) are compounded forward for a chosen horizon. ",
88
+
"Bands show simulation percentiles; this is ", tags$b("not"), " a structural forecast and ignores drift, autocorrelation, and regime change.")
89
+
)
90
+
),
91
+
92
+
wellPanel(
93
+
h4("Allocation Lab"),
94
+
tags$ul(
95
+
tags$li(tags$b("Inputs:"), " sample mean and covariance of daily simple returns on your analysis window, annualized (×252 and ×252 for cov). ",
96
+
"Your current weights are compared to alternative rules on that same window only."),
97
+
tags$li(tags$b("Min variance:"), " long-only, fully invested portfolio that minimizes variance subject to an optional per-name cap (solved with quadratic programming)."),
98
+
tags$li(tags$b("Inverse volatility:"), " weights proportional to 1 / annualized volatility (diagonal of the estimated covariance)."),
99
+
tags$li(tags$b("Equal weight:"), " 1/", tags$em("n"), " on each name in the covariance sample."),
100
+
tags$li(tags$b("Max Sharpe (projected):"), " unconstrained mean–variance tangency weights, then negative weights are set to zero and the vector is renormalized. ",
101
+
"That is a common heuristic, ", tags$b("not"), " the true constrained max-Sharpe solution; treat it as exploratory.")
Copy file name to clipboardExpand all lines: README.md
+8-7Lines changed: 8 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,9 +8,9 @@
8
8
9
9
## What is it?
10
10
11
-
**Portfolio Intelligence Lab** is a Shiny app in the browser. You define a **weighted portfolio** (tickers and weights, or a **sample template**), choose a **benchmark** such as SPY or QQQ, and pull a shared history of adjusted prices from Yahoo Finance. On top of that data you get **Diagnosis** (KPIs, insights, sector and return attribution, CSV/text exports) and **Performance** (your portfolio vs the benchmark plus per-ticker exploration). **Scenarios** replays preset stress windows and applies an optional mechanical daily return shock. **Methodology** documents definitions and limits. **Price Trend**, **Forecast** (exploratory), and **Risk Analysis** support deeper single-name views.
11
+
**Portfolio Intelligence Lab** is a Shiny app in the browser. You define a **weighted portfolio** (tickers and weights, or a **sample template**), choose a **benchmark** such as SPY or QQQ, and pull a shared history of adjusted prices from Yahoo Finance. On top of that data you get **Diagnosis** (KPIs, insights, sector and return attribution, CSV/text exports) and **Performance** (your portfolio vs the benchmark plus per-ticker exploration). **Scenarios** replays preset stress windows, applies an optional mechanical daily return shock, and can draw a **bootstrap fan** from historical portfolio returns. **Allocation Lab** suggests alternative long-only weights (min-variance with optional caps, inverse vol, equal weight, projected max Sharpe) on the same window. **Methodology** documents definitions and limits. **Price Trend**, **Forecast** (exploratory), and **Risk Analysis** support deeper single-name views.
12
12
13
-
It is built for questions like: *How does this mix behave versus a simple passive alternative, where are the pressure points, and what happens in rough historical patches?* Start from **Build Portfolio**, then use **Diagnosis**, **Performance**, and **Scenarios**as the main portfolio story.
13
+
It is built for questions like: *How does this mix behave versus a simple passive alternative, where are the pressure points, and what happens in rough historical patches?* Start from **Build Portfolio**, then use **Diagnosis**, **Performance**, **Scenarios** (including optional bootstrap fan), and **Allocation Lab**for alternative weighting ideas on the same data window.
14
14
15
15
---
16
16
@@ -25,7 +25,7 @@ Brokerage apps show **positions** and **P&L**. They rarely help you **compare yo
2.**Load** — Daily adjusted prices via Yahoo Finance (`quantmod`); you pick the analysis window on the app.
27
27
3.**Diagnose** — Portfolio-level risk/return, drawdowns, rolling metrics, concentration, correlations, holding and sector attribution, plain-language insights, and optional “what to consider next” prompts; export **.txt** or **.csv** from the diagnosis header.
28
-
4.**Performance & scenarios** — Cumulative paths vs benchmark; **Scenarios** for historical episode slices and additive daily bps stress on all holdings or one sector.
28
+
4.**Performance, scenarios & allocation** — Cumulative paths vs benchmark; **Scenarios** for historical episodes, bps stress, and bootstrap fan; **Allocation Lab** for model weights vs yours.
29
29
5.**Explore** — **Methodology** for formulas; **Price Trend**, **Forecast** (exploratory, not advice), and **Risk Analysis** for per-ticker views.
30
30
31
31
Everything stays in one Shiny session so you are not jumping between spreadsheets and disconnected chart tools.
@@ -38,14 +38,14 @@ Everything stays in one Shiny session so you are not jumping between spreadsheet
0 commit comments