Skip to content

Australian CGT Formulas

Technical formulas and calculation logic for Australian CGT as implemented in PrivateACB.

Each acquisition creates a parcel (lot) with a cost base calculated as:

cost_base = purchase_price × quantity + fees

Example: 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,015
cost_base_per_unit = A$6,015 / 2.0 = A$3,007.50

The ATO recognises 5 cost base elements (Section 110-25, ITAA 1997):

  1. Money paid — purchase price and acquisition fees
  2. Incidental costs — brokerage, exchange fees, legal costs
  3. Costs of ownership — interest on money borrowed to acquire the asset (not typical for crypto)
  4. Capital costs — costs to increase or preserve the asset’s value
  5. Costs related to CGT event — disposal fees

For most crypto transactions, elements 1 and 2 (purchase price + exchange fees) are the relevant items.

When you dispose of crypto, the gain or loss per parcel is:

capital_gain = proceeds - cost_base
capital_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

When a disposal uses multiple parcels:

ParcelQty UsedCost BaseProceedsGain/Loss
Parcel 1 (oldest)1.0A$50,000A$65,000+A$15,000
Parcel 2 (next)0.2A$12,000A$13,000+A$1,000
Total1.2A$62,000A$78,000+A$16,000

Each parcel’s gain/loss is calculated independently, then aggregated.

A capital gain from a parcel is eligible for the 50% CGT discount if all of these conditions are met:

  1. The taxpayer is an Australian individual (not a company, super fund, or trust)
  2. The parcel was held for more than 12 calendar months
  3. The disposal resulted in a capital gain (not a loss — losses are never discounted)
eligible = acquisition_date + 12_calendar_months < disposal_date

This uses calendar months, not a fixed day count:

Acquisition DateDisposal DateMonths HeldEligible?
15 Jan 202415 Jan 2025Exactly 12No (must exceed 12)
15 Jan 202416 Jan 202512 months + 1 dayYes
29 Feb 20241 Mar 202512 months + 1 dayYes
1 Jul 202430 Jun 202511 months + 30 daysNo
1 Jul 20241 Jul 2025Exactly 12No
1 Jul 20242 Jul 202512 months + 1 dayYes

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 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_amount
DisposalGain/LossDiscount Eligible?
BTC sale+A$40,000Yes (held 16 months)
ETH sale (Lot 1)+A$7,500Yes (held 19 months)
ETH sale (Lot 2)-A$2,500N/A (loss)
SOL sale+A$10,000No (held exactly 12 months)
ADA sale-A$200N/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.

FormulaCanadaUnited StatesAustralia
Cost basisPooled average (ACB)Per-lot costPer-parcel cost
Gain calculationProceeds - ACB per unitProceeds - lot costProceeds - parcel cost
Loss denialSuperficial loss (30-day)Wash sale (30-day, optional)None (mechanical)
Holding benefitNoneST/LT rates (>365 days)50% discount (>12 cal. months)
Inclusion rate50% of net gain100% (lower LT rate)100% (50% discount first)
Loss nettingLosses offset gains freelyST/LT netted separatelyLosses to non-discount first
Tax yearJan 1 – Dec 31Jan 1 – Dec 31Jul 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)