← Documentation

EOFY Tax-Loss/Gain Correlation

Does a stock's own Jul-Mar return predict its own Apr-Jun return, year after year?

What it is

The Australian financial year (FY) runs 1 July → 30 June. 30 June is also the deadline for realising capital losses (or gains) for tax purposes, which concentrates a wave of selling — and sometimes buying — into the last quarter of the FY.

This page tests a simple, stock-specific question: for a given symbol, does its return over the first nine months of the FY (Q1-3, Jul-Mar) correlate with its return over the final three months (Q4, Apr-Jun)? Unlike the lead-lag correlations page, this is not cross-sectional — each stock is tested only against its own history. A stock with 20 years of listed history contributes up to 20 (Q1-3, Q4) pairs to its own r.

A negative r means a strong Jul-Mar run tends to be followed by a weak Apr-Jun quarter (and vice versa) — consistent with profit-taking or tax-loss-selling reversal. A positive r means the trend tends to continue into Q4 — momentum rather than reversal.

⚠ This is a historical pattern in one stock's own returns, not a cross-sectional edge shared by many stocks at once. A high |r| with few years of history (n_years close to the floor of 5) can look dramatic and still be noise — check n_years and fdr_p together, not r alone.

How the analysis works
FY windows and returns

For FY "N" (e.g. FY2025-26 = 1 Jul 2025 → 30 Jun 2026): Q1-3 runs 1 Jul (N-1) → 31 Mar (N), and Q4 runs 1 Apr (N) → 30 Jun (N). Each window's return is computed from the last available close at or before the start date to the last available close at or before the end date. Consecutive FYs share the same 30 June boundary close, so it's computed once and reused as both the exit of one FY's Q4 and the entry of the next FY's Q1-3.

If the closest available trading day to a boundary is more than 10 calendar days away (a halted or highly illiquid stock), that FY is skipped rather than using a stale price.

Split and consolidation guard

Raw end-of-day price history is not always split-adjusted at the source. Two guards protect against this showing up as a fake extreme return:

Excluded FYs still show up in the detail-drawer chart (as grey ✕ markers) so you can see what was left out and why, but they are not used in the correlation, the mean/std figures, or the regression line.

Minimum sample size

A stock needs at least 5 included FY pairs before it gets a row at all. n_years in the table is the count of FYs actually used after the guards above — not the stock's total years of listed history. Statistically, n=5 needs |r| ≈ 0.88 to reach p < 0.05, so short histories only surface at all when the pattern is very strong; use the min-years filter to require more before trusting a row.

Multiple-testing correction

Every eligible stock (currently listed, ≥5 included FYs — around 1,500 symbols) gets one correlation test. At a raw p < 0.05 threshold that alone would produce roughly 75 false positives by chance. Benjamini-Hochberg FDR correction is applied across the full set of p-values in one pass, producing the fdr_p column — this is the number to check before treating a result as real.

How to use the page
Filters (left sidebar)
ControlWhat it does
Industry Restrict to one GICS industry. Leave blank to see all industries.
Market cap min/max Filter by current market cap, in $M. Market cap is computed live (shares outstanding × latest close), not a stale snapshot.
Min years Minimum number of included FY pairs (default 8). Raise this to focus on stocks with a longer, more trustworthy history; lower it to see newer listings.
Min |r| Minimum absolute correlation strength (default 0.20). Raise it to see only the strongest self-relationships.
Direction Positive = trend tends to continue into Q4 (momentum). Negative = strong Q1-3 tends to reverse in Q4 (consistent with tax-loss/gain selling). Both shows everything.
Results table

Click any column header to sort (sorting happens on the server, over the full filtered set — not just the rows on screen). Click a row to open the detail drawer on the right. A ★ badge next to the symbol marks fdr_p < 0.05.

ColumnDescription
YearsNumber of FY pairs actually used (after split/outlier exclusions).
rPearson correlation between the stock's own Q1-3 and Q4 returns across those years.
FDR pBenjamini-Hochberg corrected p-value. Below 0.05 is the bar for "probably not chance."
Dirpositive (momentum) or negative (reversal) — the sign of r in plain words.
Mkt CapCurrent market capitalisation.
Detail drawer

Clicking a row opens a side panel with:

💡 If most of the scatter points cluster near the regression line except one or two outliers dragging it, treat the fit with more caution than fdr_p alone suggests — a handful of years can dominate a Pearson r when n_years is small.

Sub-window tabs: Late May / Rest of Q4

The three tabs above the table (Full Quarter, Late May, Rest of Q4) ask a finer question: is the Q1-3-vs-Q4 pattern spread evenly across the whole quarter, or concentrated in a specific part of it? Q4's 91 days were numbered day 1 (1 Apr) through day 91 (30 Jun), then split into Late May = day 57-70 (roughly 27 May-10 Jun) and Rest of Q4 = day 71-91 (10-30 Jun). Everything else about the methodology — split/outlier guards, FDR correction, min-years floor — is identical to the Full Quarter tab; only the end date of the return window changes.

The Late/Rest split wasn't arbitrary: an earlier investigative pass pooled the 50 stocks with the strongest Full Quarter |r| and broke their Q4 into 13 individual weeks. Two adjacent weeks — day 57-63 and day 64-70 — stood out sharply (r ≈ 0.22 and 0.26, both p < 1e-5) against a scatter of weak, mostly non-significant weeks either side. Late May is that combined two-week window; Rest of Q4 is everything after it, through 30 June.

⚠ That 50-stock pooled test is not on this page and should not be treated as confirmation by itself: it pre-selected stocks that were already known to correlate on the Full Quarter test, so a strong pooled r within that group is partly circular — of course a hand-picked correlated subset also correlates on a sub-window of the same data. The Late May / Rest of Q4 tabs you see here are the independent check: every eligible current stock (~1,500, not a pre-selected 50) gets its own r for each window, exactly like the Full Quarter tab.

Result of that independent, full-universe check: Late May clears FDR p < 0.05 for about 1.3% of eligible stocks, versus about 0.6% for Rest of Q4 — roughly double the hit rate. That's a real, reproducible difference between the two windows, but keep the base rate in view: even Late May's stronger showing means the overwhelming majority of stocks show no significant pattern in either window. Use these tabs to find the specific stocks where the pattern holds, not as evidence of a market-wide late-May effect.

Interpreting the results
Positive vs negative direction

Negative (reversal) is the pattern the tax-loss-selling theory predicts: a stock that has run up over Jul-Mar attracts profit-taking into 30 June, or a stock that has fallen attracts bargain-hunting after loss-sellers are done. In practice this is the more common direction among the significant results.

Positive (momentum) means Q4 tends to extend whatever happened in Q1-3 rather than reverse it — the opposite of the tax-effect story, and worth checking for an alternative explanation (e.g. a stock whose Q1-3 news flow keeps compounding into Q4 earnings season).

What makes a row worth examining
What to be cautious about
Worked example

Suppose you see this row:

SymbolIndustryYearsrFDR pDir
WBCBanks37-0.680.0014negative

Reading this: across 37 FYs of Westpac's trading history (1988-89 to 2025-26), the average Q1-3 return was +17.6% and the average Q4 return was -1.0% — Q4 gives back almost none of a typical Jul-Mar gain on average, but the correlation of -0.68 says the relationship is stronger than the averages alone suggest: FYs with the biggest Jul-Mar rallies tend to have the weakest (or most negative) Apr-Jun quarters, and FYs with a soft Q1-3 tend to see a comparatively better Q4.

With fdr_p = 0.0014 (well under 0.05) and n_years = 37 (well above the floor of 5), this is a well-supported result, not a small-sample artifact. The direction is consistent with the tax-loss/gain-selling theory: a large, widely-held stock like WBC attracts profit-taking and portfolio rebalancing into the 30 June deadline after a strong run.

This does not mean Q4 will always be weak after a strong Q1-3 — it means that, historically, it has tended to be. The scatter chart in the detail drawer is worth checking before relying on this: it shows whether the -0.68 comes from a broadly consistent pattern across most of the 37 years, or from a few extreme years pulling the line.