← Home

Calculation Methodology

Every rule the ActiveACB engine enforces, with CRA references and known limitations.

1. Adjusted Cost Base Pooling

Canadian tax law (ITA s. 47(1)) requires that identical securities held in a taxable account form a single ACB pool. When you buy, the total ACB increases by the full cost (price × quantity + commission). When you sell, you remove a proportional slice of the pool: ACB removed = (ACB per share) × (quantity sold). The remaining shares carry the adjusted per-share ACB forward.

ACB per share = Total ACB of pool ÷ shares currently held. This updates after every buy, sell, corporate action, and ACB adjustment event. The engine processes all transactions chronologically from the earliest date in your upload, regardless of the tax year selected for reporting.

For accurate results, upload your full trading history from account inception. If you have positions that pre-date the data in your export, use the open-positions override at the start of a calculation to seed the opening ACB.

CRA reference: IT-387R2 “Meaning of Identical Properties”

2. Superficial Loss Rules

A superficial loss (ITA s. 54) occurs when you sell a security at a loss and you, or an affiliated person, buys the same or identical property within the 61-day window: 30 days before the sale, the day of the sale, and 30 days after.

The three-limiter formula:
Denied loss = min(window buys, shares held at window end, shares sold at a loss).
The denied amount is added to the ACB of the replacement shares (deferred, not permanent).

CRA references: ITA s. 54, s. 40(2)(g)(i); IT-387R2

3. Foreign Currency (FX) ACB

Every purchase or sale of a foreign security requires converting to CAD at the exchange rate on the settlement date. The exchange rate used is the Bank of Canada nominal rate for that date (or the annual average if the daily rate is unavailable).

USD cash held in your account is itself a foreign currency and subject to FX gain/loss rules. The engine maintains a running ACB pool for USD (and any other foreign currency) just like a security pool. Each purchase of USD (when you buy a USD security) adds to the pool at the rate paid. Each sale of USD (when you sell a USD security) removes a proportional slice and computes a gain or loss.

Annual exemption (ITA s. 39(1.1)): If your total FX gain or loss from all currency dispositions in the year is ≤ $200 CAD, it is not required to be reported. The engine tracks this and notes it in the report when the exemption applies.

CRA reference: ITA s. 39(1), 39(1.1); Folio S5-F4-C1

4. Options

The CRA treats options premiums and the shares acquired or disposed through them as linked events. The engine applies the following four-way matrix:

The engine links exercise and assignment events to the original option opening trade by matching symbol, expiry, strike, and option type within your uploaded data.

CRA reference: IT-479R “Transactions in Securities”; ITA s. 49

5. Corporate Actions

6. T1135 Foreign Property Warnings

If the total cost of your foreign property (securities, real property, and other specified foreign property) exceeds $100,000 CAD at any point in the tax year, you are required to file Form T1135. The engine monitors the running cost of foreign-currency securities and flags a warning when the $100,000 threshold is approached or exceeded based on your uploaded data.

The warning is informational. The engine does not generate a T1135 form. Use CRA My Account or tax software for that.

CRA reference: ITA s. 233.3; Form T1135

7. Test Coverage

The engine runs over 1,200 automated test cases on every release. Test categories include:

8. Known Limitations