Documentation › United Kingdom
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#
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)#
When tokens are acquired and not consumed by same-day or 30-day matching:
Q_new = Q_old + acquired_quantity
C_new = C_old + acquired_cost
On Disposal (Pool Portion)#
When tokens are disposed from the pool:
Disposed_cost = C × (disposed_quantity ÷ Q)
Q_new = Q - disposed_quantity
C_new = C - Disposed_cost
Pool Average Cost#
Average_cost = C ÷ Q
The 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)#
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#
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_quantity
Same_day_cost = Consolidated_acq_cost
Remainder = Consolidated_disp_quantity - Consolidated_acq_quantity
The remainder passes to the 30-day rule.
30-Day Matching Cost (Section 106A)#
Matching Order#
Acquisitions within the 30-day window are matched in chronological order (earliest first):
Window_start = disposal_date + 1 day
Window_end = disposal_date + 30 days
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#
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#
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#
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#
Only the pool portion of a disposal affects the pool:
Pool_disposed_quantity = Total_disposed_quantity - Same_day_matched_quantity - Thirty_day_matched_quantity
Pool_disposed_cost = Pool_cost × (Pool_disposed_quantity ÷ Pool_quantity)
New_pool_quantity = Pool_quantity - Pool_disposed_quantity
New_pool_cost = Pool_cost - Pool_disposed_cost
Tokens matched by same-day or 30-day rules do not affect the pool.
Annual Exempt Amount (AEA)#
Application#
Net_gains = Total_gains - Total_losses
Taxable_gains = MAX(0, Net_gains - AEA)
Estimated_tax = Taxable_gains × CGT_rate
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)#
| Band | Rate |
|---|---|
| Basic rate | 18% |
| Higher rate | 24% |
Income Tax Rate (Separate from CGT)#
Crypto income — staking, mining, airdrops, lending interest — is taxed at the taxpayer’s Income Tax rate, not their CGT rate. The dashboard exposes a separate Income tax rate dropdown with options 20% (basic), 40% (higher), 45% (additional). It controls only the estimated-tax-on-income display; the CGT calculation above is unaffected.
Estimated_income_tax = Total_crypto_income × Income_tax_rate
Total_estimated_tax = Estimated_income_tax + (Taxable_gains × CGT_rate)
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)#
This example demonstrates the complete calculation flow using all three matching rules.
Setup: 100,000 token F in pool, total cost £300,000.
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)#
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)#
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#
| 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#
| 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#
- 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: July 2026 PrivateACB Version: 2.12.0