UK Capital Gains Formulas
Technical reference for the mathematical formulas PrivateACB uses to calculate UK Capital Gains Tax. This guide covers the Section 104 pool, cost apportionment for matching rules, and worked examples.
Section 104 Pool Formula
Section titled “Section 104 Pool Formula”Each cryptocurrency has its own Section 104 pool tracking two values:
- Pool quantity (
Q) — total tokens in the pool - Pool cost (
C) — total allowable cost in GBP
On Acquisition (Unmatched)
Section titled “On Acquisition (Unmatched)”When tokens are acquired and not consumed by same-day or 30-day matching:
Q_new = Q_old + acquired_quantityC_new = C_old + acquired_costOn Disposal (Pool Portion)
Section titled “On Disposal (Pool Portion)”When tokens are disposed from the pool:
Disposed_cost = C × (disposed_quantity ÷ Q)Q_new = Q - disposed_quantityC_new = C - Disposed_costPool Average Cost
Section titled “Pool Average Cost”Average_cost = C ÷ QThe average cost per token stays the same after a disposal — only the total quantity and total cost decrease proportionally.
Same-Day Matching Cost (Section 105)
Section titled “Same-Day Matching Cost (Section 105)”Consolidation
Section titled “Consolidation”All same-day acquisitions are consolidated into a single acquisition:
Consolidated_acq_quantity = Σ(all same-day acquisition quantities)Consolidated_acq_cost = Σ(all same-day acquisition costs)All same-day disposals are consolidated into a single disposal:
Consolidated_disp_quantity = Σ(all same-day disposal quantities)Consolidated_disp_proceeds = Σ(all same-day disposal proceeds)Cost Allocation
Section titled “Cost Allocation”If the disposal quantity is less than or equal to the acquisition quantity:
Same_day_cost = Consolidated_acq_cost × (Consolidated_disp_quantity ÷ Consolidated_acq_quantity)If the disposal quantity exceeds the acquisition quantity, only the acquisition quantity is matched:
Same_day_matched_quantity = Consolidated_acq_quantitySame_day_cost = Consolidated_acq_costRemainder = Consolidated_disp_quantity - Consolidated_acq_quantityThe remainder passes to the 30-day rule.
30-Day Matching Cost (Section 106A)
Section titled “30-Day Matching Cost (Section 106A)”Matching Order
Section titled “Matching Order”Acquisitions within the 30-day window are matched in chronological order (earliest first):
Window_start = disposal_date + 1 dayWindow_end = disposal_date + 30 daysCost Allocation Per Acquisition
Section titled “Cost Allocation Per Acquisition”For each acquisition in the window, starting with the earliest:
Matched_quantity = MIN(remaining_disposal_quantity, available_acquisition_quantity)Matched_cost = acquisition_cost × (Matched_quantity ÷ acquisition_quantity)The acquisition’s available quantity decreases as it’s consumed by disposals. Earlier disposals have priority.
Multiple Acquisitions
Section titled “Multiple Acquisitions”If the disposal spans multiple acquisitions:
Total_30day_cost = Σ(Matched_cost for each acquisition)Total_30day_quantity = Σ(Matched_quantity for each acquisition)Any remaining disposal quantity after exhausting the 30-day window passes to the Section 104 pool.
Disposal Gain/Loss
Section titled “Disposal Gain/Loss”Complete Formula
Section titled “Complete Formula”Gain_or_Loss = Proceeds - (Same_day_cost + Thirty_day_cost + Pool_cost)Where:
- Proceeds = total GBP proceeds from the disposal
- Same_day_cost = cost from same-day matching (may be £0)
- Thirty_day_cost = cost from 30-day matching (may be £0)
- Pool_cost = cost from Section 104 pool for remaining quantity (may be £0)
If Gain_or_Loss > 0, it’s a chargeable gain.
If Gain_or_Loss < 0, it’s a capital loss.
Match Type Classification
Section titled “Match Type Classification”PrivateACB classifies each disposal by which rules contributed:
| Match Type | Meaning |
|---|---|
| Same-day | 100% of disposal matched by same-day rule |
| 30-day | 100% of disposal matched by 30-day rule (no same-day) |
| Pool | 100% of disposal matched from Section 104 pool |
| Mixed | Two or more rules contributed to the disposal |
Pool Update After Disposal
Section titled “Pool Update After Disposal”Only the pool portion of a disposal affects the pool:
Pool_disposed_quantity = Total_disposed_quantity - Same_day_matched_quantity - Thirty_day_matched_quantityPool_disposed_cost = Pool_cost × (Pool_disposed_quantity ÷ Pool_quantity)
New_pool_quantity = Pool_quantity - Pool_disposed_quantityNew_pool_cost = Pool_cost - Pool_disposed_costTokens matched by same-day or 30-day rules do not affect the pool.
Annual Exempt Amount (AEA)
Section titled “Annual Exempt Amount (AEA)”Application
Section titled “Application”Net_gains = Total_gains - Total_lossesTaxable_gains = MAX(0, Net_gains - AEA)Estimated_tax = Taxable_gains × CGT_rateAEA Amounts by Tax Year
Section titled “AEA Amounts by Tax Year”| Tax Year | AEA |
|---|---|
| 2024/25 onwards | £3,000 |
| 2023/24 | £6,000 |
| 2022/23 and earlier | £12,300 |
CGT Rates (from 30 October 2024)
Section titled “CGT Rates (from 30 October 2024)”| Band | Rate |
|---|---|
| Basic rate | 18% |
| Higher rate | 24% |
HMRC Rounding
Section titled “HMRC Rounding”HMRC expects pro-rata costs to be rounded up to the nearest pound for allowable costs. PrivateACB maintains full decimal precision internally and applies rounding in reports and PDF exports.
Worked Example: All Three Rules (TC6 / CRYPTO22256)
Section titled “Worked Example: All Three Rules (TC6 / CRYPTO22256)”This example demonstrates the complete calculation flow using all three matching rules.
Setup: 100,000 token F in pool, total cost £300,000.
Transactions
Section titled “Transactions”| Date | Transaction | Quantity | Amount |
|---|---|---|---|
| 31 Jul | Buy | 10,000 | £45,000 |
| 31 Jul | Sell | 30,000 | £150,000 |
| 5 Aug | Sell | 20,000 | £100,000 |
| 6 Aug | Buy | 50,000 | £225,000 |
| 7 Aug | Sell | 100,000 | £150,000 |
Step 1: Build Match Table (Pass 1)
Section titled “Step 1: Build Match Table (Pass 1)”31 Jul disposal (30,000 tokens):
- Same-day: 10,000 tokens from 31 Jul acquisition
- 30-day window (1 Aug — 30 Aug): 6 Aug acquisition has 50,000 tokens
- Matched: 20,000 of 50,000 from 6 Aug
- Remainder: 0 (30,000 = 10,000 same-day + 20,000 thirty-day)
5 Aug disposal (20,000 tokens):
- Same-day: none
- 30-day window (6 Aug — 4 Sep): 6 Aug acquisition has 30,000 remaining
- Matched: 20,000 of 30,000 from 6 Aug
- Remainder: 0
7 Aug disposal (100,000 tokens):
- Same-day: none
- 30-day window (8 Aug — 6 Sep): no acquisitions
- Remainder: 100,000 → pool
Step 2: Process Transactions (Pass 2)
Section titled “Step 2: Process Transactions (Pass 2)”31 Jul acquisition (10,000 tokens, £45,000):
- Matched to 31 Jul disposal → diverted, does not enter pool
31 Jul disposal (30,000 tokens, £150,000):
- Same-day cost: £45,000 (10,000 tokens)
- 30-day cost: £225,000 × (20,000/50,000) = £90,000 (20,000 tokens)
- Pool cost: £0 (0 tokens)
- Gain: £150,000 - £45,000 - £90,000 = £15,000
5 Aug disposal (20,000 tokens, £100,000):
- Same-day cost: £0
- 30-day cost: £225,000 × (20,000/50,000) = £90,000 (20,000 tokens)
- Pool cost: £0
- Gain: £100,000 - £90,000 = £10,000
6 Aug acquisition (50,000 tokens, £225,000):
- 40,000 matched to disposals → diverted
- 10,000 unmatched → enter pool
- Pool update: 100,000 + 10,000 = 110,000 tokens; £300,000 + £45,000 = £345,000
7 Aug disposal (100,000 tokens, £150,000):
- Same-day cost: £0
- 30-day cost: £0
- Pool cost: £345,000 × (100,000/110,000) = £313,636
- Loss: £150,000 - £313,636 = -£163,636
Summary
Section titled “Summary”| Disposal | Match Type | Gain/Loss |
|---|---|---|
| 31 Jul | Mixed (same-day + 30-day) | +£15,000 |
| 5 Aug | 30-day | +£10,000 |
| 7 Aug | Pool | -£163,636 |
| Total | -£138,636 |
Comparison: CA vs US vs AU vs UK
Section titled “Comparison: CA vs US vs AU vs UK”| Formula | Canada | United States | Australia | United Kingdom |
|---|---|---|---|---|
| Cost method | Weighted average (ACB) | Lot cost (per parcel) | Lot cost (per parcel) | Same-day/30-day cost, then pool average |
| Gain formula | Proceeds - ACB per unit × qty | Proceeds - lot cost | Proceeds - lot cost | Proceeds - (SD cost + 30d cost + pool cost) |
| Loss adjustment | Denied loss → added to ACB | Deferred loss → added to replacement basis | None | No adjustment — matching changes cost used |
| Inclusion/discount | 50% inclusion rate | ST/LT rates | 50% discount (>12 months) | AEA deduction (£3,000) |
| Tax formula | (Gain × 50%) × marginal rate | ST @ ordinary + LT @ LTCG rate | Q18 netting then discount | (Net gains - AEA) × CGT rate |
Related Guides
Section titled “Related Guides”- UK Capital Gains Calculation — Dashboard walkthrough and workflow
- UK Matching Rules (S104/S105/S106A) — Detailed rule explanations with worked examples
- UK Tax Reports — Guide to all 5 UK reports
Last Updated: March 2026 PrivateACB Version: 2.4