Australian CGT Formulas
Technical formulas and calculation logic for Australian CGT as implemented in PrivateACB.
Cost Base per Parcel
Section titled “Cost Base per Parcel”Each acquisition creates a parcel (lot) with a cost base calculated as:
cost_base = purchase_price × quantity + feesExample: Buy 2.0 ETH at A$3,000 each with a A$15 exchange fee:
cost_base = (A$3,000 × 2.0) + A$15 = A$6,015cost_base_per_unit = A$6,015 / 2.0 = A$3,007.50The ATO recognises 5 cost base elements (Section 110-25, ITAA 1997):
- Money paid — purchase price and acquisition fees
- Incidental costs — brokerage, exchange fees, legal costs
- Costs of ownership — interest on money borrowed to acquire the asset (not typical for crypto)
- Capital costs — costs to increase or preserve the asset’s value
- Costs related to CGT event — disposal fees
For most crypto transactions, elements 1 and 2 (purchase price + exchange fees) are the relevant items.
Disposal Gain or Loss
Section titled “Disposal Gain or Loss”When you dispose of crypto, the gain or loss per parcel is:
capital_gain = proceeds - cost_basecapital_loss = cost_base - proceeds (if proceeds < cost_base)Where:
- proceeds = sale price × quantity disposed from this parcel, minus selling fees
- cost_base = cost base per unit of this parcel × quantity disposed from this parcel
Multi-Parcel Disposal (FIFO Example)
Section titled “Multi-Parcel Disposal (FIFO Example)”When a disposal uses multiple parcels:
| Parcel | Qty Used | Cost Base | Proceeds | Gain/Loss |
|---|---|---|---|---|
| Parcel 1 (oldest) | 1.0 | A$50,000 | A$65,000 | +A$15,000 |
| Parcel 2 (next) | 0.2 | A$12,000 | A$13,000 | +A$1,000 |
| Total | 1.2 | A$62,000 | A$78,000 | +A$16,000 |
Each parcel’s gain/loss is calculated independently, then aggregated.
CGT Discount Eligibility
Section titled “CGT Discount Eligibility”A capital gain from a parcel is eligible for the 50% CGT discount if all of these conditions are met:
- The taxpayer is an Australian individual (not a company, super fund, or trust)
- The parcel was held for more than 12 calendar months
- The disposal resulted in a capital gain (not a loss — losses are never discounted)
The 12 Calendar Month Check
Section titled “The 12 Calendar Month Check”eligible = acquisition_date + 12_calendar_months < disposal_dateThis uses calendar months, not a fixed day count:
| Acquisition Date | Disposal Date | Months Held | Eligible? |
|---|---|---|---|
| 15 Jan 2024 | 15 Jan 2025 | Exactly 12 | No (must exceed 12) |
| 15 Jan 2024 | 16 Jan 2025 | 12 months + 1 day | Yes |
| 29 Feb 2024 | 1 Mar 2025 | 12 months + 1 day | Yes |
| 1 Jul 2024 | 30 Jun 2025 | 11 months + 30 days | No |
| 1 Jul 2024 | 1 Jul 2025 | Exactly 12 | No |
| 1 Jul 2024 | 2 Jul 2025 | 12 months + 1 day | Yes |
Net Capital Gain: The Q18 Netting Algorithm
Section titled “Net Capital Gain: The Q18 Netting Algorithm”The ATO’s Individual Tax Return Question 18 uses a specific netting sequence. PrivateACB implements this exactly:
Step-by-Step
Section titled “Step-by-Step”Step 1: Classify all gains non_discount_gains = sum of gains from parcels held ≤12 months discount_eligible_gains = sum of gains from parcels held >12 months total_gains = non_discount_gains + discount_eligible_gains
Step 2: Sum all losses total_losses = sum of all capital losses (absolute value)
Step 3: Apply losses to non-discount gains first remaining_non_discount = max(0, non_discount_gains - total_losses) losses_remaining = max(0, total_losses - non_discount_gains)
Step 4: Apply remaining losses to discount gains remaining_discount = max(0, discount_eligible_gains - losses_remaining)
Step 5: Apply 50% discount discounted_amount = remaining_discount × 50%
Step 6: Net capital gain net_capital_gain = remaining_non_discount + discounted_amountWorked Example
Section titled “Worked Example”| Disposal | Gain/Loss | Discount Eligible? |
|---|---|---|
| BTC sale | +A$40,000 | Yes (held 16 months) |
| ETH sale (Lot 1) | +A$7,500 | Yes (held 19 months) |
| ETH sale (Lot 2) | -A$2,500 | N/A (loss) |
| SOL sale | +A$10,000 | No (held exactly 12 months) |
| ADA sale | -A$200 | N/A (loss) |
Step 1: Non-discount gains = A$10,000 (SOL). Discount-eligible gains = A$47,500 (BTC + ETH Lot 1).
Step 2: Total losses = A$2,700 (ETH Lot 2 + ADA).
Step 3: Apply A$2,700 losses to non-discount gains first: A$10,000 - A$2,700 = A$7,300 remaining non-discount. Losses remaining: A$0.
Step 4: No remaining losses to apply to discount gains: A$47,500 remaining discount-eligible.
Step 5: Discount: A$47,500 x 50% = A$23,750.
Step 6: Net capital gain = A$7,300 + A$23,750 = A$31,050
This is the amount that goes on Question 18 of your Individual Tax Return.
Comparison: Canada vs US vs Australia
Section titled “Comparison: Canada vs US vs Australia”| Formula | Canada | United States | Australia |
|---|---|---|---|
| Cost basis | Pooled average (ACB) | Per-lot cost | Per-parcel cost |
| Gain calculation | Proceeds - ACB per unit | Proceeds - lot cost | Proceeds - parcel cost |
| Loss denial | Superficial loss (30-day) | Wash sale (30-day, optional) | None (mechanical) |
| Holding benefit | None | ST/LT rates (>365 days) | 50% discount (>12 cal. months) |
| Inclusion rate | 50% of net gain | 100% (lower LT rate) | 100% (50% discount first) |
| Loss netting | Losses offset gains freely | ST/LT netted separately | Losses to non-discount first |
| Tax year | Jan 1 – Dec 31 | Jan 1 – Dec 31 | Jul 1 – Jun 30 |
Why the Same Trade Produces Different Results
Section titled “Why the Same Trade Produces Different Results”The same BTC trade history can produce different tax outcomes in each jurisdiction:
- Canada pools all purchases, so the cost basis is a weighted average — individual lot costs don’t matter
- US uses FIFO by default, may have wash sale adjustments, and classifies gains as short-term or long-term for different tax rates
- Australia uses FIFO by default, has no loss denial, and applies the 50% CGT discount (reducing the gain itself, not changing the rate)