4.28 How FX PnL Actually Works

FX profit is born in the quote currency, not in pips. EURUSD pays in one step; USDJPY needs converting back to dollars. Get the per-pair pip value wrong and you mis-size every trade.

4.28 How FX PnL Actually Works

A trader buys one million dollars of EURUSD and the pair moves 20 pips in their favor. The profit is 200 dollars. Wait, no: it is 2,000 dollars. The confusion is the whole reason this article exists. FX profit and loss is not "pips times a fixed dollar value" the way a futures contract is, because a currency pair is one currency priced in another, and the profit lands in the quote currency, which may not be the one your account is denominated in. Get the pip value wrong and you size every position wrong, which means you risk-manage every position wrong.

The mechanics are not hard, but they are specific, and they differ between a pair like EURUSD where the dollar is the quote currency and a pair like USDJPY where the dollar is the base. A system that sizes positions by a single fixed "dollar per pip" across all pairs is mis-stating its risk on every pair where that assumption is false, which is most of them.

This article works the FX PnL calculation end to end, building on the tier and execution structure from "Why Retail FX Execution Is Not the Same as Interbank FX". It is the arithmetic foundation for position sizing, and it connects to the order-cost mechanics in "Market Orders vs Limit Orders in FX".

The base case: quote currency is your account currency

Start with the clean case. PnL is reported in the quote currency (the denominator of the pair), and the formula is position size times price change.

$$ \text{PnL} = \text{Position Size} \times \Delta P $$

PnL equals the position size times the change in price. For a one-million-unit EURUSD position that moves 20 pips, the price change is 0.0020, so the PnL is 1,000,000 times 0.0020, equal to 2,000 dollars. The profit is in dollars because USD is the quote currency, and for a USD-denominated account that is the final answer. This is the case that matches intuition, and it is the only case where "pips times a simple value" works without a second step.

The pip value here is fixed and clean: on a one-million EURUSD position, each pip (0.0001) is worth 100 dollars, so 20 pips is 2,000 dollars. The reason a 20-pip move is 2,000 and not 200 is that the position is a million units; the pip value scales with position size, and confusing notional with the round-number "lot" is how the factor-of-ten errors creep in.

The two-step case: base currency is not your account currency

Now the case that trips everyone. When the dollar is the base currency, like USDJPY, the PnL first lands in the quote currency (yen), and you have to convert it back to dollars.

Take a ten-million USDJPY position bought at 101.60 and sold at 101.65, a five-pip move (for JPY pairs a pip is 0.01). The profit in yen is the position size times the price change: 10,000,000 times 0.05, equal to 500,000 yen. That is step one, and it is denominated in yen, not dollars. Step two converts it: divide the 500,000 yen by the current USDJPY rate of about 101.65, giving roughly 4,956 dollars. The profit a USD account actually books is 4,956 dollars, not 500,000 of anything and not a number you can read off the pip count alone.

The general rule: PnL is computed in the quote currency first, then converted to the account currency at the prevailing rate if they differ. For pairs where the quote currency is your account currency, the conversion is trivial (multiply by one). For pairs where it is not, the conversion step is mandatory, and the pip value in your account currency changes as the exchange rate moves, so it is not even constant over the life of the trade.

Why this matters for position sizing

The payoff of getting the arithmetic right is correct risk per trade across pairs, which is the foundation of every sizing rule.

A system that risks a fixed dollar amount per trade has to convert that dollar risk into a position size pair by pair, and the conversion depends on the pip value in account-currency terms. The same nominal position carries different dollar risk on EURUSD, USDJPY, and GBPUSD, because the pip values differ. Sizing all three with one fixed "dollars per pip" over-risks some and under-risks others, which silently distorts the risk weighting the article "Why ATR Normalization Is More Than a Volatility Trick" was trying to achieve by scaling to volatility. Volatility normalization assumes you measured the dollar risk correctly in the first place, and the pip-value conversion is how you do that.

The clean procedure is to express each pair's stop distance in pips, convert pips to account-currency risk using the correct pip value, then set the position size so that account-currency risk equals your fixed risk budget. Do this per pair, with the conversion step for the pairs that need it, and every position in the book carries the same intended risk. Skip it, and your "equal risk" book is quietly overweight the pairs where you guessed the pip value too low.

The frictions that reduce the booked number

The PnL formula gives the gross result; the booked result is smaller for the reasons the execution articles laid out.

The spread is paid on the round trip, so the realized entry and exit are worse than the prices a clean calculation uses, and on a retail account the markup widens that further, the tier costs from "Why Retail FX Execution Is Not the Same as Interbank FX". A 20-pip gross winner on a pair with a two-pip retail spread is an 18-pip net winner before any other friction. For carry positions held overnight, the swap or rollover (the interest-rate differential credited or debited for holding the position) adds or subtracts from PnL daily, a real cash flow a price-only PnL ignores.

The discipline is to compute PnL net: gross price change converted correctly to the account currency, minus spread and markup on the round trip, plus or minus carry for the holding period. That net number is what hits the account, and it is the only number a backtest should report, the cost-honesty the article "Why Transaction Costs Should Be Added Before You Fall in Love" demanded.

Visualizing the two PnL paths

KEY POINTS

  • FX PnL is not "pips times a fixed dollar value." A currency pair is one currency priced in another, and the profit lands in the quote currency, which may not be your account currency.
  • Base case (quote currency is your account currency, like EURUSD for a USD account): PnL equals position size times price change. A one-million EURUSD position moving 20 pips earns 1,000,000 times 0.0020, equal to 2,000 dollars, in one step.
  • The pip value scales with position size. A 20-pip move on a million units is 2,000 dollars because each pip is 100 dollars; confusing notional with a round-number lot causes factor-of-ten errors.
  • Two-step case (base currency is your account currency, like USDJPY): PnL lands in yen first (position times price change), then converts to dollars at the current rate. A ten-million position moving five pips is 500,000 yen, divided by about 101.65, equal to roughly 4,956 dollars.
  • The pip value in account-currency terms is not constant for pairs that need conversion; it moves with the exchange rate over the life of the trade.
  • Correct pip values are the foundation of position sizing. The same nominal position carries different dollar risk across pairs, so a single fixed "dollars per pip" over-risks some pairs and under-risks others.
  • The clean procedure: express the stop in pips, convert to account-currency risk with the correct pip value, then size so account-currency risk equals your fixed budget, per pair.
  • Report PnL net: gross change converted correctly, minus spread and markup on the round trip, plus or minus carry for the holding period. That net number is the only one a backtest should use.

References