FX Carry
Long high-yielding currencies, short low-yielding ones — earn the interest rate differential
Risk
Medium
Holding Period
1 month (monthly rebalanced)
Best For
Calm risk-on markets with steep interest rate differentials
How it works
Every currency has a central-bank policy rate. Holding AUD against JPY, for example, pays you roughly rate(AUD) − rate(JPY) per year in rollover. The carry factor ranks G10 fiat pairs by this differential and goes long the richest spreads, short the most negative. Historical Sharpe 0.6-0.8 since the 1970s, with large drawdowns during risk-off episodes.
Mathematical Foundation
carry = rate(base) − rate(quote) rank and select |top_n| per sideSignal Generation Logic
- 1Look up the current central-bank policy rate for each fiat currency (USD, EUR, GBP, JPY, AUD, NZD, CHF, CAD)
- 2For each FX pair in the universe, compute carry = rate(base) − rate(quote)
- 3Rank all pairs with both legs covered by the rate table
- 4Long the top_n pairs whose carry ≥ min_carry_pct
- 5Short the bottom_n pairs whose carry ≤ −min_carry_pct
- 6Pairs inside the ±min_carry_pct band are not traded
- 7Rebalance monthly — carry ranking is slow-moving so this is usually enough
Parameters Explained
top_nMax positions per side. Long top_n high-carry pairs, short bottom_n most-negative-carry pairs.
Default
3min_carry_pctAbsolute carry threshold (percent, annualized). Pairs within ±min_carry_pct of zero are skipped — too little reward for the FX risk.
Default
1.0%rebalance_freqHow often to re-rank and re-emit signals. Carry is slow-moving so monthly is almost always enough.
Default
monthlyWhen It Works
In calm, risk-on markets with stable or widening interest-rate differentials. Historically Sharpe 0.6-0.8 from the 1970s; best in periods of loose funding currencies (JPY, CHF) and tight high-yielding ones (USD, AUD, NZD).
When It Fails
During risk-off episodes — capital flees high-yielders back to safe havens (JPY especially), often violently. Carry unwound ~30% in weeks during 2008 and 2020.
Risks & Limitations
- Tail risk: carry trades unwind violently during flight-to-safety events
- Central bank surprises (rate cuts, rate hikes) can flip the ranking suddenly
- The MVP uses a STATIC policy-rate snapshot — backtests over rising-rate periods (2022-2023) understate the regime shift until we connect FRED time series
- Rollover costs include spreads; shown carry is theoretical, actual realized carry after spreads is typically 50-100bps lower
Implementation
POLICY_RATES is a hand-curated snapshot updated 2026-04-17 covering the G8 fiat currencies. The strategy ignores non-fiat instruments (XAU, SPX, BTC) via pair_carry_rate() returning None. Phase 4.1 will replace the snapshot with FRED historical series so the rate level at each backtest bar reflects reality.
Model parameters
Top N
Longs top 3 positive-carry pairs, shorts bottom 3
Min Carry
Skip pairs whose |carry| is below this threshold
Rebalance
Re-rank and re-emit signals at month start
Academic background
Academic Basis
Based on Lustig, Roussanov & Verdelhan (2011), 'Common Risk Factors in Currency Markets', Review of Financial Studies
Backtest this strategy
Run the exact model on your selected assets and date range. See trade-by-trade performance.
Backtest This →