Case Research Portfolio: Performance Methodology
Executive Summary
The Case Research Portfolio is a live, transparent portfolio tracker displaying real-time holdings, performance metrics, and benchmark comparisons. This document explains the methodology, calculations, data sources, and indexing approach used to measure and display portfolio performance.
Table of Contents
Overview
Purpose
The portfolio tracker serves three primary objectives:
Show Conviction: Demonstrate commitment by publicly tracking a real-money portfolio
Education: Provide transparency into portfolio management decisions and performance
Retrospective Use: Document performance for future reference in an emerging investment strategy (arbitrage investing)
Portfolio Details
Account Type: IBKR Individual Brokerage Account
Base Currency: GBP (British Pounds)
Inception Date: January 28, 2025
Initial Capital: £xxx
Investment Strategy: Global equities and commodities with focus on deep value and special situations
Indexing Methodology
What Is an Index?
An index normalizes portfolio value to a base number (typically 100) at inception, making performance easy to interpret visually.
Formula:
Index Value = (Current Portfolio NAV / Inception NAV) × 100
Example
Date: Jan 28th 2025
Portfolio NAV: £xxx
Index Value: 100
Interpretation
Starting point
Feb 13, 2026
£xxx
635.0
535% total gain (6.35x)
Why 100?
Industry standard (FTSE 100, S&P 500 charts often use base 100)
Easy mental math: Index of 150 = 50% gain
Allows direct visual comparison with benchmarks on same scale
Reading the Chart
Flat line at 100: No gain or loss
Above 100: Positive returns
Below 100: Losses
Slope: Rate of return (steeper = faster gains)
Time-Weighted Return (TWR)
What TWR Measures
Time-Weighted Return isolates investment performance from the timing and size of cash flows (deposits and withdrawals).
Key Question Answered: "How well did the investments perform, regardless of when I added or removed money?"
Why TWR vs. Money-Weighted Return?
Time-Weighted Return (TWR):
Removes impact of investor cash flow decisions
Measures portfolio manager skill
Used by mutual funds, pension funds, professional managers
Allows fair comparison between portfolios
GIPS (Global Investment Performance Standards) compliant
Money-Weighted Return (MWR / IRR):
Measures investor's personal dollar-weighted return
Heavily influenced by deposit/withdrawal timing
Can be misleading: large deposit before a loss = bad MWR even if manager performed well
Better for measuring personal outcomes, not skill
The TWR Calculation Process
Step 1: Identify Sub-Periods Break the timeline into segments between cash flows (deposits/withdrawals).
Step 2: Calculate Each Period's Return
Period Return = (Ending NAV - Beginning NAV) / Beginning NAV
Step 3: Chain the Returns
TWR = [(1 + R₁) × (1 + R₂) × (1 + R₃) × ... × (1 + Rₙ)] - 1
Step 4: Annualize (for CAGR)
CAGR = [(1 + TWR)^(1/Years)] - 1
Worked Example
Timeline:
Jan 28, 2025: Start with £xxx
Mar 15, 2025: Portfolio grows to £xxx (no cash flows)
Mar 16, 2025: Deposit £xxx (total now £xxx)
Feb 13, 2026: Portfolio grows to £xxx
Calculations:
Period 1 (Jan 28 - Mar 15):
R₁ = (£xx - £xx) / £6xxx = 0.25 = 25%
Period 2 (Mar 16 - Feb 13):
Beginning NAV after deposit: £xx
Ending NAV: £xx
R₂ = (£xx - £xx) / £xx = 0.20 = 20%
Total TWR:
TWR = [(1.25) × (1.20)] - 1 = 1.50 - 1 = 0.50 = 50%
Result: 50% time-weighted return, regardless of deposit timing.
Compare to Money-Weighted: If you had invested all £xx on Day 1 at the same average return, you'd have different MWR. TWR isolates manager skill from cash flow timing.
Performance Metrics Explained
INDEX
Current Value: Displayed at top of tracker (e.g., 635.0)
Meaning: Portfolio value relative to inception baseline of 100.
Interpretation:
100 = Break-even
150 = 50% gain
635 = 535% gain (6.35x initial capital)
Note: This is a gross return figure before taxes and expressed in base currency (GBP).
DAY
Current Value: Daily percentage change (e.g., +2.29%)
Calculation:
Day Return = (Today's NAV - Yesterday's NAV) / Yesterday's NAV × 100
Use: Shows short-term volatility and daily portfolio movement.
TWR (Time-Weighted Return)
Current Value: Cumulative return since inception (e.g., +45.57%)
Meaning: Total investment performance adjusted for cash flows.
Interpretation:
Positive TWR = Portfolio outperformed cash
Compare to benchmarks (S&P 500, etc.) to assess relative performance
Does NOT account for personal dollar-weighting of deposits
CAGR (Compound Annual Growth Rate)
Current Value: Annualized return (e.g., +264.33%)
Formula:
CAGR = [(Ending Index / Beginning Index)^(1/Years)] - 1
Meaning: Average annual return if performance were smooth/consistent.
Note: For periods under 1 year, CAGR can be volatile and misleading. It's most useful for multi-year performance evaluation.
Current CAGR Context:
Portfolio is ~1 year old
Large gain concentrated in January 2026 (61.94% monthly return)
CAGR will stabilize as portfolio ages
Data Sources & Frequency
Primary Data Source: Interactive Brokers (IBKR)
Holdings Data:
Source: IBKR Client Portal API (live positions endpoint)
Frequency: Updated daily
Includes: Symbol, quantity, market value, cost basis, unrealized P&L, currency
Transaction History:
Source: IBKR Activity Statements (exported CSV)
Frequency: Updated when new trades occur
Includes: Date, ticker, side (buy/sell), quantity, price, commission, net amount
Performance Data:
Source: IBKR Portfolio Analyst (Daily Performance Report)
Frequency: Exported daily as CSV
Includes: Daily NAV, equity value, cash balance, deposits/withdrawals
Method: IBKR's own TWR calculation (GIPS-compliant)
Benchmark Data: Twelve Data API
Benchmarks Tracked:
SPY (S&P 500 ETF)
QQQ (Nasdaq-100 ETF)
DIA (Dow Jones ETF)
IWM (Russell 2000 Small-Cap ETF)
ISF.L (iShares FTSE 100 - UK)
URTH (MSCI World Index)
BRK-B (Berkshire Hathaway - as alternative benchmark)
Data Points:
Daily closing prices
Historical price series
Automatically indexed to 100 at portfolio inception date
Update Schedule
Daily Update Workflow:
Export IBKR Performance Report (CSV) at market close
Log into IBKR Gateway (authenticates API access)
Run update script (fetches live holdings + caches data)
Portfolio tracker refreshes with new data
Squarespace embed displays updated tracker
Typical Update Time: After market close (4:00 PM ET / 9:00 PM GMT)
Cache Duration: Data displayed is from most recent update (timestamp shown)
Benchmark Comparisons
Why Benchmarks?
Benchmarks provide context for portfolio performance. Absolute returns don't indicate skill—relative returns do.
Example:
Portfolio: +10% return
S&P 500: +15% return
Result: Underperformed by 5 percentage points (despite positive return)
Benchmark Selection
SPY (S&P 500): Primary benchmark
Represents US large-cap equity market
Most common professional benchmark
Highly liquid, low-cost passive alternative
Other Benchmarks:
QQQ: Tech-heavy exposure (Nasdaq)
DIA: Blue-chip industrials (Dow)
IWM: Small-cap exposure
ISF.L: UK market (matches portfolio base currency)
URTH: Global diversification
BRK-B: Active management alternative (Buffett)
How Benchmarks Are Indexed
All benchmarks are indexed to 100 on January 28, 2025 (portfolio inception date).
Formula:
Benchmark Index = (Current Benchmark Price / Inception Benchmark Price) × 100
This allows:
Direct visual comparison on same chart
Clear outperformance/underperformance assessment
Fair comparison despite different starting prices
Interpreting Benchmark Charts
Portfolio line above benchmark: Outperformance Portfolio line below benchmark: Underperformance Lines converging: Relative performance narrowing Lines diverging: Relative performance widening
Portfolio Construction & Holdings
Asset Allocation
The portfolio invests in:
Equities: Primarily small-cap, deep value, and special situations
Geographies: Canada, UK, US, Europe, Japan, Mexico (global)
Sectors: Basic Materials (mining/commodities focus), Energy, Industrials
Cash: Maintains minimal cash for transaction flexibility
Position Sizing
Current Approach:
Concentrated positions (top 3 holdings = ~65% of portfolio)
High conviction in undervalued situations
Willingness to hold through volatility
Top Holdings (as of last update):
EML (Emmerson PLC) - 32.8%
ZEN (Zenith Energy) - 16.4%
CNC (Canada Nickel) - 15.4%
Industry Breakdown
Displayed on tracker:
Visual bar chart showing sector weightings
Helps assess concentration risk
Typical concentration: Basic Materials (mining/resources) 60-80%
Transaction Log
Full transparency:
All buys and sells displayed
Shows entry/exit prices
Commission costs included
Allows independent verification of performance
Calculation Examples
Example 1: Simple TWR (No Cash Flows)
Scenario:
Start: £1,000
End: £1,500
No deposits or withdrawals
Calculation:
Return = (£1,500 - £1,000) / £1,000 = 0.50 = 50%
Index = 100 × 1.50 = 150
Example 2: TWR with Deposit
Scenario:
Day 1: Start with £1,000
Day 30: Grow to £1,200 (20% gain)
Day 31: Deposit £1,000 (NAV now £2,200)
Day 60: Grow to £2,420 (10% gain on £2,200)
Calculations:
Period 1 (Days 1-30):
R₁ = (£1,200 - £1,000) / £1,000 = 0.20 = 20%
Period 2 (Days 31-60):
R₂ = (£2,420 - £2,200) / £2,200 = 0.10 = 10%
Total TWR:
TWR = [(1.20) × (1.10)] - 1 = 1.32 - 1 = 0.32 = 32%
Index = 100 × 1.32 = 132
Note: The £1,000 deposit doesn't inflate the return—TWR correctly shows 32% investment performance.
Example 3: TWR with Withdrawal
Scenario:
Start: £10,000
After 6 months: £12,000 (20% gain)
Withdraw: £5,000 (NAV now £7,000)
After 12 months: £8,400 (20% gain on £7,000)
Calculations:
Period 1:
R₁ = (£12,000 - £10,000) / £10,000 = 0.20 = 20%
Period 2:
R₂ = (£8,400 - £7,000) / £7,000 = 0.20 = 20%
Total TWR:
TWR = [(1.20) × (1.20)] - 1 = 1.44 - 1 = 0.44 = 44%
Index = 100 × 1.44 = 144
Note: Even though you withdrew half your capital, TWR shows true investment performance (44%) independent of the withdrawal.
Example 4: CAGR Calculation
Scenario:
TWR over 3 years: 100% (doubled money)
What's the annualized return?
Formula:
CAGR = [(1 + 1.00)^(1/3)] - 1
CAGR = [2.00^0.333] - 1
CAGR = 1.2599 - 1 = 0.2599 = 25.99%
Interpretation: A 100% return over 3 years equals ~26% per year compounded.
Limitations & Disclaimers
Data Accuracy
Sources:
Holdings data: Live from IBKR API (updated daily)
Performance data: IBKR Portfolio Analyst (GIPS-compliant calculations)
Benchmark data: Twelve Data API (third-party market data provider)
Potential Issues:
Data delays: Updates typically 1 business day behind
Price discrepancies: Closing prices may differ slightly between data sources
Corporate actions: Dividends, splits, spinoffs may cause temporary data mismatches
Performance Reporting
What's Included:
Trading commissions
Forex conversion costs
Market price movements
Dividends received
What's NOT Included:
Personal taxes (varies by jurisdiction)
Opportunity cost of time
Risk-adjusted metrics (Sharpe ratio, max drawdown)
Important Notes:
Past performance does not guarantee future results
Returns are gross of taxes
High concentration = high volatility
Small-cap equities carry elevated risk
Survivorship & Selection Bias
Potential Biases:
Portfolio started in 2025 (may not represent full market cycle)
Selection of specific small-cap stocks (high risk/return profile)
No track record of performance in bear markets
Transparency:
All transactions visible (no cherry-picking)
Real money portfolio (not paper trading)
Public accountability
Benchmark Limitations
Not a Perfect Comparison:
S&P 500 is large-cap US; portfolio is global small-cap
Different risk profiles (small-cap more volatile)
Different liquidity profiles
Different fee structures (ETF fees vs. direct stock ownership)
Better Comparison:
Small-cap value index (Russell 2000 Value)
International small-cap index
Or: Accept that comparisons are imperfect and focus on absolute returns
Technical Implementation
Architecture Overview
Frontend:
Single-page HTML/JavaScript widget
Charts: Chart.js library
Styling: Custom CSS (blue theme matching Case Research branding)
Hosted on: Railway (cloud platform)
Embedded in: Squarespace via iframe
Backend:
Python FastAPI framework
IBKR Client Portal Gateway (local Java application for API authentication)
Data storage: JSON cache + SQLite database
Update mechanism: Daily manual trigger after market close
Data Flow:
IBKR Gateway authenticates API access (runs on local machine)
Backend fetches live positions from IBKR API
Backend parses IBKR Performance Report CSV for TWR data
Backend fetches benchmark prices from Twelve Data API
All data cached in JSON file
Railway backend serves cached data to public URL
Squarespace iframe embeds Railway URL
Visitors see live tracker on Case Research website
Daily Update Process
Manual Steps (5 minutes):
Log into IBKR Client Portal
Generate & download Daily Performance Report (CSV)
Save as performance_report.csv in project folder
Log into IBKR Gateway at https://localhost:5000
Run update script: curl -X POST http://localhost:8000/update
Commit & push updated cache.json to GitHub
Railway auto-deploys (2-3 minutes)
Tracker updates on Squarespace
Why Daily Updates?
Portfolio values change daily
IBKR Gateway session expires every 24 hours (security requirement)
Manual process ensures data quality control
Code Repository
GitHub: [Portfolio-Tracker repository]
Open-source codebase
Full transparency into calculations
Version control for all changes
Technologies:
Python 3.12
FastAPI 0.115
Chart.js 4.4
IBKR Client Portal API
Twelve Data API
Frequently Asked Questions
Why not use real-time data?
IBKR Gateway sessions expire every 24 hours and require manual re-authentication. Keeping it running 24/7 is impractical and unreliable. Daily updates provide sufficient granularity for long-term investment tracking.
Why index to 100 instead of showing dollar values?
Privacy and focus on performance. Showing "£xxx" reveals exact capital; showing "635 index" reveals only the return (535% gain). Also makes it easier to compare with benchmarks visually.
How do you handle dividends?
Dividends are automatically included in the NAV calculation (they're cash in the account). IBKR's TWR calculation properly accounts for dividend income as part of investment return.
What about currency effects?
Portfolio is measured in GBP (base currency). Foreign holdings (CAD, USD, etc.) are converted to GBP at daily exchange rates. Currency gains/losses are included in total return.
Can I replicate this portfolio?
All transactions are publicly visible. However:
Most holdings are illiquid small-caps (difficult to buy in size)
Timing matters (prices change)
Not investment advice (DYOR)
Why such high concentration?
This is a high-conviction, research-intensive approach. Concentrated portfolios amplify both gains and losses. Risk tolerance is personal—this suits the portfolio manager's style.
What happens if the tracker goes down?
Data is cached daily and stored in multiple locations (GitHub, Railway, local machine). Even if live updates stop, historical data remains accessible. All source code is open-source and portable.
Conclusion
The Case Research Portfolio tracker provides full transparency into investment performance using industry-standard TWR methodology. By indexing to 100, using IBKR's GIPS-compliant calculations, and comparing against established benchmarks, the tracker offers clear, interpretable performance data.
Key takeaways:
TWR isolates investment skill from cash flow timing
Indexing makes performance easy to visualize
Daily updates provide near-real-time transparency
Benchmark comparisons contextualize absolute returns
Full disclosure includes all transactions and holdings
This methodology ensures the tracker serves its three purposes: demonstrating conviction, educating viewers, and documenting performance for retrospective analysis.
Document Information
Version: 1.0
Last Updated: February 16, 2026
Author: Case Research
Contact: Info@Casersrch.onmicrosoft.com
Website: Case Research
Disclaimer: This document is for educational purposes only. It does not constitute investment advice, a recommendation to buy or sell securities, or an offer of advisory services. Past performance does not guarantee future results. Investing involves risk, including possible loss of principal.