CarryRisk: Medium

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 side

Signal Generation Logic

  1. 1Look up the current central-bank policy rate for each fiat currency (USD, EUR, GBP, JPY, AUD, NZD, CHF, CAD)
  2. 2For each FX pair in the universe, compute carry = rate(base) − rate(quote)
  3. 3Rank all pairs with both legs covered by the rate table
  4. 4Long the top_n pairs whose carry ≥ min_carry_pct
  5. 5Short the bottom_n pairs whose carry ≤ −min_carry_pct
  6. 6Pairs inside the ±min_carry_pct band are not traded
  7. 7Rebalance monthly — carry ranking is slow-moving so this is usually enough

Parameters Explained

top_n

Max positions per side. Long top_n high-carry pairs, short bottom_n most-negative-carry pairs.

Default

3
min_carry_pct

Absolute carry threshold (percent, annualized). Pairs within ±min_carry_pct of zero are skipped — too little reward for the FX risk.

Default

1.0%
rebalance_freq

How often to re-rank and re-emit signals. Carry is slow-moving so monthly is almost always enough.

Default

monthly

When 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

3

Min Carry

Skip pairs whose |carry| is below this threshold

1.0%

Rebalance

Re-rank and re-emit signals at month start

Monthly

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