2.5.1 Reading a currency quote
An exchange rate is the price of one money in another. The quote tells you which is which — get the direction wrong and every number after it flips sign.
A currency pair names two currencies as BASE/QUOTE. The price is how many units of the quote currency one unit of the base costs. A dealer showing EUR/USD 1.0850 / 1.0851 buys euros from you at 1.0850 dollars each (the bid) and sells them to you at 1.0851 (the ask); the gap is the bid-ask spread you met in Session 2.1. By convention the euro and sterling are quoted against the dollar (EUR/USD, GBP/USD), while the dollar is the base against the yen, the Swiss franc and the Canadian dollar (USD/JPY, USD/CHF, USD/CAD). So "EUR/USD up" means a stronger euro, but "USD/JPY up" means a weaker yen.
A pip is the conventional smallest step of a quote: the fourth decimal (0.0001) for most pairs, the second (0.01) for yen pairs. Dealers speak only the last two digits, because the leading ones — the big figure — move far less often than the pips.
On one million units of the base currency, one EUR/USD pip is $100; one USD/JPY pip is 10,000 yen, about $66.66 at a mid of 150.01. A round trip of €10 million across a one-pip EUR/USD spread costs $1,000 — not small for a strategy that trades daily (transaction costs are Session 6.5's subject).
A pair without the dollar, such as EUR/JPY, is a cross. Less-traded crosses are priced through the dollar, which sits on one side of 89% of all FX trades (BIS 2025): to buy, say, Norwegian kroner with yen you buy dollars with yen, then kroner with dollars, paying both spreads. The most-traded crosses (EUR/JPY, EUR/GBP) also trade directly, and arbitrage keeps their spread inside the synthetic one. Built through the dollar from the lab's quotes — USD/JPY 150.00 / 150.02 — the cross comes out at 162.750 / 162.787: a spread of 3.67 pips, or 2.25 bp of the price, the sum of EUR/USD's 0.92 bp and USD/JPY's 1.33 bp, and the widest spread a direct EUR/JPY quote could show.
| Pair | Read as | Pip | One pip on 1 million of the base | Spot date |
|---|---|---|---|---|
| EUR/USD | dollars per euro | 0.0001 | $100 | T+2 |
| USD/JPY | yen per dollar | 0.01 | 10,000 yen ≈ $66.66 | T+2 |
| EUR/JPY (a cross) | yen per euro | 0.01 | 10,000 yen ≈ $66.66 | T+2 |
| USD/CAD | Canadian dollars per US dollar | 0.0001 | 100 Canadian dollars | T+1 |
That last column is FX spot: an exchange of two currencies at an agreed rate, settled on the spot date — two business days after the trade (T+2) for most pairs, one (T+1) for US and Canadian dollars (SIFMA, CCMA & ISDA 2024), and later if a holiday in either currency intervenes. There is no central exchange: the market is over the counter, with dealers — large banks — quoting to clients and to each other, mostly electronically, around the clock on weekdays. The BIS Triennial Survey counted $9.6 trillion of turnover a day in April 2025; 46% of it was between dealers, and sales desks in the United Kingdom booked 38%.
| Instrument (BIS, April 2025) | What it is | Daily turnover | Share |
|---|---|---|---|
| Spot | exchange on the spot date | $3 trillion | 31% |
| Outright forwards | exchange on a later date, rate fixed today | $1.8 trillion | 19% |
| FX swaps | a spot trade plus the opposite forward | $4 trillion | 42% |
| Options | the right, not the obligation, to exchange | — | 7% |
| Currency swaps | long-term exchange of interest and principal | — | about 2% |
Source: BIS Triennial Survey, published 30 September 2025. The largest instrument, the FX swap, is priced by the loop in §2.5.2.
is units of the quote currency per unit of the base; up means the base strengthened. A pip's money value depends on the pair and your size. A cross built through the dollar is two trades glued together, and can cost up to two spreads.
An FX trade is two payments, often in different time zones. When the German supervisor closed Bankhaus Herstatt mid-day on 26 June 1974, it had received the Deutsche marks it bought but not delivered the dollars it sold, and its counterparties took the loss (ECB 2007). The industry set up CLS in 2002 to settle both legs of a trade together or not at all — payment versus payment (CLS 2023). Settlement in general is Session 2.1's subject; counterparty risk returns in Session 2.6.
2.5.2 FX forwards & covered interest parity
A currency forward needs no forecast. One loop through two money markets pins it — the cash-and-carry argument of Session 2.4, with a second interest rate where the storage bill used to be.
An FX forward (an outright forward) fixes today the rate at which two currencies will be exchanged on a date beyond spot. A company owed euros in three months sells them forward and knows its dollar revenue today. It is a forward contract in exactly the sense of Session 2.4, and it is priced the same way: by building it from things you can already trade.
The loop in words: you hold dollars and want dollars years from now. Route A: deposit them at the dollar rate. Route B: buy euros at spot, deposit them at the euro rate, and — today — sell forward the euros that deposit will pay out. Every price in route B is agreed today, so both routes are riskless and must pay the same; if route B paid more, traders would borrow dollars to run it and push the forward down until the gap closed.
In symbols, with one convention for the whole session: spot and forward are units of the quote currency per unit of the base; and are the quote and base currencies' money-market rates for the term — simple, not compounded, as deposits are quoted — and is the term in years. For EUR/USD, is the dollar rate, the euro rate, and both markets count as actual days/360, so a one-year forward is about 365/360 years (other currencies use other conventions; see day count conventions in Session 11.1). Route A turns $1 into ; route B turns it into . Setting them equal gives covered interest parity (CIP):
The forward is the spot rate scaled by the ratio of the two currencies' growth factors. The higher-rate currency trades at a forward discount — not because anyone expects it to fall, but because the loop demands it. With continuously compounded rates the same argument gives : exactly the cost of carry formula of Session 2.4 with , where the financing rate is the quote currency's and the income is the base currency's interest rate. A currency is an asset that pays its own interest rate.
Dealers quote forwards as forward points: measured in pips, added to spot. With EUR/USD at 1.08505 (the mid of the quote above), a dollar rate of 4% and a euro rate of 2% (illustrative):
| Tenor | Actual days | Forward F (CIP) | Forward points |
|---|---|---|---|
| 1 month | 31 | 1.08692 | +18.7 |
| 3 months | 92 | 1.09057 | +55.2 |
| 6 months | 183 | 1.09597 | +109.2 |
| 1 year | 365 | 1.10662 | +215.7 |
The euro has the lower rate, so it trades at a forward premium. The rule of thumb, points ≈ / pip, gives +220.0 at one year; the exact formula's denominator trims it. Mixing conventions is worse: put the same 4% and 2% into the continuous formula and the one-year forward comes out 6.6 pips too high. A rate is not a number until you know its compounding and its day count. The lab's pricer is one line:
def cip_forward(spot: float, i_quote: float, i_base: float, tau: float) -> float: """Covered-interest-parity forward: QUOTE per 1 BASE, simple money-market rates, tau in years.""" return spot * (1 + i_quote * tau) / (1 + i_base * tau)
CIP pins the forward by replication — no-arbitrage pricing, which Session 10.1 generalises. A dealer who sells you a forward hedges it by running the loop, so no view on the euro enters the price. Whether the forward also predicts the future spot rate is a different claim, uncovered interest parity, in Session 11.5 — on average it does not, and that failure is where FX carry (§2.5.4) comes from. Covered parity is enforced by arbitrage; uncovered parity is only a hypothesis.
2.5.3 When the loop costs too much to run
Before the 2008 crisis, covered interest parity held closely. Since then it has not — and the reason is a lesson in who can actually run an arbitrage.
Measure a deviation with the cross-currency basis (an interest-rate spread — not the futures basis of Session 2.4): the spread you must add to the non-dollar rate to make CIP hold at market prices. Here the dollar is the quote currency and is added to the non-dollar rate, which is Du, Tepper & Verdelhan's (2018) sign convention; they quote foreign currency per dollar, so their formula is the reciprocal of this one:
A negative basis puts the forward above the CIP price: the direct dollar interest rate is lower than the synthetic one you get by swapping another currency into dollars, so borrowing dollars through FX swaps costs more than borrowing them in the cash market. Whoever borrows dollars that way pays the premium — for instance a non-US bank or investor hedging a dollar asset — and Borio, McCauley, McGuire & Sushko (2016) trace the basis to that hedging demand meeting tighter limits on arbitrage.
The facts, dated. DTV find that since 2008 CIP deviations for G10 currencies are large, persistent and systematic, are not explained away by credit risk or transaction costs, and are strongest for forwards that appear on banks' balance sheets at quarter-end. In the working-paper version (NBER w23170, February 2017), the average absolute basis over 2010–2016 was 24 bp a year at three months and 27 bp at five years; the five-year yen basis was close to −90 bp at the end of 2015, larger than the roughly −70 bp gap between Japanese and US five-year Libor rates. Their explanation combines balance sheets made costly by post-crisis regulation with cross-currency imbalances in hedging and investment demand. On the balance-sheet side, with a 3% Basel III leverage ratio and a 10% required return on equity, a bank needs a basis of at least 3% × 10% = 30 bp before a trade that grows its balance sheet is worth doing.
The lab reproduces the mechanism. It puts the market's 3-month forward 8 pips above CIP (1.09137 against 1.09057), a basis of −28.8 bp — DTV's order of magnitude. At mid prices, borrowing $100,000,000 and running the loop locks in $74,106 (29.0 bp a year) — the same in all 10,000 simulated end-of-period exchange rates, while the position without its forward is a currency bet with a standard deviation of about $4.0 million. Now pay for the trade. Buying at the ask, selling at the bid, borrowing above and lending below mid turns the single CIP price into a no-arbitrage band:
| Who runs the loop (illustrative costs) | Spot / points half-spread | Borrow $ above / lend € below mid | Balance-sheet charge | Top of the band, pips above CIP | P&L after costs, 3 months |
|---|---|---|---|---|---|
| Bank desk | 0.10 / 0.10 pip | 2 / 2 bp | 30 bp a year | 9.5 | −$15,597 |
| Fund, via a prime broker | 0.25 / 0.25 pip | 25 / 10 bp | — | 9.9 | −$22,446 |
| Individual, via a broker | 1.00 / 1.00 pip | 300 / 150 bp | — | 125.8 | −$1,105,861 |
The loop pays only if the forward's bid clears the top of your band (fig 2.5.3). (In practice the loop is done as one FX swap, which pays only the forward-points spread; the lab charges the spot spread twice, which slightly overstates costs without changing who profits.) Look at the bank: its spreads alone would put the top of its band only 1.2 pips above CIP, and after spreads the trade still earns $61,070 — then the balance-sheet charge of $76,667 takes it negative. The balance sheet is the cost — DTV's argument in miniature: the institutions best placed to close the gap find it costs about as much as it pays, most of all across quarter-ends. It is the textbook case of limits to arbitrage, which Session 7.1 develops.
def no_arb_band(spot_mid: float, t: dict, i_q: float, i_b: float, tau: float) -> tuple[float, float]: """Lower and upper forward prices between which no covered loop is profitable for this trader.""" s_bid = spot_mid - t["spot_half"] * PIP["EURUSD"] s_ask = spot_mid + t["spot_half"] * PIP["EURUSD"] bs = t["balance_sheet"] # borrowing expands the balance sheet upper = s_ask * (1 + (i_q + t["borrow"] + bs) * tau) / (1 + (i_b - t["lend"]) * tau) lower = s_bid * (1 + (i_q - t["lend"]) * tau) / (1 + (i_b + t["borrow"] + bs) * tau) return lower, upper
A deviation is an arbitrage only for someone whose costs sit inside it. Price the loop at your bid, ask, borrowing and lending rates, add what your capital costs, and check the dates: DTV find that a one-month deviation widens exactly when the contract starts to span a quarter-end. The same holds for every "riskless" basis trade, including the crypto ones in Session 2.6.
2.5.4 FX carry: a first look
Borrow where money is cheap, hold where it pays: the trade collects the interest gap month after month — until the month the currency falls further than a year of carry.
FX carry is the interest differential you earn by holding a higher-rate currency funded in a lower-rate one. Under CIP the same position is a forward purchase of the high-rate currency at its forward discount, so the carry is the forward discount: the roll yield of Session 2.4 in FX clothing. If exchange rates moved to cancel the differential on average, as uncovered parity says, carry would earn nothing. That they do not is the forward premium puzzle of Session 11.5 — the "uncovered interest rate puzzle" that Brunnermeier, Nagel & Pedersen (2008) link to crash risk. The carry trade and its crash risk are Session 8.4's subject; this is a first look at the shape of its returns.
The lab simulates a stylised carry position — a 5% interest differential, exchange-rate volatility of 9% a year, and crashes of about −10% that arrive on average once every 5 years — over 10,000 paths of 20 years, next to a Gaussian twin with the same mean and volatility and no crashes. The returns are already excess returns (you borrow one currency to hold the other), so no risk-free rate is subtracted, and every statistic is asserted against its closed form at 4 standard errors (Monte Carlo, Session 3.5).
| Monthly excess returns | Carry with crashes | Gaussian twin |
|---|---|---|
| Sharpe ratio (annualised) | 0.31 (theory 0.31) | 0.31 |
| Skewness | −0.74 (theory −0.73) | 0.00 |
| Share of months worse than −3 sd (−8.5%) | 0.95% (theory 0.95%) | 0.13% |
| Median worst month in 20 years | −13.2% | −7.8% |
Same Sharpe ratio, very different danger: the crash model has fewer mildly bad months than its twin and far more severe ones (fig 2.5.4) — a difference that volatility and the Sharpe ratio cannot see but skewness (Session 3.2) can. A short track record hides it. A window of years contains no crash with probability , where is the crash rate (a rate here, not Kyle's lambda). For = 5 that is 36.8% (simulated: 36.5%), and in those calm windows the Sharpe ratio is 0.56 (theory 0.55), nearly double the true 0.31.
The interest is certain; the exchange rate is not, and its losses arrive in lumps. Judge carry by its skewness and worst months rather than a calm-window Sharpe ratio, and size it for the crash you have not yet seen (leverage, Session 2.3). Session 8.4 returns to carry and its crash risk across asset classes.
2.5.5 Storage & convenience yield
A barrel of oil pays no interest and costs money to keep. So why does anyone hold one when a futures contract would do — and why does the answer bend the whole curve?
Commodities trade in two linked markets: a physical one that moves actual barrels, bushels and cargoes, where grade, location and delivery window matter, and a financial one of standardised futures and swaps, mostly closed or rolled before delivery. Delivery ties the two together — an expiring contract must converge to the physical price at its delivery point (Session 2.4) — and storage ties today's physical to every later contract.
The first link is the storage cost: tank or warehouse rent, insurance and losses, written as a fraction of spot per year or in dollars per unit per year. It caps contango: if a later contract traded above full carry, you would buy spot, store it and deliver — the cash-and-carry of Session 2.4 — so
The second link is the convenience yield : the benefit of holding the physical rather than a claim on it — a refinery that does not stop, a surprise order you can fill, a shortage you are not caught in. Nobody pays it in cash; you read it off prices:
This is the theory of storage. Kaldor (1939) introduced the convenience yield. Working (1949) turned it into a "price of storage": when stocks are ample, the later contract sits above the nearer one by about the cost of storage; when they are scarce, the spread goes negative. Brennan (1958) cast it as a supply of storage: firms hold inventory until the spread between later and earlier prices equals the marginal cost of storage net of the convenience yield, plus a risk premium. So the price of storage traces a curve against inventories, capped above at full carry and unbounded below, because reversing cash-and-carry needs someone to lend you a scarce barrel to sell. The evidence fits: Fama & French (1987) find the basis varies with interest rates and with seasonals in convenience yields, and Gorton, Hayashi & Rouwenhorst (2013), using 31 commodity futures from 1971 to 2010, find the convenience yield is a decreasing, nonlinear function of inventories.
The lab turns that finding into a model: convenience yield falls exponentially with inventory (1 = normal), , and inventories are expected to drift back to normal with a half-life of 0.75 years. Financing is 4% and storage 5%, the same as the crude-oil rows of Session 2.4, so full carry is 9%. Each futures price integrates the net carry along the expected inventory path, :
def convenience_yield(inv: float) -> float: """Convenience yield per year as a function of inventory relative to normal (Working-curve shape).""" return Y_MAX * np.exp(-inv / I_SCALE)
- Glut (inventories 1.8× normal): = 0.4%, and the front of the curve rises at +8.6% a year — nearly full carry.
- Normal: = 3.4%; a steady contango of +5.6% a year.
- Scarce (0.3× normal): = 25.5%, and the front falls at −14.6% a year; the curve bottoms at month 10 and turns up as inventories are expected to recover.
The front inverts once inventories fall below about 0.66 of normal, where (the one-month spread crosses zero at a slightly lower level, 0.65, because inventories recover a little within the month). Session 2.4's two crude examples, a 1% and a 21% convenience yield, are two points on this curve, at inventories of 1.43 and 0.37 of normal. Plot the front spread against inventory and you get Working's curve (fig 2.5.7).
Connect this to Session 2.4: a long front-month position's roll yield is minus the front spread, +14.6% a year when stocks are scarce and −8.6% in a glut. It becomes return only if spot does not move to meet the curve — and scarcity is exactly when spot is high and apt to fall. Gorton, Hayashi and Rouwenhorst find futures risk premiums vary with inventories, so inventory data matter to anyone trading commodity carry.
Ample stocks mean contango, capped at full carry by cash-and-carry; scarce stocks mean backwardation, with no floor because nobody lends the physical. A commodity futures curve is a picture of inventories.
2.5.6 Commodity curves: shapes & seasons
Every commodity's curve is the theory of storage run through its own physics: how cheaply it stores, how steadily it is produced and how seasonally it is used.
The commodity term structure is the curve of one commodity's futures prices across expiries. Its slope is net carry — financing plus storage minus convenience yield — so it inherits every physical fact about the commodity. Fig 2.5.8 sketches the families.
| Family | Storable? | Typical curve | Why |
|---|---|---|---|
| Precious metals | cheaply, for years | close to full carry | large stocks relative to use make shortages rare, so the convenience yield stays small |
| Crude oil, base metals | yes, at a real cost | switches between contango and backwardation | inventories swing between glut and shortage (§2.5.5) |
| Natural gas | yes, but capacity is limited and costly | seasonal, with a winter premium | burned mostly in winter, produced all year |
| Grains | within a crop year | carry within a season, a break at the new harvest | supply arrives once a year |
| Electricity, livestock | power barely; animals not for long | each expiry priced on its own | no cash-and-carry link between dates |
Seasonality: a natural-gas-style curve
Natural gas is the cleanest case of seasonality. In the US it is injected into storage from April to October and withdrawn from November to March (EIA 2026), so winter delivery trades at a premium. The lab builds a stylised curve: a deseasonalised level of $3.50/MMBtu, a smooth carry of 2% a year and a seasonal swing of 7% either way, peaking in January. January delivery comes out at $3.81 and July at $3.28.
Storage limits how fast such a curve may rise. Buy the month- contract, take delivery, store the gas and deliver it into month ; with years and the dollar cost of storage per MMBtu per year,
With storage at $1.80 per MMBtu a year (illustrative, including the rent on scarce capacity; paid at delivery here, where Session 2.4's prepays it) the lab's curve has 0 violations, and the bound allows a seasonal swing of up to 8.3%. Push past it and the first trade to become riskless is the steepest single step of the autumn climb — buying Oct gas to deliver into Nov — while the July-to-January spread ($0.53) stays well inside its own bound ($0.97). Nothing limits the fall after winter: you cannot store gas backwards in time. Real storage also has finite capacity and injection limits; when it is full, the marginal cost of storage is the price of scarce capacity, not the tank rent — the lesson of WTI on 20 April 2020 (Session 2.4).
def storage_violations(F: np.ndarray, r: float = GAS_RF, U: float = GAS_STORAGE) -> int: """Pairs (i < j) where buying month i, storing and delivering into month j is a riskless profit.""" i, j = np.triu_indices(len(F), k=1) dt = (j - i) / 12 return int(np.sum(F[j] > F[i] * np.exp(r * dt) + U * dt + 1e-12))
Now read the gas curve through the roll-yield lens of Session 2.4 and you get nonsense. Month by month, the annualised roll between neighbouring contracts swings from −44% to +40%. Over any twelve consecutive months the seasonal part cancels exactly, and the average is −2.0% a year: the roll yield of the smooth 2% contango. The lab asserts that identity for every twelve-month window.
In October the December contract sits above November because winter is coming, not because the market is glutted or bearish. A seasonal contango is a calendar, not a carry signal: compare a contract with the same month a year later before reading carry into the slope. Session 8.4 returns to measuring carry across commodities.
2.5.7 Try it
Open the companion lab, predict before you run, and move one number at a time.
1. A bigger gap. In section 3 set DEVIATION_PIPS = 12.0. Predict from the band edges in the table (you sell at the forward's bid, below mid) which traders now profit.
2. Rarer, bigger crashes. In section 4 set CRASH_RATE = 0.10 and CRASH_MEAN, CRASH_SD = -0.20, 0.04. The expected crash loss per year barely changes; predict the skewness, the Sharpe ratio and the chance of a calm five-year window.
3. Too much seasonality. In section 6 set GAS_AMP = 0.10. How many storage-arbitrage violations appear — on the climb into winter, or the fall after it?
4. Slow recovery. In section 5 set HALF_LIFE = 2.0. The scarce curve bottoms at month 10 by default; where does it bottom now, and does the lab's analytic check agree?
Success: in step 1 the bank and the fund profit and the individual does not; in step 2 skewness grows much more negative while the Sharpe ratio barely moves, and the calm-window probability is ; in step 3 every violation is on a rising stretch; in step 4 the bottom moves out by more than a year.
2.5.8 Glossary · Check yourself · Go deeper
Check yourself
1. A screen shows USD/JPY 150.00 / 150.02. You must sell 300,000,000 yen for dollars. Which side of the quote do you deal on, and what does crossing the spread cost you?
2. EUR/USD is 1.08505, the dollar rate 4% and the euro rate 2% (simple, ACT/360). A client wants a one-year forward and adds, "we expect the euro to weaken, so quote us lower". What do you quote?
3. The 3-month EUR/USD forward trades 8 pips above CIP, a basis of −28.8 bp. You run a bank desk whose balance sheet costs 30 bp a year. Do you put the trade on?
4. A currency-carry fund shows 5 years with a Sharpe ratio of 0.56 and a maximum drawdown of −13%. What do you ask before you invest?
5. Crude's one-month spread is −15%, annualised. Financing costs 4% and storage 5%. What is the implied convenience yield, and why can't cash-and-carry close the gap?
6. In October the December gas contract trades well above November. A colleague says: "steep contango — longs bleed". What is wrong?
1. Find each trader's break-even. In section 3, bisect on DEVIATION_PIPS for the smallest deviation at which each tier profits. Show it equals the top of that tier's band plus the forward's two half-spreads, and explain why.
2. Same crash loss, different shapes. In section 4, keep CRASH_RATE × CRASH_MEAN at −2% a year and run (0.4, −0.05), (0.2, −0.10), (0.1, −0.20) and (0.05, −0.40). Tabulate skewness, Sharpe ratio, calm-window Sharpe and P(no crash in five years). Which looks best over five years, and which is most dangerous?
3. Imply a convenience yield from real prices. From the exchange's website take today's settlements for the front and twelfth crude-oil futures (WTI or Brent). With a current Treasury-bill yield as and storage at 5% a year, compute and say which inventory state it suggests. Date every number.
4. Read sections I–II of Du, Tepper & Verdelhan (2018), or Borio et al. (2016) for a shorter tour. Session 2.6 meets perpetual futures, which never expire and are tied to spot by a funding rate instead of convergence; keep the CIP loop in mind.
📚 Go deeper
- Du, W., Tepper, A. & Verdelhan, A. (2018). "Deviations from Covered Interest Rate Parity." Journal of Finance 73(3), 915–957. Figures quoted here are from the working-paper version, NBER w23170 (February 2017). doi:10.1111/jofi.12620
- Borio, C., McCauley, R. N., McGuire, P. & Sushko, V. (2016). "Covered interest parity lost: understanding the cross-currency basis." BIS Quarterly Review, September 2016, pp. 45–64. https://www.bis.org/publ/qtrpdf/r_qt1609e.htm
- Brunnermeier, M. K., Nagel, S. & Pedersen, L. H. (2008). "Carry Trades and Currency Crashes." NBER Macroeconomics Annual 23, 313–347. doi:10.1086/593088
- Working, H. (1949). "The Theory of Price of Storage." American Economic Review 39(6), 1254–1262. https://www.jstor.org/stable/1816601
- Brennan, M. J. (1958). "The Supply of Storage." American Economic Review 48(1), 50–72. https://www.jstor.org/stable/1812340
- Gorton, G. B., Hayashi, F. & Rouwenhorst, K. G. (2013). "The Fundamentals of Commodity Futures Returns." Review of Finance 17(1), 35–105. doi:10.1093/rof/rfs019
- Geman, H. (2005). Commodities and Commodity Derivatives: Modeling and Pricing for Agriculturals, Metals and Energy. Wiley. ISBN 978-0-470-01218-5
- Hull, J. C. (2021). Options, Futures, and Other Derivatives, 11th ed., ch. 5 "Determination of forward and futures prices" (currencies; commodities, storage costs and convenience yields). Pearson. ISBN 978-0-13-693997-9
Sources for the numbers
- Kaldor, N. (1939). "Speculation and Economic Stability." Review of Economic Studies 7(1), 1–27. doi:10.2307/2967593
- Fama, E. F. & French, K. R. (1987). "Commodity Futures Prices: Some Evidence on Forecast Power, Premiums, and the Theory of Storage." Journal of Business 60(1), 55–73. doi:10.1086/296385
- Bank for International Settlements (2025). "Global FX trading hits $9.6 trillion per day in April 2025 …: Triennial Survey", 30 September 2025, and "OTC foreign exchange turnover in April 2025". https://www.bis.org/media-releases/20250930-global-fx-trading-hits-96-trillion-day-april-2025-and-otc-interest-rate-derivatives-surge-79 · https://www.bis.org/statistics/rpfx25_fx.htm
- SIFMA, CCMA & ISDA (2024). "T+1 Settlement Cycle Booklet" (FX spot convention T+2; CAD/USD T+1). https://www.isda.org/a/fFwgE/T1-Settlement-Cycle-Booklet.pdf
- CLS Group (2023). "FX settlement risk: to PvP or not to PvP?" ShapingFX series, 31 May 2023. https://www.cls-group.com/insights/the-fx-ecosystem/fx-ecosystem-02-fx-settlement-risk-to-pvp-or-not-to-pvp-shapingfx-series/
- European Central Bank (2007). "More than thirty years after the 'Herstatt' case, foreign exchange settlement risk is still an issue." Financial Stability Review, December 2007, Box 19. https://www.ecb.europa.eu/press/financial-stability-publications/fsr/focus/2007/pdf/ecb~ccda416def.fsrbox200712_19.pdf
- U.S. Energy Information Administration (2026). "Natural gas inventories at the end of winter heating season were near five-year average." Today in Energy, 21 April 2026. https://www.eia.gov/todayinenergy/detail.php?id=67524
Educational material only — not investment, legal or tax advice. Backtests and simulations are hypothetical. Disclaimer · Text CC BY 4.0 · Code MIT.