Providing liquidity only pays if the trading fees beat what you would have had by simply holding the two tokens. This simulator replays a full-range or concentrated position day by day on your own price file or a scenario path, valued in Canadian dollars, so you see the impermanent loss, the days your range was out of the market, and the fee rate you would have needed to break even.
How to use it
- Name Token A and Token B, and tick “Token B is a US-dollar stablecoin” if it is one (CAD values then use the Bank of Canada rate for each date).
- Enter the Deposit (CAD value).
- Under Liquidity, pick “Full range (classic)” or “Concentrated range”; for a range, set the lower and upper bound as a percentage of the entry price.
- Enter the Fee APR while in range, your own estimate, then set the price path: “Scenario path” (turning points you choose) or “My own prices” (paste or upload A priced in B).
- Read the headline against holding, then the stats, the shaded out-of-range days and the grid of range widths and fee rates.
Why a pool position trails holding
A two-token pool keeps rebalancing as prices move. When Token A rises against Token B, traders buy A from the pool, so you end with less A and more B than you deposited; when A falls, you end with more A. Either way you hold more of whichever token did worse. The gap against simply holding the original tokens is impermanent loss. It depends only on where the pool price ends relative to where you entered, not on the path, and it disappears if the price returns to its starting point.
A concentrated range puts all your liquidity between two prices. Inside the range it behaves like a much larger full-range position, so the same price move costs more and the same trading volume earns more. Outside the range the position is entirely one token, earns nothing, and stops rebalancing until the price comes back.
Worked example: Token A doubles (illustrative)
Suppose you deposit $10,000 at full range when Token A is $2,000 and Token B is a $1 token, and over 365 days A rises in a straight line to $4,000 while B stays at $1. Holding the deposited tokens would end at $15,000. The pool position ends at $14,142.14: you were steadily selling A on the way up. That is an impermanent loss of 5.72%, the same for any doubling, and for any halving too.
Fees decide the outcome. At an assumed 12% fee APR the position earns $1,463.42 and ends $605.56 ahead of holding (+4.04%). At 5% it earns $609.76 and ends $248.11 behind. The fee APR that exactly matches holding is 7.03%. If A had doubled and then come back to $2,000 by day 365, the impermanent loss would be zero and the fees would all be profit.
| Scenario | Impermanent loss | Fees | LP + fees vs holding |
|---|---|---|---|
| A doubles over 365 days, full range, 12% fee APR | −5.72% | $1,463 | +$606 (+4.0%) |
| A doubles over 365 days, full range, 5% fee APR | −5.72% | $610 | −$248 (−1.7%) |
| A halves over 120 days, full range, 12% fee APR | −5.72% | $333 | −$96 (−1.3%) |
| A halves over 120 days, range ±10%, 12% fee APR in range | −32.54% | $57 | −$2,423 (−31.8%) |
| Same range, 40% fee APR in range | −32.54% | $190 | −$2,290 (−30.0%) |
Worked example: a narrow range when the price halves
Now put the $10,000 in a range from 10% below to 10% above A's $2,000 entry price, and let A fall in a straight line to $1,000 over 120 days. The price leaves the bottom of the range within three weeks: the position is in range on 15.7% of days and ends holding only Token A, bought all the way down. It is worth $5,141.84 against $7,622.10 for holding.
Even a generous fee rate barely matters once the range is left behind: at 12% a year while in range the position earns $57.12 and ends $2,423.15 behind holding; at 40% it earns $190.40 and is still $2,289.87 behind. The same move at full range costs only the 5.72% impermanent loss and ends $96.00 behind at 12%. A wide position gives up fees per dollar in exchange for never leaving the market.
The fee estimate is the weakest input
No fee rate is quoted here. Pool fees depend on trading volume, the fee tier and how much other liquidity shares them, and they change daily. Enter what you expect your own position to earn per year while the price is inside your range; pool dashboards often show this for a given range. In the grid, other range widths earn that rate scaled by how concentrated they are compared with yours, the theoretical relationship; in practice other positions crowd around the current price and share those fees, so test lower rates too.
What the simulator leaves out
Gas to deposit, adjust and withdraw is not included; add it in the fees vs yield calculator. The price history is the file you supply or a simplified scenario path, one value per day, so moves within a day and a pool price that drifts from the market are not modelled. Rebalancing a range, reward tokens paid on top of fees and smart contract failures are also outside the model. For a quick one-move what-if, including weighted and stable pools, open the “Quick what-if without history” panel.
Tax adds its own steps: CRA's published pages don't address liquidity pools, and depositing tokens for a pool token may itself be a disposition. Record the CAD value of every deposit, fee claim and withdrawal in the ACB calculator.
What this means for you
Compare the pool against holding, not against your deposit: a pool can be up in dollars and still be behind what you'd have had. The tool shows both, and the fee rate that would break even.
Narrow ranges earn more while the price stays inside and nothing once it leaves. Replay your own price history for the pair to see how many days you'd really have been in range.
Definitions
- Impermanent loss
- The shortfall of a pool position against holding the same tokens, before fees. It becomes permanent when you withdraw.
- Concentrated liquidity
- Providing liquidity only between two prices, which multiplies fees in range and stops them outside it.
- Full range
- Liquidity at every price, like a classic constant-product pool.
