How I work.
I separate the investment question, data window, calculation and conclusion. These conventions explain the dated results in this portfolio.
Sources and dates.
My US equity notebooks use Yahoo Finance through yfinance. The Nigerian projects use exported Nigerian stock and NGX index price histories; the Dangote notebook reads Investing.com-style CSV exports, even though its older README also mentioned Investo.ng. Financial inputs come from the project’s company financial tables. Each case links to the original notebook and README.
Every chart and card shows its original cutoff. “Reviewed 29 October 2026” is a presentation review date, not a market-data refresh. A note is an analytical record of that window.
Returns, annualization and risk-free inputs.
YTD return is end close / start close − 1. The original notebooks generally use daily simple returns. Historical “annualized return” is the arithmetic daily mean × 252, not CAGR. Volatility is sample daily standard deviation × √252. Sharpe is (252 × mean daily simple return − annual risk-free assumption) / (√252 × sample daily standard deviation).
A short window gives a noisy estimate; it is not automatically inflated. The conventional √252 conversion also assumes a return structure that may not hold with serial correlation. The displayed estimates are not adjusted for it. I do not rank studies against one another across different dates, currencies and risk-free assumptions.
| Project | Market cutoff | Risk-free input |
|---|---|---|
| Alphabet | 2026-08-26 | 4.64% annual assumption; US 10-year Treasury snapshot, 26 August 2026 |
| BUA Foods / BUA Cement | 2026-08-31 | 17.13% annual assumption in the original notebook; not a verified current T-bill quote |
| CrowdStrike | 2026-09-04 | 4.79% annual assumption in the original notebook, held fixed across the analysis |
| Dangote Cement | 2026-09-18 | 16.75% fixed annual assumption in notebook cell 79; source observation date is not recorded |
| Eli Lilly | 2026-10-02 | 2.86% historical; 3.78% YTD annual assumptions in the notebook, using a 3-month US Treasury proxy |
| Ferrari | 2026-10-09 | 2.86% historical and 3.80% YTD stock-risk proxies; WACC is a separate estimated 7.32% |
These are the notebook assumptions, not current risk-free quotes. A dated assumption is not evidence that the entire history earned that T-bill rate.
Dangote raw-price audit.
Recomputed 29 October 2026 from the three uploaded vendor CSVs. All files run from 2 January to 18 September 2026. The original exports are preserved in the downloadable audit.
A confirmed calendar correction.
Dangote includes an unchanged-price row dated 28 May; Lafarge and the index do not. Both the NGX holiday calendar and the federal holiday announcement identify that date as a closure. I exclude that row. This leaves matching dates: 177 closing observations and 176 returns in each series. I do not fill absent prices or remove other dates by guesswork.
Why VaR and CVaR differ.
Dangote’s 95% VaR is 0.77%, but CVaR is 4.76% because 138 of 176 daily returns are zero and the nine worst observations contain much larger losses, including a 10% fall.
The as-uploaded 177-return sample reproduces VaR 0.739126% and CVaR 4.764528% exactly. After the holiday correction, VaR is 0.770533% and CVaR remains 4.764528%. VaR uses the linearly interpolated 5th percentile; CVaR here is the mean loss of observations at or below that return threshold. This finite-sample conditional mean contains nine observations and is not a fractionally weighted expected-shortfall estimator.
| Tail date | Close-to-close return |
|---|---|
| 2026-02-12 | -1.84% |
| 2026-02-27 | -6.09% |
| 2026-03-13 | -1.86% |
| 2026-05-07 | -4.89% |
| 2026-06-09 | -2.12% |
| 2026-06-18 | -7.36% |
| 2026-06-24 | -10.00% |
| 2026-07-01 | -7.48% |
| 2026-07-21 | -1.24% |
Recalculated Sharpe estimates.
Dangote 1.8925; Lafarge 2.8144; NGX ASI 3.4752. All use 176 daily simple returns, sample standard deviation, 252-day conventional annualization and the original fixed 16.75% annual risk-free assumption. The observation date and source of that rate remain undocumented. The original saved peer/index figures are superseded by this reproducible calculation; their full upstream difference has not been reconciled.
At illustrative 20% and 25% annual risk-free assumptions, Dangote’s Sharpe falls to 1.8016 and 1.6617. These are sensitivity assumptions, not verified T-bill quotes. Short-window estimates remain uncertain and unadjusted for serial correlation. Lag-one return autocorrelation is approximately 0.13 for Dangote and 0.38 for the index.
What this audit establishes.
No duplicate dates, missing closing prices or non-positive closes were found. Recalculated price changes agree with the vendor’s rounded Change % column. This validates calculations against these exports. It does not independently reconcile every close, volume entry or corporate action against exchange records. These are price returns, without a separate dividend adjustment.
Download inputs, script, results and tail rows ↓Valuation and conclusions.
My research views are dated qualitative conclusions. I do not turn Monte Carlo percentiles into target prices. Ferrari’s €144.29 result is a conditional Porsche-multiple scenario. The Excel workbook makes the EV-to-equity bridge and assumptions editable; it is not a DCF or a broad luxury-peer valuation.
ROIC/WACC comparisons are simplified group estimates and may use different measurement dates. A positive spread supports a capital-efficiency discussion, not an automatic share-price conclusion.