Worked example
A Polish investor buys 100 shares at $100 when the NBP rate is 3.80 PLN/USD, and sells them at $95 when the rate is 4.40 PLN/USD. The broker app shows a loss of $500. The tax return shows a gain of 3 800 zł and a bill of 722 zł.
| Cost, 100 × $100 × 3.80 | 38 000 zł |
| Proceeds, 100 × $95 × 4.40 | 41 800 zł |
| Taxable gain | 3 800 zł |
| — of which the share price | −1 900 zł |
| — of which the exchange rate | 5 700 zł |
| Belka tax at 19 % | 722 zł |
Because the two are measuring in different currencies. A broker reports in the currency the account is held in and has no idea where you are tax resident, so its profit figure is the price move alone. A tax return is computed in your home currency: the purchase is converted at the rate on the day you bought, the sale at the rate on the day you sold. Every exchange-rate move between those two dates lands inside the taxable gain.
This is not an edge case. Between 2021 and 2025 the złoty, the pound and the yen each moved more than 20 % against the dollar. A US-listed holding bought before such a move and sold after it can be a loss at the broker and a taxable gain at home at the same time, and both numbers are correct.
The home-currency gain decomposes exactly, with nothing left over:
| Asset part | units × (sell price − buy price) × rate on the buy date |
| Currency part | units × sell price × (rate on the sell date − rate on the buy date) |
There is a second consistent reading, which values the currency move against the cost instead and leaves a cross term to allocate. Neither is more correct; what matters is saying which one is on screen. This page uses the first, and every figure it prints can be checked by hand from the two rows above.
That is a question about your own rulebook, not about arithmetic, so this tool asks for the rate rather than guessing it. The rules that catch people out:
The rate that matters is the one that applied on the day of the trade. A portfolio tool that converts everything at today's rate — which is what most of them do — produces a cost basis that changes every morning, and a tax figure that cannot be reconciled with anything. Storing the rate alongside the transaction is a schema decision, and it is why retrofitting this into an existing tracker is so much harder than building it in.
In most countries, yes. Poland, Germany, the Netherlands and the United States all compute the gain in the home currency: the cost is converted at the rate on the purchase date and the proceeds at the rate on the sale date. If the home currency weakened between those two dates, the difference is a taxable gain even though the position was flat in its own currency.
It depends on the country. Poland uses the NBP average rate of the last business day before the transaction. Germany and the Netherlands generally use the rate on the transaction date. The United States allows the spot rate on the date of the transaction. Enter whichever rate your rulebook names; this tool does the arithmetic, not the rate selection.
A broker reports in the account currency and does not know your tax residence, so it cannot convert anything. Its profit figure is the price move alone. A tax return is computed in your home currency, so it also contains every exchange-rate move between purchase and sale. The two numbers answer different questions and rarely match.
Yes. If the asset fell 5 % in its own currency while your home currency fell 15 % against it, the sale still converts into more home currency than the purchase cost, and that difference is the taxable gain. This is the single most common surprise for cross-border investors.