Statistics for Traders #45: Fisher's exact test 2x2 — the small-sample joint-tail generalization of Stats #40-#44. Applied to today's slot 1 GBPUSD 5m double-tail unanimity (big_miss 4-of-4 DOWN + big_beat 3-of-3 UP): hold both row totals (4, 3) and column totals (4, 3) fixed, enumerate the 4 possible 2x2 tables, and read the observed table's hypergeometric probability directly. Result: p = C(4,4)·C(3,0) / C(7,4) = 1/35 = 0.0286 (one-sided) = 1/35 = 0.0286 (two-sided). Rejects a fair-tail null at 5% where 2 of 4 single-tail intervals fail. Same 1/35 on today's slot 5 EURGBP mirror 2x2.
The Fisher’s exact test 2x2— under the null “row (miss/beat tail) is independent of column (down/up direction),” hold both row totals AND both column totals fixed, and enumerate all 2x2 tables with those marginals. The observed table’s hypergeometric probability is exactly the exact p-value. Applied to today’s slot 1 GBPUSD 5m double-tail unanimity 2x2 [[4,0],[0,3]]: p = C(4,4)·C(3,0) / C(7,4) = 1/35 = 0.0286. Rejects the fair-tail null where Rule of Three, Clopper-Pearson, and Agresti-Coull all fail (upper bound at n=4 straddles 50%); joins Wilson and Jeffreys in rejecting. Same p on today’s slot 5 EURGBP mirror 2x2.

The derivation, verbatim
Let X be the number of DOWN cells in the big_miss row. The conditional distribution of X given both row totals and both column totals is hypergeometric:
P(X = x) = C(row1, x) · C(row2, col1 - x) / C(N, col1)
where N = 7 total observations, row1 = 4 big_miss prints, row2 = 3 big_beat prints, col1 = 4 total DOWN observations. X ranges from max(0, col1 - row2) = 1 to min(col1, row1) = 4 — four possible tables:
| x (DOWN big_miss) | Table | P(X=x) | Cumulative from top |
|---|---|---|---|
| 1 | [[1,3],[3,0]] | 4/35 = 0.1143 | 35/35 |
| 2 | [[2,2],[2,1]] | 18/35 = 0.5143 (mode) | 31/35 |
| 3 | [[3,1],[1,2]] | 12/35 = 0.3429 | 13/35 |
| 4 | [[4,0],[0,3]] (observed) | 1/35 = 0.0286 | 1/35 |
Sum = 35/35 = 1 ✓. One-sided p (as-extreme-or-more in the observed direction) = P(X ≥ 4) = 1/35 = 0.0286. Two-sided p (Fisher’s standard: sum of tables with probability ≤ observed) is also 1/35 = 0.0286, because under the observed marginals (col1=4 > row2=3), the reverse extreme x=0 is infeasible — the domain has just four values. The two-sided sum has one term, exactly the observed table.
Cross-method comparison — slot 1 big_miss 0-of-4 UP reading
| Method (day landed) | Reading | Rejects fair-tail? |
|---|---|---|
| Rule of Three (#40, 2026-09-09) | up-rate [0%, 52.71%] | no (upper > 50%) |
| Clopper-Pearson (#41, 2026-09-10) | up-rate [0%, 60.24%] | no |
| Wilson score (#42, 2026-09-11) | up-rate [0%, 48.99%] | REJECTS |
| Agresti-Coull (#43, 2026-09-12) | up-rate [0%, 54.60%] | no |
| Jeffreys (#44, 2026-09-13) | up-rate [0%, 44.48%] | REJECTS (tightest upper) |
| Fisher exact 2x2 (#45, today) | p = 1/35 = 0.0286 | REJECTS (both tails) |
Only Wilson and Jeffreys reject the fair-tail null with the single-tail methods; RoT, CP, and AC fail because their upper bound sits at the boundary of support and crosses 50%. The Fisher’s exact 2x2 combines both tails at once and rejects with an unambiguous p = 1/35.
Same test on today’s slot 5 EURGBP mirror 2x2
Slot 5 EURGBP 5m 2x2 is [[4,0],[0,3]] with columns labelled UP/DOWN instead of DOWN/UP. The marginals are identical (row totals 4, 3; column totals 4, 3), so the hypergeometric probability of the observed table is identical: 1/35 = 0.0286. Direction (miss = UP on EURGBP, miss = DOWN on GBPUSD) is captured by which column carries the marginal; the test itself reads the same value both ways. That’s the tightest cross-pair replication a Fisher’s exact 2x2 delivers: the SAME 7-observation double unanimity produces the SAME 1/35 on both sides of the antipodal mirror.
Verification note
Hypergeometric distribution and both p-values computed by Python enumeration of C(4,x)C(3,4-x)/C(7,4) for x in 1..4, cross-checked against scipy.stats.fisher_exact([[4,0],[0,3]]). Chart built via a one-off script reusing scripts/insights-charts/svg.ts + theme.ts + sharp, not committed under scripts/. See today’s PT #45 for Fisher’s own derivation of this test in JRSS 98(1):39-82 Section “Example 1. 2 X 2 table.”