Let's say my home currency is USD, but I'm trading a pair of two foreign currencies, e.g. EUR / GBP.

Let's say I open a position by entering a long EUR/ short GBP position; I can represent my position as (x0 EUR, -y0 GBP), with x0, y0 both positive numbers.

Later I partially close the position at a profit (for simplicity let's assume that all three exchange rates (EUR/GBP, EUR/USD, GBP/USD) have moved in my favor), so that my position is now (x1 EUR, -y1 GBP). How would I calculate Realized PnL in USD, given x0, y0, x1, y1, and the three exchange rates EUR/GBP, EUR/USD, GBP/USD at the time of opening and at the time of the second transaction?

The reason it's not obvious to me is that it's unclear to me how to determine what closes a position: e.g. starting with (x0 EUR, -y0 GBP) and having the EUR/GBP rate move in my favor means I could close my position either to (x1 EUR, 0 GBP), or (0 EUR, y1 GBP), depending on whether we think about closing the long position, or closing the short position. Is there any standard practice way of calculating what a closed position is in this case (closing the long or closing the short), or is there a third way of calculating Realized PnL in USD that is symmetrical in this sense?

  • Surely all you can do is use a notional value? What else could there be?
    – Fattie
    Commented Aug 9, 2020 at 14:20
  • 2
    You say this is an 'accounting' question but per your comment on an answer it is actually about accounting for tax purposes. Tax questions require a jurisdiction to be answerable, as not every country uses the same rules. Commented May 2, 2022 at 15:00

3 Answers 3


You can't really. You have balances in 3 currencies. That is what your actual holdings are and what you manage.

You can find a notional P&L if you use a notional rate to convert your balances in the non USD currencies into USD. That gives you a single number which you can use as an estimate of how well you are doing, but remember you still have risk, USD might drop immediately against other currencies so you lose a lot.

You close a position by actually executing a trade to make one currency's balance become 0. This leaves an amount in the other currency and that is your P&L in that currency.

If you need a figure for accounting or tax purposes you will need to ask your accountant or tax authority how to calculate your P&L.

As a note (for simplicity let's assume that all three exchange rates (EUR/GBP, EUR/USD, GBP/USD) have moved in my favour), - that will never happen as in practice the EUR/GBP will be kept in step with the others by arbitrage by the big banks and so all cannot increase at once.

  • Yes, indeed it is for tax purposes. Sadly it is for tax purposes from a more disorganized country where the legislation is so badly written that it doesn't actual specify a method of calculating it. I have contacted the tax authority and they said there is no Forex income tax. I have contacted two consultants and they said there is, but there is no standard method. I was curious if anywhere in the world there exists any standard method, and what it would be.
    – Gabi
    Commented Jun 24, 2020 at 19:32

Think not about positions, but about the value of the assets in your portfolio in your home currency.

It suffices to know the rates in USD, e.g. let Rx = EUR/USD, Ry = GBP/USD, then assuming the "no arbitrage principle", we have EUR/GBP = Rx/Ry. Indeed, since the only thing your tax authority cares about is the value of your assets in USD, whether the "no arbitrage principle" holds is irrelevant, since the EUR/GBP rate is irrelevant as far as the taxman is concerned.

Let x0 and y0 be the balances of EUR and GBP held, respectively, at time t0. Let Rx0 and Ry0 be the values of EUR/USD and GBP/USD at time t0. To clarify, in this way, if you held zero EUR and zero GBP, and then went long on EUR/GBP as you describe (i.e. going long on EUR/USD and shorting GBP/USD), we would have x0 > 0, and y0 < 0.

Similarly, let x1, y1, Rx1, Ry1 be the same quantities at a later time t1.

Then the USD equivalent of the amount of EUR held at time t0 is x0 * Rx0, and likewise, the USD equivalent of the amount of GBP held at time t0 is y0 * Ry0. Thus, the value of our portfolio in USD at time t0 is x0*Rx0 + y0*Ry0.

Similarly, the value of our portfolio in USD at time t1 is x1*Rx1 + y1*Ry1.

Thus, the profit realised from time t0 to time t1 is

(x1*Rx1 + y1*Ry1) - (x0*Rx0 + y0*Ry0).

  • Thanks! This makes sense, however the result seems to depend on the total amount of the portfolio rather than the closed position amount, or another way to put it, is it doesn't deal with my conundrum of how one determines a partially-closed position. To take an actual example (Python code in next comment), using some example rates: EURUSD:1.25, 1.3, GBPUSD: 1.52, 1.55, buying 10 EUR/GBP followed by selling 10 EUR/GBP yields $0.253 PnL, however buying 20 EUR/GBP followed by selling 10 EUR/GBP yields $0.506 PnL. How would you deal with that?
    – Gabi
    Commented Aug 9, 2020 at 11:54
  • from numpy import *; EURUSD = array([1.25, 1.3]); GBPUSD = array([1.52, 1.55]); GBPEUR = GBPUSD / EURUSD; p0 = array([20, -20/GBPEUR[0]]); p1 = p0 - array([10, -10/GBPEUR[1]]); pnl = (p1[0]*EURUSD[1] + p1[1]*GBPUSD[1]) - (p0[0]*EURUSD[0] + p0[1]*GBPUSD[0]); pnl
    – Gabi
    Commented Aug 9, 2020 at 11:54
  • @Gabi, I suppose you would look at only a certain share of the portfolio, or treat the situation as if you had multiple portfolios. In this case, you could e.g. say that your portfolio of 20 EUR/GBP is really two portfolios of 10 EUR/GBP each, and you sell off one of them. In this way, I suppose that if you wanted to concurrently analyse the P&L of multiple positions, you could just treat each position as a distinct portfolio.
    – Jivan Pal
    Commented Dec 28, 2020 at 17:56
  • @Gabi, at any point in time, you can separate your portfolio P into two portfolios P1 and P2 such that P=P1+P2, with e.g. P2 being the portfolio consisting of all assets which you are about to sell, and then consider the P&L of only P2.
    – Jivan Pal
    Commented Dec 28, 2020 at 18:00

Forex can be accounted by accepting the account balance. For example the year beginning account balance is 1000, the total deposits are 200, the total withdrawals are 100, the year ending account balance is 1200, and then the account gain is 1200 - 1000 - 200 + 100 = 100 .

Or the software that I develop can update an increase in account balance with a dividend operation and update a decrease in account balance with an expense operation but with the deposits and withdrawals already input.

Now, straight from my files, here is an example of accounting a EUR/JPY currency pair in a USD account:

EUR/JPY is 122.148 (as 1 EUR buys 122.148 JPY)

USD/JPY is 107.757

[1 / 107.757] = [X / 122.148] with X = 1.1336

and then

1.1336 USD buys 122.148 JPY .


EUR/USD is 1.1336 and so that number could have just been directly pulled to replace 1 EUR buying 122.148 JPY with 1.1336 USD buying 122.148 JPY.

  • What currencies are the balances in and are yor rates bid or ask rates or the rate the spot trades were done at?
    – mmmmmm
    Commented Jun 27, 2020 at 12:44
  • I suppose for a buy-side open position then use the Bid value but for a sell-side open position then use the Ask value. But in a USD account, a EUR/JPY of 122.148 is converted to 1.1336 USD buying 122.148 JPY.
    – S Spring
    Commented Jun 28, 2020 at 23:55

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .