Methodology
The math and data path behind the Track Record desk. This is a retrospective, self-published record of the founder's own broker-linked account, not a forecast or an independent audit. You can recalculate the published figures yourself.
Version 1.0 · Last revised 2026-07-01
Performance & risk formulas
All statistics are computed from the daily simple returns of the stored daily-NAV series. The risk-free rate is 0 throughout; annualisation uses 252 trading days (×252 for the mean return, ×√252 for deviations). Every figure is suppressed until there are at least 20 daily returns — a thin series shows “—”, never a made-up number.
Annualised Return
mean(daily returns) × 252
The arithmetic mean of daily simple returns, scaled to a year by 252 trading days. Daily return rᵢ = valueᵢ / valueᵢ₋₁ − 1 (simple, not log).
Descriptive of the realised series only — never a forecast. Suppressed until at least 20 daily returns exist.
Annualised Volatility
sampleStdDev(daily returns, ddof=1) × √252
Sample standard deviation of daily returns (Bessel-corrected, dividing by N−1), annualised by √252. Measures how much the daily return typically swings — a risk measure, not a return.
Denominator of the Sharpe ratio. Null with fewer than 20 daily returns.
Sharpe Ratio
annualised return ÷ annualised volatility (rf = 0)
Return earned per unit of total volatility, with the risk-free rate set to zero. Higher is better.
Null when annualised volatility is 0 (a perfectly flat series).
Sortino Ratio
annualised return ÷ annualised downside deviation (target 0)
Like Sharpe but the denominator only penalises losses. Downside deviation = √( Σ min(rᵢ, 0)² / N ) × √252 — the root-mean-square of the negative daily returns against a 0 target, averaged over the FULL count N.
Null when there is no downside (denominator 0). Rewards upside swings for free.
Calmar Ratio
annualised return ÷ |max drawdown|
Return earned per unit of the worst peak-to-trough loss since inception. Max drawdown is taken as a positive fraction.
Null when the series never drew down (no drawdown to divide by).
Max Drawdown
min over t of ( valueₜ / running_peakₜ − 1 )
The deepest percentage decline from a prior high-water mark. The underwater series is ≤ 0 at every point; its minimum is the max drawdown. On the desk it re-scales to the selected time window; the Calmar denominator uses the since-inception figure.
0 for a strictly-increasing series (no drawdown).
Data provenance and execution de-duplication
The public curve is calculated from the stored daily-NAV series. CPAPI can write provisional intraday values; IBKR Flex can later settle daily closes. Imported executions use broker execution IDs when available and a documented fallback key otherwise. This is an internal, self-published reconciliation process, not an independent audit.
- 1
Daily-close source: IBKR Flex
The current portfolio snapshot is selected from cached IBKR-linked tiers. Separately, IBKR Flex daily summaries can settle or correct a provisional CPAPI NAV point in the historical series. The public route does not query IBKR directly on each request.
- 2
Execution key when available
An imported trade with a broker execution ID receives the key EXEC|executionId|symbol|action. If no execution ID is present, the importer falls back to timestamp, symbol, side, quantity, price, and order reference. These keys reduce duplicate imports; they do not constitute external verification.
- 3
Cross-feed de-duplication
Currency is excluded from the execution-ID key because CPAPI and Flex can represent the same listing in different currencies. Order references are stored separately and help group partial fills. Rows without an execution ID rely on the fallback key above.
- 4
Retained daily NAV history
Daily NAV values are stored by date without a display cap. CPAPI rows are provisional and may be updated intraday; a later IBKR Flex close or operator override can replace that date. The code does not guarantee a gap-free series.
Data-state machine
The public summary exposes one overall freshness state for the selected current portfolio snapshot. It does not certify the source, completeness, or settlement status of every historical NAV row or trade. LIVE, STALE and FALLBACK are emitted by this route; SHADOW describes a provider diagnostics mode.
| State | Meaning / condition |
|---|---|
| LIVE | portfolioSource = regular_cache AND snapshot age ≤ 15 min The selected regular-cache snapshot is no more than 15 minutes old. This public request does not query IBKR directly. |
| STALE | portfolioSource = cpapi_last_valid, OR regular_cache older than 15 min The selected snapshot is either the last-valid CPAPI cache or a regular-cache snapshot older than 15 minutes. It is cached data. |
| FALLBACK | portfolioSource = flex_shadow The selected current portfolio snapshot comes from the cached IBKR Flex shadow tier. The historical NAV curve is read separately from the equity-history store. |
| SHADOW | IBKR_DATA_PROVIDER = shadow (diagnostics; not emitted by public-summary) CPAPI remains primary while Flex runs as an internal parity check. This is not independent verification. |
Check the calculations yourself
Download the currently stored daily-NAV series and rerun the formulas above. The export includes the overall current-snapshot state and update time, but not per-row source or provisional status; it is not a broker statement or independent audit. The anonymised trade export contains only the public recent-trade fields.
The figures described here relate solely to the founder's personal trading account. Past performance is not a reliable indicator of future results. This page does not constitute investment advice, an investment recommendation, an offer, or a solicitation to buy or sell any financial instrument. Trading financial instruments involves substantial risk, up to and including total loss of capital; individual results may differ materially. Vaapad Capital is not a licensed investment firm and does not provide portfolio management. Full disclaimer.