Logo
TradeQuantiX Systematic Trading Portfolio
Loading...

About This Portfolio Tracker

This dashboard shows the live performance of a real Interactive Brokers account managed by TradeQuantiX Systematic Trading Portfolio. All returns, positions, drawdowns, and trades reflect actual executions. Nothing here is backtested, paper-traded, or simulated.

Data is pulled directly from IBKR via their Flex Query API and refreshed daily. The benchmark is SPY (S&P 500 total return). Metrics are computed on time-weighted returns net of commissions and financing costs.

Live since: December 29, 2023
Last update: August 20, 2026

Overall Portfolio Metrics

Metric Portfolio
Returns
WTD +0.1%
MTD +3.7%
QTD -2.6%
YTD +16.8%
1Y +46.7%
3Y CAGR* +32.9%
5Y CAGR*
Risk Metrics
Sharpe (All)† +1.66
Volatility (All)† 18.0%
Sortino (All)† +2.38
Calmar (All)† +1.69
Drawdowns
Current Drawdown -2.6%
Days in Current Drawdown 27
Max Drawdown (QTD) -8.7%
Max Drawdown (YTD) -14.9%
Max Drawdown (All)† -19.4%
Interest & Drag
Commission Drag‡ 3.16%
Borrow Cost‡ 0.94%
Margin Interest‡ 1.14%
Total Cost Drag‡ 5.24%

*3Y and 5Y are annualized CAGR; if full history unavailable, extrapolated from earliest available data  |  †Full-period, annualised (risk metrics), peak-to-trough (drawdowns), risk-free rate = 0  |  ‡Annualised cost as % of NAV

Current Exposure & Margin

Gross Exposure
102.5%
Cash
0.0%
Margin Used
2.5%

Portfolio is leveraged — using margin for 2.5% of positions.

Current Market Allocation

MarketAllocation
ASX 45.6%
TSX 28.6%
US 25.8%

Top Winners (Current Open Positions)

# Ticker Market Strategy Alloc % PnL %
1 GNP ASX Momentum 3.63% +211.2%
2 SRG ASX Momentum 3.64% +178.6%
3 SDE TSX Other 1.57% +177.2%
4 MAL TSX Trend 0.97% +125.7%
5 EIF TSX Other 1.11% +124.5%
6 RMI ASX Trend 0.92% +120.0%
7 EXE TSX Trend 2.54% +116.8%
8 SLS ASX Trend 1.39% +101.1%
9 WMX ASX Trend 0.01% +100.0%
10 TEA ASX Momentum 0.84% +75.6%

Top Losers (Current Open Positions)

# Ticker Market Strategy Alloc % PnL %
1 DVA US Momentum 0.31% -24.2%
2 A1M ASX Trend 0.85% -24.0%
3 ASPN US Trend 0.66% -22.6%
4 TSU TSX Trend 0.61% -18.8%
5 DDOG US Momentum 0.80% -13.9%
6 KLTR US Trend 0.74% -11.9%
7 MM1 ASX Trend 1.07% -11.6%
8 QTRH TSX Trend 0.49% -11.1%
9 CVS US Momentum 0.48% -10.7%
10 INTC US Momentum 0.48% -10.4%

Insights

These insights are AI-generated and may be incorrect.

The portfolio advanced +1.07% this week, outpacing SPY's +0.43% gain. Month-to-date sits at +3.66% while year-to-date extends to +16.82%, holding a lead over the benchmark's +14.68%. Gross and net exposure both rose 5.7 percentage points to 102.5%, entirely long across 131 open positions with no shorts. Asset mix remains tilted toward ASX at 59.1%, followed by TSX at 37.1% and US at 33.5%. Current drawdown from peak is a shallow -2.60% against 50-day annualised volatility of 21.95%. Rolling risk-adjusted profile is firm, with the 50-day Sharpe at 1.60, Sortino at 2.33, and Calmar at 3.86. Tail behaviour shows a downside CVaR of -3.48% versus an upside CVaG of +3.03%, a near-symmetric profile, though 60-day skewness of -0.45 and excess kurtosis of +1.44 point to a modestly fatter left tail. The Hurst exponent near 0.50 indicates no clear trending or mean-reverting regime in recent returns. Among strategy categories, Mean Reversion continues to lead cumulative contribution at +32.69% with a 65% win rate and 1.51 profit factor, while Momentum stands out on efficiency with a 2.84 profit factor. Seasonality and Other lag with profit factors below 1.00, and Trend, despite a 42% win rate, remains a meaningful contributor via a 1.92 profit factor.

Week of 2026-08-10

TradeQuantiX Systematic Trading Portfolio Equity Curve

Cumulative time-weighted return (TWR) since inception, excluding the effect of cash deposits/withdrawals.

Annual Returns

Calendar-year time-weighted returns for the portfolio and SPY, with excess return vs the benchmark. The current year is marked YTD and reflects a partial year.

Year Portfolio SPY Excess vs SPY
2026 (YTD) +16.8% +13.1% +3.7%
2025 +60.9% +17.7% +43.2%
2024 +12.6% +24.9% -12.3%

Monthly Returns Heatmap

Calendar grid of monthly time-weighted returns (%). Rows = years, columns = months. Green = positive, red = negative, intensity = magnitude. Quickly reveals seasonality patterns and which months/years drove performance.

Rolling CAGR (Annualised)

50-day and 100-day rolling compound annual growth rate. Shows the annualised return the portfolio would have earned if the most recent window's performance continued for a full year. Rising lines = accelerating returns; falling = decelerating.

Monte Carlo Equity Curves (Best & Worst 10)

10,000 simulated equity paths by resampling actual daily returns with replacement. The 10 best (green) and 10 worst (red) outcomes are shown alongside the actual path (white). Illustrates the range of outcomes luck alone could produce given the same daily return distribution.

Sampling method: Block bootstrap — Politis-Romano stationary, mean block length ≈ n1/3 days with per-sim ±2 perturbation. Preserves vol clustering so simulated paths look realistically streaky.

YTD vs. 1-Year Forward Projection (Monte Carlo)

Monte Carlo projection using only prior-year data, anchored at Jan 1 of the current year. The green line shows actual YTD performance building into the projection bands — a live accuracy check of the model. Drag the horizon slider to extend the projection anywhere from 3 to 24 months forward from the anchor.

Sampling method: Block bootstrap — Politis-Romano stationary, mean block length ≈ n1/3 days with per-sim ±2 perturbation. Projection bands widen honestly around clustered vol. Precomputed at 24 months; slider replays any horizon with no recompute.

Horizon: 12 months

10-Year Terminal Return Distribution (Monte Carlo)

Distribution of annualised compound returns (CAGR) from 5,000 bootstrapped paths of historical daily returns at a chosen horizon (1–30 years). Each simulation compounds resampled daily returns forward. CAGR is used (not raw terminal %) because long-horizon compounded distributions have astronomical tails that obscure the median; the annotation shows the equivalent cumulative return for each percentile. Drag the horizon slider to replay the same set of sims sliced at different anniversaries — wider spread at longer horizons is honest terminal-wealth uncertainty, not a bug.

Sampling method: Block bootstrap — Politis-Romano stationary, mean block length ≈ n1/3 days with per-sim ±2 perturbation. One 30-year simulation per sim; per-year checkpoints let the slider replay any horizon with no recompute.

Horizon: 10 years

Risk-Adjusted Daily Returns

Each bar = daily return divided by its trailing 25-day rolling volatility (a z-score). Values beyond ±2 are unusually large moves relative to recent vol. Helps spot abnormal days that may signal regime shifts or outsized events.

Daily Return Distribution

Histogram of daily % portfolio returns (TWR). VaR 5% (Value at Risk) = the 5th-percentile daily return — on 95% of trading days, the return was better than this value.

Weekly Return Distribution

Histogram of compounded weekly portfolio returns (%). Smooths out daily noise to show the "real" distribution shape. Green/red bars = positive/negative returns. Normal distribution overlay for reference.

Return Exceedance Curve

Survival function: P(daily return > x). At any point on the curve, the Y value is the probability that a random trading day had a return exceeding the X value. Steeper drop near zero = most days cluster around flat. Fat right tail = occasional large gains; fat left tail = occasional large losses.

Drawdown from Peak

How far below the all-time high the portfolio is at any point. 0% = at a new high. Deeper troughs mean larger peak-to-trough losses. Compare with benchmarks to see if drawdowns are shallower or deeper than the market.

Drawdown Statistics vs SPY

Realized drawdown statistics for the portfolio and SPY computed over the same aligned daily-returns window since inception. Lower is better for every row in this table — green in the "Diff" column means the portfolio drew down less, was underwater for fewer days, or recovered faster than SPY.

Metric Portfolio SPY Diff vs SPY
Max Drawdown 19.43% 18.76% +0.67%
Longest DD (days) 71 87 -16
Time in Drawdown 79.80% 79.20% +0.60%
Avg Recovery (days) 10 8 +2

Drawdown Underwater Chart

Shows how many consecutive trading days the portfolio has been below its high-water mark during each drawdown episode. Taller bars = longer periods spent underwater before recovering. Useful for understanding the patience required to hold through drawdowns.

Time in Drawdown

Percentage of all trading days spent in drawdown vs at all-time highs. "At Highs" = days where the portfolio set a new all-time high (cumulative return ≥ previous peak).

Drawdown Exceedance Curve

Probability that a randomly selected day has a drawdown worse than a given level. Read as: "X% of the time, the portfolio was down more than Y%." Steeper drop-offs mean drawdowns are concentrated at shallow levels; a fat tail means deep drawdowns are more common than expected.

Drawdown Frequency & Waiting Time

Left axis (bars): how many trading days per year the portfolio spends at or beyond each drawdown threshold. Right axis (line): average number of trading days you wait before the threshold is hit. Deeper drawdowns happen less often and require more patience — this quantifies the opportunity cost of waiting.

Drawdown Entry & Recovery

Drawdown Recovery Heatmap

Each cell shows how many drawdown episodes of a given depth (rows) took a given number of days to recover (columns). Brighter cells = more frequent. Read across a row to see: "When the portfolio was down X%, how long did recovery typically take?"

Drawdown-to-Trough Distribution

When the portfolio is at a given drawdown level, how much further does it typically fall before hitting the trough? Bars show the median additional decline; whiskers show the 25th–75th percentile range. If you're at -5% and the median additional drop is 2%, expect to see -7% before recovery begins.

Forward Returns by Drawdown Entry Level

Heatmap of median forward returns when entering at different drawdown depths. Rows = holding period (1W to 6M), columns = drawdown depth bucket. Warmer colours = higher forward returns. Shows which drawdown levels historically produced the best entry points.

Optimal Drawdown Entry — Expected Value Curve

Expected value = probability of reaching a drawdown threshold × median forward return from that level. The peak of this curve is the optimal drawdown entry point — it balances "good entry price" against "actually happens often enough." The dashed lines show the probability and median return components separately. Drag the forward-horizon slider to see how the optimal entry depth shifts with the holding period (from 1 week to 12 months).

Forward horizon: 3 months

Consecutive Loss Streak → Forward Returns

Median forward returns (5, 10, 20 trading days) after the portfolio posts N consecutive losing days. Longer losing streaks often precede stronger recoveries. Use this to gauge whether adding capital after a rough patch has historically been rewarded. Count labels show sample size for each bucket.

Loss Streak Exceedance

Probability of experiencing a consecutive losing streak of N days or longer. The red dashed line marks your current streak length. Steeper drop-offs mean long streaks are rare; a flat tail means drawdown persistence is a real risk.

Expected Annual Max Drawdown (Monte Carlo)

Distribution of the worst drawdown seen inside a rolling-forward window from 10,000 bootstrapped 60-month paths of historical daily returns. Median line = the max DD you should expect in a "typical" horizon of that length. The 90th- and 99th-percentile lines mark the tail. The white line shows the portfolio's current drawdown and where it ranks in the distribution — is this DD normal, or genuinely bad? Drag the horizon slider to replay any horizon from 1 month to 5 years.

Sampling method: Block bootstrap — Politis-Romano stationary, mean block length ≈ n1/3 days with per-sim ±2 perturbation. Critical here: iid resampling systematically UNDER-estimates max DDs because it destroys the vol clustering that produces real drawdowns. Per-month checkpoints let the slider replay any horizon with no recompute.

Horizon: 12 months

Recovery Time by Drawdown Depth (Monte Carlo)

For every drawdown episode observed across 10,000 bootstrapped years, how many trading days did the portfolio spend underwater — from the first day below peak until it recovers to a new high? Bars show median episode duration by DD depth bucket (includes both decline and recovery phases); whiskers span the 25th–75th percentile. The gold marker highlights the bucket the current DD falls in — turning a scary drawdown into a probability distribution.

Sampling method: Block bootstrap — Politis-Romano stationary, mean block length ≈ n1/3 days with per-sim ±2 perturbation. Keeps clustered DD episodes intact so recovery-time buckets reflect realistic path dynamics.

Probability of Large Loss Over 12 Months (Monte Carlo)

From 10,000 bootstrapped forward paths at the slider-selected horizon: probability of finishing the period down by at least X% (Terminal), and probability of touching a drawdown of at least X% at some point during the period (Intra-Period). Intra-period probabilities are always higher — you might touch −20% and recover to finish flat. Brutally honest tail-risk framing. Drag the horizon slider below the table to replay from 1 month to 60 months (5 years); zero recomputation, instant refresh.

Sampling method: Block bootstrap — Politis-Romano stationary, mean block length ≈ n1/3 days with per-sim ±2 perturbation. Tail-loss probabilities depend on preserving vol clustering. One 60-month bootstrap runs once; each horizon slice is a prefix of the same paths.

Loss Threshold P(Terminal ≤ −X%) P(Intra-Period ≥ X%)
Horizon: 12 months

Probability of New All-Time High (Monte Carlo)

From the portfolio's current level, probability of reaching a new all-time high within 30 / 60 / 90 / 180 / 252 trading days. Runs 10,000 bootstrapped forward paths and counts how many touch the prior peak inside each horizon. During a drawdown this turns "will this ever recover" into a probability with a timeline. When the portfolio is already at ATH, all horizons trivially read 100% — the caption calls that out.

Sampling method: Block bootstrap — Politis-Romano stationary, mean block length ≈ n1/3 days with per-sim ±2 perturbation. Grinding uptrends and vol clusters are preserved so recovery timing stays realistic.

Drawdown-Statistics Bootstrap CIs (Monte Carlo)

Runs 10,000 bootstrapped 252-trading-day years and computes three drawdown statistics per simulation — annual max DD, longest DD length in days, and % of days spent below prior peak. Reports the realized value on your most recent 252 trading days alongside the bootstrap distribution's median and 95% CI. If your realized max DD sits far outside the CI, this year has been abnormal relative to your own return distribution.

Sampling method: Block bootstrap — Politis-Romano stationary, mean block length ≈ n1/3 days with per-sim ±2 perturbation. Drawdowns are inherently clustered; iid sampling systematically underestimates every statistic in this table.

Metric Realized Bootstrap Median 95% CI Low 95% CI High CI Width

Max-DD Timing Heatmap: When In The Year Does The Trough Hit? (Monte Carlo)

Across 10,000 bootstrapped 252-trading-day years, each sim's max-DD trough day is bucketed by severity (Mild / Moderate / Severe) and by calendar month of the year (M1–M12). Cells show the conditional probability P(trough occurs in this month | this severity bucket). Existing DD charts show how deep and how long — this shows when. Useful for cash-reserve and hedging seasonality: is your DD risk uniform across the year, or does it concentrate?

Sampling method: Block bootstrap — Politis-Romano stationary, mean block length ≈ n1/3 days with per-sim ±2 perturbation. Preserves clustered DD episodes so trough-timing distribution is realistic.

MAE for Winning Paths: The Toll Paid For Good Years (Monte Carlo)

Among 10,000 bootstrapped 252-day years, filter to sims that finished positive, then histogram the worst intra-period drawdown (MAE — Maximum Adverse Excursion) each of those winning years endured. Even paths that end green typically visit a nontrivial trough at some point. Reframes DDs as "the price of admission for a positive year" rather than as failure signals. Median MAE-among-winners line marks the typical toll.

Sampling method: Block bootstrap — Politis-Romano stationary, mean block length ≈ n1/3 days with per-sim ±2 perturbation. Preserves clustered drawdown episodes so MAEs remain realistic in shape.

Recovery From Arbitrary DD Grid (Monte Carlo)

Suppose the portfolio just drew down by X%. What's the probability of reclaiming the prior peak within Y months? Cells show P(recovered) across 10,000 bootstrapped forward paths. Rows = starting DD depth (5%–40%); columns = time horizons (3mo–36mo). Lets you stress-test drawdown depths well beyond anything actually lived through, using only your own return distribution.

Sampling method: Block bootstrap — Politis-Romano stationary, mean block length ≈ n1/3 days with per-sim ±2 perturbation. Recovery timing depends on preserving grinding-uptrend and stalled-vol dynamics.

First-Passage Time to −10% Drawdown (Monte Carlo)

Downside symmetric of the "Probability of New All-Time High" chart. From the portfolio's current level, block-bootstrap 10,000 forward paths and record the FIRST trading day each sim's running drawdown (from its own rolling peak) touches or exceeds the threshold. Bars show P(hit −X% DD by day N) at horizons 30d / 60d / 90d / 6mo / 1y / 2y / 3y / 5y. Answers WHEN a threshold breach hits — not just IF. Drag the threshold slider in 1% increments from 5% to 30% drawdowns.

Sampling method: Block bootstrap — Politis-Romano stationary, mean block length ≈ n1/3 days with per-sim ±2 perturbation. DD-breach timing depends on preserving vol clusters; iid would systematically UNDER-estimate breach probability at every threshold. One 5y bootstrap runs once; each threshold slice is derived from the same paths.

DD Threshold: −10%

Time Underwater Forecast: % of Next 12 Months Below Peak (Monte Carlo)

The "time-in-pain" complement to max-DD charts — a shallow DD can still be brutal if you spend 60% of the year underwater. For each sim in a 10,000-path block-bootstrap, count days where path[t] < running peak, divide by the horizon length. Histogram shows the per-horizon distribution; vertical lines mark median, 25th/75th percentile, and 90th. Your realized underwater fraction across full portfolio history is shown for context. Drag the horizon slider to replay any horizon from 1 to 36 months — the underlying 36-month bootstrap runs once, each horizon is a checkpoint on the same paths.

Sampling method: Block bootstrap — Politis-Romano stationary, mean block length ≈ n1/3 days with per-sim ±2 perturbation. Underwater fraction depends on how losses cluster into contiguous DD episodes; iid would produce artificially LOWER fractions because scattered losses recover to peak frequently while clustered losses stay below peak for extended runs.

Horizon: 12 months

Peak-to-Peak Duration: Days Between All-Time Highs (Monte Carlo)

The FREQUENCY of pain, distinct from the DEPTH of pain shown by max-DD charts. Every time the equity curve makes a new high, the interval since the previous high is recorded. Chart overlays two histograms: your historical peak-to-peak intervals (blue) and the same distribution generated by 10,000 block-bootstrap forward paths (purple). Median, 90th, and 99th percentile reference lines mark typical vs long-tail intervals. "Days since last ATH" annotation tracks the currently-open interval (a lower bound; the true interval isn't known until the next ATH prints).

Sampling method: Block bootstrap — Politis-Romano stationary, mean block length ≈ n1/3 days with per-sim ±2 perturbation. Peak-to-peak intervals are driven by clustering of losing/winning days into runs; iid would understate long intervals by breaking up the runs that generate multi-month gaps between ATHs.

Longest Losing Streak Forecast: Next 12 Months (Monte Carlo)

Forward projection of the longest run of consecutive losing days you should brace for. Complements the historical loss-streak-exceedance chart with a look ahead. Block-bootstrap 10,000 3-year forward paths runs ONCE; each horizon on the slider is a checkpoint on the same paths (longest streak so far is monotone-nondecreasing in horizon). Histogram shows the per-horizon distribution; vertical lines mark median, 90th, and 99th percentile. Your current open streak and realized max streak from history are annotated for context. Drag the horizon slider to replay any horizon from 1 to 36 months.

Sampling method: Block bootstrap — Politis-Romano stationary, mean block length ≈ n1/3 days with per-sim ±2 perturbation. Streak length is a directly clustered phenomenon; iid would produce artificially SHORTER streaks because it destroys the day-to-day sign persistence that generates long runs of losers in real markets.

Horizon: 12 months

Safe Withdrawal Rate Curve (Monte Carlo)

How much can you safely withdraw each month? For each monthly withdrawal rate (as % of starting NAV, held constant in dollar terms — so the answer is scale-invariant: same curves whether starting NAV is $10K or $10M), we simulate 10,000 forward paths of daily returns with a monthly-lump withdrawal at the start of each trading month (Bengen/Trinity convention). A path fails ("ruin") the moment NAV literally hits zero — the account runs out of money. Not-growing / slowly-declining paths still count as survivors as long as NAV > 0 at every point in the horizon. The four curves show P(survival) over 3Y / 5Y / 10Y / 50Y as you crank the withdrawal rate higher. Read the SWR directly: where each curve crosses the dashed 95% or 99% reference line is your Safe Withdrawal Rate for that horizon at that confidence level.

Reading the hover — "median NAV (survivors)": your NAV starts at 1.00× (= 100% of starting capital). At each x-value, hover shows the median ending NAV — expressed as a multiplier of starting capital — across only the paths that survived (didn't hit zero) at that horizon. So 1.50× means the median survivor ended with 50% MORE money than they started with. 0.60× means the median survivor lost 40% along the way but stayed above zero. 2.00× means they doubled. This tells you how much cushion / wealth remains in typical surviving paths — survival % says "will I not go broke," median NAV multiplier says "if I don't go broke, roughly what's left."

Sampling method: Block bootstrap — Politis-Romano stationary, mean block length ≈ n1/3 days with per-sim ±2 perturbation. Sequence-of-returns risk depends on clustering; iid resampling would systematically UNDERSTATE ruin probability.

Custom horizon: 20 years
Withdrawal rate: 2.00%/mo

Terminal Wealth CDF at 10-Year Horizon (Monte Carlo)

How much wealth is left at the end? The SWR curve above tells you the probability of not running out of money. This chart tells you what your ending NAV looks like — as a multiple of starting capital — after a chosen horizon under a fixed monthly withdrawal rate. Four rates spanning very safe → moderately aggressive (0.25%, 0.5%, 1%, 2% of starting NAV/mo). Each curve is a Cumulative Distribution Function (CDF) over 5,000 forward paths: read the y-value at x=1.0× to see "% of paths that ended with less than starting capital." Ruined paths sit at NAV=0, so the leftmost value of each curve = ruin fraction at that rate. Drag the horizon slider to replay the chart at any horizon from 1 to 50 years, and use the NAV threshold slider below it to lock in a specific NAV multiplier — a pink vertical line appears at that value on the chart, and the readout panel shows the exact P(terminal NAV ≤ threshold) for each of the four rates.

How to read the CDF: the curve is P(terminal NAV ≤ X) plotted against X. Steep segments = lots of paths concentrated in that NAV range. Flat segments = few paths there. Where the curve starts above y=0 tells you the ruin fraction — e.g. a curve that starts at y=30% means 30% of paths went to zero. The vertical dashed line at 1.00× is breakeven (survived without gaining or losing capital); anything left of the line = shrunk. Legend shows ruin % and median terminal NAV for each rate at the selected horizon.

Sampling method: Block bootstrap — Politis-Romano stationary, mean block length ≈ n1/3 days with per-sim ±2 perturbation. Same reason as the SWR curve: sequence-of-returns clustering drives terminal wealth dispersion; iid would understate the left tail. Each sim runs the full 50-year horizon; NAV is snapshotted at every anniversary so the slider replays previously-computed distributions with no recomputation.

Horizon: 10 years
NAV threshold: 1.00×

Risk Metrics vs SPY

Realized headline risk metrics for the portfolio and SPY computed over the same aligned daily-returns window since inception. Direction of "better" differs by metric — Sharpe/Sortino/Calmar/Skewness reward higher values, Volatility and Excess Kurtosis reward lower. Green in the "Diff" column means the portfolio wins on that metric.

Metric Portfolio SPY Diff vs SPY
Sharpe (annualised) 1.69 1.36 +0.32
Volatility (annualised) 18.47% 15.90% +2.57%
Sortino (annualised) 2.42 2.05 +0.38
Calmar 1.76 1.21 +0.55
Skewness (daily) -0.51 0.97 -1.48
Excess Kurtosis (daily) 4.25 21.15 -16.89

Rolling Volatility (Annualised)

Annualised standard deviation of daily returns over rolling windows (10, 50, 100 days). Higher values = more volatile periods. Useful for spotting regime changes — when vol spikes, risk is elevated.

Rolling Sharpe Ratio

Rolling annualised Sharpe ratio (risk-free rate = 0). Measures return per unit of total risk. Values above 1.0 = strong risk-adjusted returns; below 0 = losing money. Two windows (50-day, 100-day) show short- and medium-term trends.

Rolling Sharpe with 5–95% Bootstrap CI Band

60-day rolling Sharpe (line) with the shaded 5th–95th percentile band from 200 bootstrap resamples of each rolling window. Answers "is the rolling Sharpe I'm reading statistically meaningful, or noise within CI?" When the band is wide relative to the line, the point estimate is unreliable (short sample within window). When zero is inside the band, the Sharpe is not distinguishable from zero at 90% confidence.

Sampling method: IID bootstrap — each day resampled independently within each 60-day window. Block bootstrap is not used here: the resample is confined to a short window, so a 9-day block length would yield only ~6 blocks per resample and artificially narrow the CI.

Risk-Metric Bootstrap CIs (Monte Carlo)

Runs 10,000 bootstrapped 252-trading-day years and computes six headline risk metrics per simulation — Sharpe, annualised volatility, Sortino, Calmar (on a 1-year sim), skewness, and excess kurtosis. Reports the realized value on all your daily returns alongside the bootstrap median and 95% CI band. If your realized Sharpe sits outside the CI you're either enjoying an abnormally good year or an abnormally bad one relative to your own long-run distribution. If zero sits inside the CI for Sharpe/Sortino, the risk-adjusted return is not statistically distinguishable from zero.

Sampling method: Block bootstrap — Politis-Romano stationary, mean block length ≈ n1/3 days with per-sim ±2 perturbation. Vol clustering must be preserved to get honest CIs on Vol, Sortino, and Calmar.

Metric Realized Bootstrap Median 95% CI Low 95% CI High CI Width

Rolling Sharpe Z-Score

How extreme the current rolling Sharpe is relative to its own history, shown for 25-day and 50-day windows. Values below −1.5σ signal the portfolio is deeply underperforming its own baseline — historically a mean-reversion point and a potential time to add capital. Uses an expanding window for stable z-scores.

Rolling Sortino Ratio

Like Sharpe but only penalises downside volatility (risk-free = 0). A higher Sortino means strong returns with limited downside moves. More relevant than Sharpe for portfolios with asymmetric return profiles (e.g., more small gains than large losses).

Rolling Calmar Ratio

Annualised return ÷ max drawdown over 50-day and 100-day rolling windows. Measures how much return is earned per unit of worst-case loss. Higher = better. Unlike Sharpe, Calmar focuses on tail risk (actual losses) rather than overall volatility.

Rolling CVaR & CVaG (5% Tail)

CVaR (Conditional Value at Risk, also called Expected Shortfall) is the average loss on the worst N% of days within each rolling window — it goes beyond VaR by showing how bad the bad days actually are. CVaG (Conditional Value at Gain) is the mirror image: the average gain on the best N% of days. The blue "Spread" line shows CVaG − |CVaR| — when it's above zero, the portfolio's best days are larger than its worst days (positive tail asymmetry). When it dips below zero, losses on bad days are dominating gains on good days. Drag the tail-threshold slider to sweep N from 1% (extreme tails, small sample) to 10% (moderate tails, dense sample).

Tail threshold: 5%

Rolling Skewness & Kurtosis

60-day rolling skewness (left axis, blue) and excess kurtosis (right axis, orange). Negative skew = more frequent large losses than gains. Positive skew = fatter right tail. Excess kurtosis > 0 = fatter tails than a normal distribution (more extreme days). Negative skew + rising kurtosis = danger zone (left tail fattening). Background is shaded green when skew > 0 & kurtosis < 3, red when skew < 0 & kurtosis > 3.

Portfolio Exposure (% of NAV)

Long, short, net, and gross exposure as a percentage of NAV over time. Net = Long − Short (directional bias). Gross = Long + |Short| (total capital at work). Rising gross with flat net = adding hedged positions; rising net = becoming more directionally exposed.

Open Positions Over Time

Number of distinct open positions held each day, reconstructed from trade entry/exit history. Shows how concentrated or diversified the portfolio is at any point in time.

Weekly Return vs Volatility

Each dot is one trading week. X-axis = 8-week rolling annualized volatility (%), Y-axis = that week's compounded return (%). Green = positive week, red = negative. The regression line and R² show whether higher volatility periods tend to produce larger or smaller returns.

Rolling Entropy of Returns

Shannon entropy of the discretized daily return distribution over a rolling 60-day window (purple, left axis), overlaid with cumulative return (green, right axis). High entropy = returns are spread unpredictably across many bins (noisy, random). Low entropy = returns are concentrated in fewer bins (structured, repeatable edge). Entropy dropping while cumulative return rises = the portfolio is finding a narrow, exploitable pattern. Entropy rising while performance flattens = the return process is becoming noisy and unstructured.

Rolling Hurst Exponent

60-day rolling Hurst exponent estimated via rescaled range (R/S) analysis. H > 0.5 = trending regime (returns are persistent — up days tend to follow up days). H < 0.5 = mean-reverting regime (returns tend to reverse). H ≈ 0.5 = random walk (no memory). The 0.5 reference line marks the boundary between trending and mean-reverting behavior.

Return Autocorrelation (Lag-1)

Each dot plots today's return (Y) against yesterday's return (X). The regression line and R² reveal whether returns are serially correlated. A flat line with low R² = returns are roughly independent day-to-day (random). A positive slope = momentum tendency; negative slope = mean-reversion tendency.

Volatility Autocorrelation (Lag-1)

Each dot plots the forward 3-day realised vol against the prior 10-day trailing vol (non-overlapping windows, log returns). A positive slope and high R² = volatility is "sticky" — elevated vol regimes predict continued high vol. This is the well-known volatility clustering effect.

P&L Velocity, Acceleration & Jerk

Velocity (green) = 10-day EMA of daily returns in bps — are you making money faster or slower? Acceleration (orange) = rate of change of velocity. Jerk (purple dotted) = rate of change of acceleration — spikes flag inflection points where your P&L trajectory is about to shift direction.

Rolling Momentum Z-Score

Z-score of rolling mean return vs historical grand mean at 10-day (cyan), 30-day (yellow), and 60-day (magenta) windows. Values above +2 or below -2 indicate statistically unusual momentum — your recent performance is significantly different from your long-run average.

Rolling Win Rate (Realized Trades)

Percentage of realized trades that were profitable, computed on rolling 20-trade and 50-trade windows. The dashed line shows the overall win rate across all trades. A win rate above 50% combined with a profit factor > 1 indicates a positive edge. Requires trade data.

Rolling Win/Loss Size (Realized Trades)

Rolling average winning trade size (green) vs average losing trade size (red) as a percentage of position value, across 20-trade and 50-trade windows. When avg win > avg loss, winners are larger than losers — a key edge indicator.

Rolling Portfolio Expectancy (Realized Trades)

Expected profit per trade as % of position value = (win_rate × avg_win%) − (loss_rate × avg_loss%). Positive expectancy means the portfolio has an edge. Computed on rolling 20-trade and 50-trade windows.

Trade-Statistics Bootstrap CIs (Monte Carlo)

Resamples the closed-trade P&L list (as % of position cost basis) with replacement 10,000 times to get the 95% confidence interval on each headline trade statistic. Answers the honest question: "given how few trades I've closed, could my win rate secretly be 45% instead of 55%?" The Realized column shows the value computed on your actual closed trades — benchmark this against the CI band and the bootstrap median. If the CI on Expectancy or Profit Factor straddles zero (or 1.0 for PF), the edge is not yet statistically distinguishable from luck.

Sampling method: IID bootstrap — trades are the sampling unit and are treated as independent (block bootstrap over trades has no meaningful notion of contiguous blocks).

Metric Realized Bootstrap Median 95% CI Low 95% CI High CI Width

Win/Loss Size Exceedance (Realized Trades)

Survival function (exceedance probability) for winning and losing trade sizes as % of position value. Shows the probability that a winner/loser exceeds a given size. Steeper drop = more concentrated around small values; fat tail = occasional large wins/losses.

Win Size vs Loss Size Distribution (Realized Trades)

Overlapping histograms of winning trade sizes (green) vs losing trade sizes (red), both as absolute % of position value. Shows the shape of the win and loss distributions — if the green distribution extends further right than the red, winners are typically larger than losers.

Holding Period Exceedance (Realized Trades)

Survival function: P(holding period > N days). Shows the probability that a trade is held longer than N days. Steep early drop = most trades are short-duration. Fat tail = some positions are held for extended periods. Median and mean holding periods marked for reference.

Return Distribution QQ Plot (with 5–95% Bootstrap CI Envelope)

Quantile-quantile plot comparing actual daily returns to a theoretical normal distribution. Each blue dot is one quantile of your daily returns plotted against the corresponding quantile of a normal distribution with the same mean and variance. If returns were perfectly normal, all dots would sit on the orange diagonal reference line. Dots below the line in the left tail = larger losses than normal predicts (fat left tail). Dots above the line in the right tail = larger gains than expected (fat right tail). The shaded orange envelope is the 5–95% range from 10,000 iid bootstrap resamples of your own returns — dots falling outside the envelope are statistically distinguishable from sample-size noise; dots inside are consistent with random sampling variability.

Sampling method: IID bootstrap — each resample draws n returns independently with replacement. Appropriate because we're characterising sampling variability under the null of no serial dependence, which is exactly what the QQ compares against.

Tail Fatness: Worst 50 vs Best 50 Daily Returns by Rank

Overlaid line chart comparing the absolute magnitude of the worst N days (red) vs best N days (green) by rank. Rank 1 = most extreme day for each side. Wherever green is above red = right tail is fatter at that rank. Drag the N slider to look at anywhere from the 10 most extreme days (narrow, big-move focus) to 100 (deep into the body of the distribution).

N (ranks): 50

Daily PnL Exceedance — Up Day vs Down Day (Equity Curve)

Survival function for up days (green) and down days (red) separately, based on equity curve daily returns. X-axis = return magnitude %. Y-axis = P(return exceeds x) among that day type. Steeper curve = returns concentrate at small magnitudes. Fat tail = frequent large moves. Comparing the two curves shows whether big up days or big down days are more common at each magnitude threshold.

Portfolio Equity Curve vs SPY

Cumulative total return of portfolio (cyan) vs SPY (orange) since inception. Both start at 0%. Shows how your portfolio has grown relative to the broad market benchmark over time.

Leverage-Stripped Equity Curve vs SPY

Portfolio returns normalized to 1x leverage by dividing each day's return by that day's gross exposure. If you're running 150% exposure, the day's return is divided by 1.5; at 50% exposure, divided by 0.5. This strips out the leverage effect and shows what your returns would look like at constant 1x exposure — a true apples-to-apples comparison against SPY.

Beta-Adjusted Cumulative Returns (Pure Alpha)

Your daily return minus (rolling 60-day beta × SPY return), cumulated over time. This strips out every dollar the market gave you for free and shows your pure skill equity curve. If this line is flat, your returns are entirely market-driven.

Rolling Alpha & Beta vs SPY (60-Day)

Rolling 60-day OLS regression of portfolio daily returns against SPY. Alpha (green) = annualised intercept (your skill after removing market exposure). Beta (blue, right axis) = market sensitivity. Alpha > 0 means you're generating returns beyond what beta explains.

Alpha Luck Test: Is The Outperformance Real Or Random? (Monte Carlo)

The question: Your realized alpha (annualised return above what SPY's beta explains) is a specific number. But could random luck alone produce a return that good even if the strategy had no real edge? This chart tests that.

How to read it: The gray histogram is the "no-edge world" — the distribution of alphas you'd expect to see across 10,000 simulated portfolios that have zero true alpha (but the same beta and noise level as yours). The white vertical line is your actual realized alpha. If the white line sits deep in the tail of the gray histogram (far to the right of the bulk), luck is a poor explanation — your alpha is statistically significant. If the white line is inside the bulk, luck can explain it.

The verdict box (top-right corner): The one-sided p-value = "chance of a random-luck portfolio matching or beating your alpha." Lower is better. Green = REAL edge (p<5%, 95%+ confidence); yellow = SUGGESTIVE (p 5-20%); red = LUCK plausible (p≥20%). Two-sided p-value asks the same about magnitude in either direction (relevant if you have negative alpha).

Sampling method: IID residual bootstrap (Efron-Tibshirani). Naïvely shuffling portfolio returns while keeping SPY fixed would destroy beta and produce a null centered on the raw portfolio mean — not on zero. Residual bootstrap fixes this: it imposes alpha=0 as the null while preserving beta_hat and the marginal noise structure.

1-Year Terminal Wealth Ratio vs SPY (Monte Carlo)

Distribution of the ratio portfolio_terminal ÷ spy_terminal after N paired trading months, across 3,000 bootstrapped sims. Ratio > 1 = portfolio beat SPY in that simulated window. Vertical line at 1.0 = the "you tied SPY" reference. The annotated P(outperform SPY) is the probability of beating SPY in a random forward window drawn from your own historical joint distribution. Drag the horizon slider to slice the same set of sims at any month from 1 to 60.

Sampling method: Paired block bootstrap — Politis-Romano stationary blocks with same-index draws for portfolio and SPY, preserving same-day correlation. One 60-month simulation per sim; per-month checkpoints let the slider replay any horizon with no recompute.

Horizon: 12 months

Rolling Correlation to SPY (20-Day & 50-Day)

Rolling Pearson correlation between portfolio and SPY daily returns. The 20-day window (cyan) captures short-term regime shifts. The 50-day window (orange) shows the structural relationship. Correlation near 0 = market-neutral. Spikes toward 1.0 during stress = hidden beta exposure.

Relative Strength vs SPY

Ratio of portfolio cumulative growth to SPY cumulative growth over time. Rising line = outperforming SPY. Falling line = underperforming. A value of 1.10 means the portfolio has grown 10% more than SPY since inception.

Up-Capture / Down-Capture Ratio (Rolling 60-Day)

Rolling 60-day capture ratios vs SPY. Up-capture (green) = your avg return on SPY-up days as a % of SPY's avg up-day return. Down-capture (red) = same for SPY-down days. Capture ratio (gold, right axis) = up/down. Ideal: high up-capture, low down-capture, ratio > 1.

SPY Regime Performance

SPY daily returns bucketed into deciles (D1 = worst 10% to D10 = best 10%). Blue bars = your portfolio's average daily return in each regime. Grey bars = SPY's average. Flat portfolio bars = market-neutral. Upward slope = long-biased. Smile shape = convex (ideal).

Regime Volatility

Standard deviation of your daily returns within each SPY decile. Dashed line = SPY's overall volatility. Lower bars in down regimes = better risk control.

Regime Sharpe

Mean / std dev of your daily returns within each SPY decile. Dashed line = SPY's overall Sharpe. Positive bars in down regimes = risk-adjusted alpha even when the market drops.

Market Regime Heatmap

Your average daily return across different market environments. X-axis = SPY 20-day rolling volatility quintile. Y-axis = SPY 20-day rolling return quintile. Green = you profit, red = you lose. Reveals which macro regimes suit your strategy best.

Conditional Return Distribution (SPY Up vs Down Days)

Two overlaid histograms of your daily returns: green = days when SPY was up, red = days when SPY was down. Ideally your down-day distribution is tighter (limited losses) and your up-day distribution is fatter (capturing upside).

Portfolio vs SPY Daily Returns

Scatter of your daily returns vs SPY daily returns. Grey = normal days. Red = worst 10% SPY days (left tail). Green = best 10% SPY days (right tail). Clustering and spread reveal how your portfolio behaves during different SPY regimes.

Rolling Tail Ratio: Portfolio vs SPY (60-Day)

Rolling 60-day ratio of |95th percentile return| to |5th percentile return|. Values > 1 = positive skew (fatter right tail). Cyan = portfolio, orange = SPY. If your tail ratio consistently exceeds SPY's, you have better upside/downside asymmetry.

Drawdown Timing: Portfolio vs SPY

Both drawdown series overlaid. When drawdowns coincide = market-driven losses. When your drawdown deepens while SPY is flat = idiosyncratic blowup worth investigating. Cyan = portfolio, Orange = SPY.

Relative Drawdown (Portfolio − SPY)

Your drawdown minus SPY's drawdown over time. Positive (green fill) = you're in a shallower hole than SPY. Negative (red fill) = you're deeper. Shows active drawdown risk — when this is deeply negative, your losses are exceeding what the market explains.

Daily Return Exceedance: Portfolio vs SPY

Exceedance curves comparing portfolio and SPY daily returns. For up-days: P(return > x). For down-days: P(|return| > x). Heavier right tails on up-days (good) and lighter right tails on down-days (good) indicate favorable return asymmetry vs the benchmark.

Drawdown Exceedance: Portfolio vs SPY

Exceedance curves of drawdown magnitude. Shows P(drawdown > x%) for portfolio vs SPY. If your curve sits below SPY's, your drawdowns are shallower more often — better risk management. Where they cross reveals the drawdown depth at which one dominates the other.

Monthly Excess Return vs SPY

Heatmap of monthly excess return (portfolio − SPY) by year and month. Green = outperformed, red = underperformed. Shows seasonality patterns and how the magnitude of over/underperformance evolves over time.

Excess Return Streak vs SPY

Consecutive trading days of outperformance (green, positive) or underperformance (red, negative) vs SPY. Long positive streaks = persistent alpha. Long negative streaks = periods where your strategy diverged unfavorably from the market.

Regime-Aware Equity Curve

Portfolio (cyan) and SPY (orange) equity curves with background colored by SPY market regime. Regime is determined by SPY price relative to its 50-day and 200-day simple moving averages: green = bull (above both), red = bear (below both), yellow = choppy (mixed). Shows how the portfolio performs across different market environments.

Commission Drag (% of NAV)

Cumulative commissions as % of NAV. Weekly cost = Σ(commission_$ / NAV_$) × 100 per week. Bars show weekly totals; the red area = running cumulative sum. Annualised = (cumulative / trading_days) × 252.

Borrow Costs (% of NAV)

Cumulative stock borrow / short-selling costs as a percentage of NAV. These fees are charged by the broker for borrowing shares to sell short. Higher costs typically come from hard-to-borrow names or elevated short interest.

Margin Interest Cost (% of NAV)

Cumulative cost of borrowing on margin from the broker. Monthly charges are shown as bars; the line tracks cumulative cost as a % of NAV. This is the interest paid for using margin (leverage), separate from stock borrow fees.

Cumulative Returns by Strategy Category (%)

Cumulative return contribution of each strategy category expressed as % of portfolio NAV.

Drawdown by Strategy Category (%)

Peak-to-trough drawdown for each strategy category. Shows the worst decline from the high-water mark within each type — useful for identifying which strategies are driving portfolio drawdowns.

Return Attribution by Strategy Category

Rolling 20-day cumulative return contribution per strategy category. Shows which strategies are carrying performance at any given time. Positive area = adding to returns, negative = dragging.

Order Turnover by Strategy Category

Rolling 20-day order count (entries + exits) per strategy category. Each round-trip trade generates at least two orders. Higher turnover strategies are more active — compare with the equity curve to see if more activity translates to better returns.

Strategy Category Capital Turnover (% NAV)

Rolling 20-day average notional order value (entries + exits) per strategy category as a percentage of portfolio NAV. Includes both buy and sell sides, so this reflects total capital turnover, not net exposure.

Strategy Category Contribution (YTD)

Year-to-date return contribution by strategy category as a share of total portfolio return. Shows which strategies are driving overall performance.

Monthly Returns by Strategy Category

Monthly return heatmap showing performance of each strategy category over time. Green = positive, Red = negative. Spot seasonal patterns in strategy performance.

Strategy Category PnL Distribution (% of Position)

Every trade's PnL as a percentage of position size (cost basis), shown as a dot with jitter. Diamond marks the mean. Shows the full spread and outliers without hiding individual data points.

Profit Factor by Strategy Category

Gross profits divided by gross losses per strategy category. A profit factor above 1.0 means the strategy is profitable overall. Higher = better risk/reward. The dashed line marks the breakeven threshold at 1.0.

Holding Period Distribution by Strategy Category

Every trade's holding period shown as a dot. Diamond marks the mean. Reveals clustering patterns and outlier durations across strategies.

Rolling Expectancy by Strategy Category (% of Position)

Rolling expectancy per strategy (expanding window: 5→10 trades) = (win_rate × avg_win%) − (loss_rate × avg_loss%), where PnL is expressed as % of position value (cost basis). Positive = edge, negative = bleeding. Shows which strategies are currently hot or cold.

Win Rate by Strategy Category

Percentage of trades that were profitable per strategy category. The dashed line marks 50%. A high win rate alone doesn't guarantee profitability — compare with profit factor and avg win/loss size.

Avg Win vs Avg Loss by Strategy Category (% of Position)

Average winning trade size vs average losing trade size per strategy (as % of position value / cost basis). Shows payoff asymmetry — ideally avg win exceeds avg loss. Green = avg win, Red = avg loss.

Win/Loss Streaks by Strategy Category

Longest consecutive winning and losing streaks per strategy category. Long loss streaks indicate drawdown persistence. Long win streaks suggest momentum in edge capture.