Methodology
The exact math and machinery behind the Track Record desk. Nothing here is a forecast — it is a transparent, retrospective description of the founder's own reconciled brokerage account. Check the numbers yourself.
Version 1.0 · Last revised 2026-07-01
Performance & risk formulas
All statistics are computed from the daily simple returns of the reconciled 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).
IBKR-Flex trade-ID reconciliation
The moat is that the curve is not self-reported. Every position and trade is matched against Interactive Brokers' official Flex statements by trade ID, so what you see are executed fills, not estimates.
- 1
Official source of truth: IBKR Flex
Positions and executions are matched against Interactive Brokers' official Flex statements — the same regulated brokerage records used for tax and audit. The curve reflects executed fills, not estimates or self-reported numbers.
- 2
Stable per-execution key
Every trade is keyed as EXEC|<brokerExecutionId>|<symbol>|<action>. The broker execution ID is globally unique, so the same fill is never counted twice even when it arrives via two different feeds (Activity Statement and TradeConfirm).
- 3
Cross-feed de-duplication
Currency is deliberately NOT part of the key: CPAPI maps non-base listings to the account base currency (EUR) while Flex returns the instrument currency (USD). Including it would split one execution into two rows. Order references live in their own column and only group partial fills of the same order.
- 4
Append-only, gap-free NAV history
Daily NAV points are written to an append-only equity-history table (no cap, no silent overwrite). A point is only rewritten under an explicit, logged decision — the series you download is the series that was recorded, in order.
Data-state machine
Every number on the terminal carries a freshness state. These four are the exact states the public feed emits — there is no silent snapshot and no invented “estimated” tier.
| State | Emitted when |
|---|---|
| LIVE | portfolioSource = regular_cache AND snapshot age ≤ 15 min Fetched live from Interactive Brokers on this request — the CPAPI session is healthy and the snapshot is fresh. |
| STALE | portfolioSource = cpapi_last_valid, OR regular_cache older than 15 min The last known-good CPAPI snapshot — the live session lapsed, so you see the most recent valid data, clearly marked rather than hidden. |
| FALLBACK | portfolioSource = flex_shadow The Flex shadow curve — rebuilt natively from IBKR Flex statements when CPAPI is unavailable. An independent reconstruction path, still honest. |
| SHADOW | live CPAPI running alongside a parallel Flex parity probe A diagnostics mode: live CPAPI plus a side-by-side Flex parity check that reconciles the two feeds against each other. |
Verify it yourself
Download the append-only reconciled daily-NAV series and re-run every formula above in a spreadsheet. The public export exposes the NAV curve and the anonymised trade feed; per-trade detail (symbols, prices) is reconciled from the same Flex statements and available to subscribers inside the terminal.
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.Die hier beschriebenen Zahlen beziehen sich ausschließlich auf das persönliche Handelskonto des Gründers. Frühere Wertentwicklung ist kein verlässlicher Indikator für künftige Ergebnisse. Keine Anlageberatung.
