Quantitative Finance · Book 9 · Strategies

Strategies II: Volatility, Relative Value, Macro and the Bank Desks

Strategies II: Volatility, Relative Value, Macro and the Bank Desks · Strategies

14Cross-Currency Basis and FX Carry

A basket long the three G10 currencies with the highest interest rates against the dollar and short the three lowest earned 2.7% a year from May 2002 to December 2025, built here from public exchange rates and interbank rates. Its Sharpe ratio was 0.37, and it lost 19.4% from September to November 2008. Jurek hedged such baskets with out-of-the-money options and found that crash risk premia account for at most a third of the carry trade’s return. The other currency trade of this chapter is the cross-currency basis. Du, Tepper and Verdelhan found that borrowing dollars through FX swaps has cost more than covered parity says, persistently, and most for contracts that sit on banks’ balance sheets at quarter-ends. On this chapter’s synthetic market, a put-hedged carry basket gives up 40% of its return to lose its negative skew, and lending dollars through the swap earns 11.2 basis points a year after a balance-sheet cost. The build is firm.fxcarry.

14.1 FX carry: construction and crash risk

Definition 14.1 (FX carry basket)

An FX carry basket holds long the currencies with the highest short-term interest rates and short those with the lowest, usually in equal weights and against a common base currency, rebalanced as rates change; its return is the rate differential earned plus the change in the exchange rates.

Book 8 (chapter 20) built the carry strategy across asset classes and its crashes. Here the currency version is built from public data. Each month, on the previous month’s three-month interbank rates, the basket ranks nine currencies (euro, yen, sterling, Swiss franc, Australian and New Zealand dollars, Canadian dollar, Swedish and Norwegian kronor) by their rate minus the US rate. It goes long the top three and short the bottom three against the dollar. From May 2002 to December 2025 (284 months) it earned 2.7% a year with a volatility of 7.2%, a Sharpe ratio of 0.37 and a skewness of −0.60-0.60 (Figure 14.1). The rate differential earned 3.1% a year and the exchange rates took back 0.4%. Its worst month was October 2008, −10.5%-10.5\%. The New Zealand dollar was long in 271 of the 284 months, the Australian dollar in 218, the krone in 188. The Swiss franc was short in all 284, the yen in 177, the krona in 166, the euro in 159.

A G10 carry basket against the dollar (long the three highest three-month interbank rates, short the three lowest), cumulative log return, May 2002 to December 2025, from FRED exchange rates and OECD interbank rates. Derived statistics only. Data: s2_fetch_g10.
Figure 14.1. A G10 carry basket against the dollar (long the three highest three-month interbank rates, short the three lowest), cumulative log return, May 2002 to December 2025, from FRED exchange rates and OECD interbank rates. Derived statistics only. Data: s2_fetch_g10.

The public-data basket is approximate. The OECD’s rates are monthly and differ by country in how they are measured. A trader would use forwards, whose points give the rate differential exactly, and would pay their spreads. The shape is the familiar one: steady gains, then a crash when high-yielding currencies fall together.

Crash hedges

Definition 14.2 (Crash-hedged carry)

Crash-hedged carry is a carry position combined with out-of-the-money options that pay when the high-yielding currencies fall sharply against the funding currencies, so that the position’s return no longer carries the crash; the options’ cost measures the price of the crash risk the unhedged trade bears.

Jurek used G10 option prices from 1990 to 2012. Carry trades earned Sharpe ratios as high as equity market factors or higher, and hedging with out-of-the-money options showed that the returns were not a peso problem. Crash risk premia accounted for at most a third of them.

firm.fxcarry runs the same comparison on the ten synthetic currencies of Book 8’s futures universe, which carry a premium and three planted crashes (Listing 14.1). The basket earned 1.30% a year with a Sharpe ratio of 0.23, a skewness of −0.39-0.39 and a worst month of −6.6%-6.6\%. A monthly put on the basket, struck 1.5 standard deviations below zero and priced at 1.2 times the trailing volatility, cost 1.14% a year and paid 0.63%. Hedged, the basket earned 0.78% a year, a Sharpe ratio of 0.15, with no skew (0.01) and a worst month of −4.3%-4.3\% (Figure 14.2). The planted crashes lasted a hundred days each and took 14.1%, 15.5% and 14.1% from the basket. Over the months they spanned, the hedge cut the first from −12.0%-12.0\% to −7.9%-7.9\% and the third from −14.4%-14.4\% to −8.5%-8.5\%. It did almost nothing for the second (−14.7%-14.7\% to −14.3%-14.3\%), which fell a little each month, never far enough below the strike. The hedge’s net cost was 40% of the carry return, more than Jurek’s third. That is a planted choice of option prices.

The synthetic currency carry basket over thirty years with three planted crashes, unhedged and with a monthly put struck 1.5 standard deviations down. Data: s2_fxcarry.cumulative.
Figure 14.2. The synthetic currency carry basket over thirty years with three planted crashes, unhedged and with a monthly put struck 1.5 standard deviations down. Data: s2_fxcarry.cumulative.

14.2 The cross-currency basis

Covered interest parity (Book 2, chapter 16) says that borrowing dollars directly and borrowing another currency and swapping it into dollars should cost the same. The cross-currency basis measures by how much they differ; a negative basis means the swap route costs more, so dollars are dear through FX swaps. Du, Tepper and Verdelhan found the deviations large, persistent, systematic, and not explained by credit risk or transaction costs. They correlated with other fixed-income spreads.

Definition 14.3 (Basis funding trade)

A basis funding trade lends dollars through FX swaps (receiving the other currency and paying it back forward) when the cross-currency basis makes that route pay more than lending dollars directly, earning minus the basis less the cost of the balance sheet the position uses.

The synthetic basis has a level of −20-20 basis points a year and noise, plus quarter-end windows: in the last ten trading days of each quarter it is 30 basis points more negative, 60 at year-end. It averaged −26.2-26.2 basis points over ten years, −49.8-49.8 in the quarter-end windows and −80.4-80.4 in the year-end ones. A lender whose balance sheet costs 15 basis points a year earned 11.2 basis points a year by lending all the time. Lending only in the windows, 40 days a year, earned 6.7, at a rate of 42.5 basis points a year while lent.

14.3 Quarter-ends

The quarter-end pattern is the balance-sheet argument in its plainest form. Nothing about credit or rates changes on 31 March, but banks that report their balance sheets on that date shrink them over it, and the dollars they would have lent through the swap become scarce. The chapter’s windows are planted. The real ones are only as large as the balance-sheet rules that cause them. A lender that is not itself measured on those dates is paid to provide the balance sheet others withdraw.

14.4 Funding-driven trades

The two halves of the chapter meet in funding. A carry trade funds itself in the low-rate currency. When dollars are dear through swaps, the forward points that set the carry include the basis. A carry position hedged in the swap market pays the basis, and one financed in cash does not. Carry books also crash when funding tightens. The high-yielders fall as their holders sell to repay funding-currency loans. A momentum filter that cuts the basket when its own trend turns negative is the usual defence. It gives up part of the carry in the calm and misses the first days of any crash.

14.5 Strategy files

Strategy file 14.1 — G10 carry basket

Who pays you, and why. Investors who pay to hold low-yielding, safe currencies; the risk of high-yielders crashing in a flight to safety.

Instruments and venues. FX forwards; futures.

Signal. Forward points (the rate differential).

Sizing and execution. Top three long, bottom three short, equal weights; monthly.

Costs. Forward spreads; roll.

How it dies. Crashes in which high-yielders fall together: −19.4%-19.4\% in autumn 2008 for the public-data basket.

Horizon, capacity, infrastructure. Months to years; large capacity.

Backtest honestly. Forward points, not interbank rates; transaction costs; the 2008 crash in the sample.

Sources. Jurek (2014); this chapter’s FRED/OECD basket: 2.7% a year, Sharpe ratio 0.37, 2002–2025.

Strategy file 14.2 — Crash-hedged carry with options

Who pays you, and why. As for carry, less the crash premium paid to option sellers.

Instruments and venues. Carry positions and out-of-the-money FX options on each pair or on the basket.

Signal. Carry; the hedge is a programme.

Sizing and execution. Monthly options struck one to two standard deviations out.

Costs. Option premiums and spreads.

How it dies. Slow crashes that never reach the strike.

Horizon, capacity, infrastructure. Monthly; option access.

Backtest honestly. Option prices from the smile at the time, not from a flat vol.

Sources. Jurek (2014): crash premia at most a third of carry returns; this chapter: the hedge cost 40% and removed the skew.

Strategy file 14.3 — Quarter-end basis trade

Who pays you, and why. Banks that shrink their balance sheets over reporting dates.

Instruments and venues. FX swaps spanning the quarter-end.

Signal. The calendar; the basis priced for the turn.

Sizing and execution. Lend dollars across the turn; limited by one’s own balance sheet on the date.

Costs. One’s own balance-sheet cost across the turn.

How it dies. Reporting rules that average over the quarter.

Horizon, capacity, infrastructure. Days to weeks.

Backtest honestly. Swap prices for the exact turn dates.

Sources. Du, Tepper and Verdelhan (2018); this chapter: 42.5 basis points a year while lent in the windows.

Strategy file 14.4 — Basis funding arbitrage

Who pays you, and why. Borrowers of dollars through FX swaps (non-US banks and investors hedging dollar assets) who pay above parity.

Instruments and venues. FX swaps and cross-currency swaps; dollar funding.

Signal. The basis against one’s own funding and balance-sheet cost.

Sizing and execution. As balance sheet allows; term matched.

Costs. Balance sheet; counterparty lines.

How it dies. A funding squeeze on the lender itself.

Horizon, capacity, infrastructure. Months; treasury-level funding.

Backtest honestly. Charge the lender’s real balance-sheet cost.

Sources. Du, Tepper and Verdelhan (2018); this chapter: 11.2 basis points a year after a 15 basis-point cost.

Strategy file 14.5 — Carry with momentum filter

Who pays you, and why. As for carry, with some crash avoidance paid for by lost carry.

Instruments and venues. As for carry.

Signal. Carry, cut when the basket’s trailing return is negative.

Sizing and execution. Reduce or close when the filter trips.

Costs. More turnover.

How it dies. Whipsaws; fast crashes that begin before the filter trips.

Horizon, capacity, infrastructure. Months.

Backtest honestly. The filter’s parameters chosen before the test.

Sources. No performance figure verified.

14.6 Tutorial: priced at the quarter-end

Goal. Build carry baskets, hedge their crashes with options, simulate a cross-currency basis with quarter-end windows and lend into it; build the G10 basket from public data. End state: the numbers in the text and the two figures.

  1. Basket and hedge.

    def carry_basket(r, carry, k: int = 3, every: int = 21) -> dict:
        """Long the k highest-carry markets and short the k lowest, rebalanced every `every` days on yesterday's carry."""
        r, carry = np.asarray(r, float), np.asarray(carry, float)
        T, N = r.shape
        pos = np.zeros((T, N))
        w = np.zeros(N)
        for t in range(1, T):
            if (t - 1) % every == 0:
                order = np.argsort(carry[t - 1])
                w = np.zeros(N)
                w[order[-k:]], w[order[:k]] = 1.0 / k, -1.0 / k
            pos[t] = w
        return {"r": (pos * r).sum(axis=1), "pos": pos}
    
    
    def _ncdf(x):
        return 0.5 * math.erfc(-x / math.sqrt(2))
    
    
    def crash_hedge(basket, every: int = 21, strike_sd: float = 1.5, vol_mult: float = 1.3, lookback: int = 63) -> dict:
        """At each rebalance a put on the basket's simple return over the period, struck strike_sd period-sds below zero,
        priced by Black-Scholes (forward 1, strike 1 + K) at the trailing vol times vol_mult; paid at the start, settled at
        the end. Returns per period: premium, payoff, and the hedged and unhedged period returns."""
        b = np.asarray(basket, float)
        starts = np.arange(lookback + 1, len(b) - every, every)
        prem, pay, raw = [], [], []
        for s in starts:
            sd = b[s - lookback:s].std() * math.sqrt(every)
            vol = sd * vol_mult
            K = 1.0 - strike_sd * sd
            d1 = (math.log(1.0 / K) + 0.5 * vol * vol) / vol
            price = K * _ncdf(-(d1 - vol)) - _ncdf(-d1)
            ret = float(np.prod(1 + b[s:s + every]) - 1)
            prem.append(price)
            pay.append(max(K - (1 + ret), 0.0))
            raw.append(ret)
        prem, pay, raw = np.array(prem), np.array(pay), np.array(raw)
        return {"start": starts, "premium": prem, "payoff": pay, "raw": raw, "hedged": raw - prem + pay}
    Listing 14.1. Carry baskets and a monthly put on the basket. code/firm/fxcarry/firm_fxcarry.py
  2. Carry results.

    def carry_results(strike_sd: float = 1.5, vol_mult: float = 1.2):
        F, b = basket()
        h = crash_hedge(b, 21, strike_sd, vol_mult)
        crashes = [float(np.prod(1 + b[s:e]) - 1) for s, e in F["crashes"]]
        hedged_crash = []
        for s, e in F["crashes"]:
            m = (h["start"] >= s - 21) & (h["start"] < e)
            hedged_crash.append((float(np.prod(1 + h["raw"][m]) - 1), float(np.prod(1 + h["hedged"][m]) - 1)))
        return {"raw": _stats(h["raw"], 12), "hedged": _stats(h["hedged"], 12), "cost": float(h["premium"].mean() * 12),
                "payoff": float(h["payoff"].mean() * 12), "crashes": crashes, "crash_months": hedged_crash,
                "periods": len(h["raw"])}
    Listing 14.2. Unhedged and hedged statistics, and the crash months. code/strategies-2/14-cross-currency-basis-and-fx-carry/python/s2_fxcarry.py
  3. Run s2_fetch_g10.py once, then carry_results(), basis_results() and fig_fxcarry.py.

What to change next. Hedge each pair with its own option instead of the basket; add a momentum filter and compare the crashes; tie the basis to the carry basket’s funding.

14.7 Build: FX carry and basis

Purpose. Carry baskets, option-hedged carry, a cross-currency basis with quarter-end windows, and basis funding trades.

Interface. carry_basket(r, carry, k, every), crash_hedge(basket, every, strike_sd, vol_mult, lookback), BasisConfig(…), simulate_basis(cfg), basis_trade(b, cfg, days).

Rules. Rebalance on yesterday’s carry; puts priced at the start of each period on trailing vol; basis trades earn minus the basis less the balance-sheet cost.

Acceptance tests. code/firm/fxcarry/tests/: the basket’s positions by hand; the put’s price and payoff by hand; the basis windows and the trade’s daily accrual.

Stretch. Pair-level options; forward points with the basis; funding crashes.

Sources and further reading

  • J. W. Jurek, “Crash-neutral currency carry trades”, Journal of Financial Economics 113(3), 2014.
  • W. Du, A. Tepper and A. Verdelhan, “Deviations from covered interest rate parity”, Journal of Finance 73(3), 2018.
  • Board of Governors H.10 exchange rates and OECD interbank rates, via FRED.

14.8 Exercises

Exercise 14.1 ★

The basket earned 2.7% a year with a volatility of 7.2%. What is its Sharpe ratio, without a risk-free rate?

Solution

Solution of Exercise 14.1.

2.7/7.2=0.3752.7/7.2 = 0.375 with the rounded figures, 0.37 unrounded.

Exercise 14.2 ★

The basis is −50-50 basis points a year and a lender’s balance sheet costs 15. What does lending for ten trading days earn, in basis points of the amount?

Solution

Solution of Exercise 14.2.

(50−15)/252×10=1.39(50 - 15)/252 \times 10 = 1.39 basis points of the amount lent.

Exercise 14.3 ★

A hedge costs 1.14% a year and pays 0.63%. What is its net cost as a share of a 1.30% carry return?

Solution

Solution of Exercise 14.3.

(1.14−0.63)/1.30=0.39(1.14 - 0.63)/1.30 = 0.39 with the rounded figures, 40% unrounded.

Exercise 14.4 ★★

Why was the Swiss franc short in every month of the public-data basket?

Solution

Solution of Exercise 14.4.

Its interest rate was the lowest or near the lowest of the nine throughout, often at or below zero, so it was always among the three funding currencies.

Exercise 14.5 ★★

Why did the monthly put fail to protect against the second synthetic crash?

Solution

Solution of Exercise 14.5.

It fell a little each month; a put struck 1.5 standard deviations below zero pays only on a month that falls further than that, so the premiums were spent and little came back.

Exercise 14.6 ★★

Why does a negative cross-currency basis persist?

Solution

Solution of Exercise 14.6.

Closing it needs balance sheet: an arbitrageur must borrow dollars directly and lend them through the swap, a gross position that banks charge for, most of all on reporting dates. The basis settles where that charge makes the trade not worth doing for the marginal bank.

Exercise 14.7 ★★★

Coding. Run carry_results(vol_mult=1.0), pricing the puts at trailing volatility with no premium. What does the hedge now cost, and what does that say about where the crash premium sits?

Solution

Solution of Exercise 14.7.

The hedge now costs 0.55% a year and pays 0.63%: it makes money, and the hedged basket’s Sharpe ratio rises to 0.26 with no skew. The crash premium is not in the currencies’ returns alone; it is in what option sellers charge above fair value, here the 1.2 times trailing volatility of the chapter’s pricing.

Exercise 14.8 ★★★

Find the flaw. “Carry earned 2.7% a year with a Sharpe ratio of 0.37 over 23 years; we lever it to 20% volatility for 7.5% a year.”

Solution

Solution of Exercise 14.8.

Levering 2.8 times multiplies the crashes too: the autumn 2008 loss of 19.4% becomes about 54%. The Sharpe ratio hides a negative skew of −0.60-0.60; size on the crash, not on the volatility.

14.9 Problem: Priced at the Quarter-End

Problem 14.1

Weekend problem — currencies and balance sheets

The chapter’s synthetic markets, the public-data basket and the public record.

Part I — Carry.

  1. Define an FX carry basket and build it from public data.
  2. Give its return, risk and crash.
  3. Which currencies did it hold, and how often?
  4. What did Jurek find?

Part II — Hedges.

  1. Define crash-hedged carry.
  2. Give the synthetic basket’s statistics with and without the hedge.
  3. What did the hedge do in each crash?
  4. Why does the hedge’s cost measure the crash premium?

Part III — The basis.

  1. Define covered interest parity and the cross-currency basis.
  2. What did Du, Tepper and Verdelhan find?
  3. Define the basis funding trade and give its synthetic return.
  4. What does the quarter-end window add?

Part IV — The verdict.

  1. State the named result: the carry basket’s Sharpe ratio with and without crash hedges, and the basis trade’s quarter-end return.
  2. How do carry and the basis meet in funding?
  3. What would a momentum filter change?
  4. How would you size a carry book?
  5. How would you backtest the basis trade honestly?
  6. Which strategy file needs its own balance sheet?
  7. How does this chapter relate to chapter 12?
  8. In one sentence: what does the cross-currency basis price?
Solution

Solution of Problem 14.1.

  1. Long the highest-rate currencies, short the lowest; from FRED exchange rates and OECD interbank rates, monthly.
  2. 2.7% a year at 7.2% volatility, Sharpe ratio 0.37, skewness −0.60-0.60; −19.4%-19.4\% in autumn 2008, −10.5%-10.5\% in October 2008.
  3. Long mostly New Zealand and Australian dollars and the krone; short the Swiss franc always, the yen, the krona and the euro often.
  4. Carry earned Sharpe ratios like equity factors; crash premia were at most a third of the return.
  5. Carry with options that pay in a crash.
  6. Unhedged 1.30% a year, Sharpe ratio 0.23, skewness −0.39-0.39; hedged 0.78%, 0.15, 0.01.
  7. The first and third crashes’ months were cut from −12.0%-12.0\% to −7.9%-7.9\% and from −14.4%-14.4\% to −8.5%-8.5\%; the second barely changed.
  8. It is what must be paid to remove the crash from the return.
  9. Borrowing dollars directly or through a swap should cost the same; the basis is the gap.
  10. Large, persistent deviations, strongest at quarter-ends, pointing to regulation.
  11. Lend dollars through the swap; 11.2 basis points a year after a 15 basis-point cost.
  12. 42.5 basis points a year while lent, over 40 days a year.
  13. Named result. The synthetic carry basket’s Sharpe ratio falls from 0.23 to 0.15 with monthly put hedges, which remove its negative skew at 40% of its return; the basis trade earns 42.5 basis points a year while lent in the quarter-end windows, 6.7 a year in all.
  14. Forward points include the basis, and carry crashes are funding events.
  15. Less carry in the calm, some protection in long crashes, none in fast ones.
  16. By the crash, not the volatility.
  17. Swap prices for the exact dates, and the lender’s own balance-sheet cost.
  18. The basis funding arbitrage.
  19. Both are prices of bank balance sheet: the swap spread for holding bonds, the basis for lending dollars.
  20. The cost of bank balance sheet for lending dollars.

14.10 Interview questions

Interview question 14.1 ★ trader

What is the currency carry trade, and why does it work?

Solution

Solution of Interview question 14.1.

Borrow in low-rate currencies and lend in high-rate ones; exchange rates do not, on average, move enough to offset the differential, but they do in crashes. The return is pay for bearing that crash risk.

Interview question 14.2 ★★ researcher

How would you measure the crash risk premium in currency carry?

Solution

Solution of Interview question 14.2.

Hedge the carry positions with out-of-the-money options at market prices and compare hedged and unhedged returns; the difference is the premium paid to remove the crash.

Interview question 14.3 ★★ trader

The three-month cross-currency basis is −40-40 basis points. What does it mean, and who pays it?

Solution

Solution of Interview question 14.3.

Swapping into dollars costs 40 basis points a year more than parity; borrowers of dollars through swaps (non-US banks, investors hedging dollar assets) pay it to whoever can lend dollars through the swap and has the balance sheet.

Interview question 14.4 ★★ risk

How would you stress a G10 carry book?

Solution

Solution of Interview question 14.4.

A 2008-style flight to safety (high-yielders down 15–20%, funding currencies up), a rate shock in one funding currency, and a liquidity event that widens forward spreads.

Interview question 14.5 ★★ developer

Design the data behind a carry book: rates, forwards, spot, holidays, and what can go wrong at month-end.

Solution

Solution of Interview question 14.5.

Spot and forward points by tenor, deposit rates, holiday calendars by currency, value dates; month-end brings roll dates, holidays that shift value dates and illiquid quotes.

Interview question 14.6 ★★★ researcher

Derive the forward exchange rate from covered interest parity, and show how a basis bb enters it.

Solution

Solution of Interview question 14.6.

Borrowing one dollar at r$r_\$ or converting at spot SS (foreign per dollar), lending at rfr_f and converting back at FF must give the same: F=S(1+rfτ)/(1+r$τ)F = S(1 + r_f\tau)/(1 + r_\$\tau). With a basis, F=S(1+(rf+b)τ)/(1+r$τ)F = S(1 + (r_f + b)\tau)/(1 + r_\$\tau): a negative bb makes the foreign leg worth less, so dollars obtained through the swap cost more.

Terms defined in this chapter

See all 2333 terms in the glossary