Cross-Sectional Momentum
Rank G10 currencies by 6-month return and long the winners, short the losers
Risk
Medium
Holding Period
1 month (monthly rebalanced)
Best For
Markets with clear currency leadership (strong USD or strong JPY regimes)
How it works
Different from the existing TSMOM (each asset vs. itself), cross-sectional momentum is about *relative* strength: even in a down market we long the ones that fell least. Asness, Moskowitz & Pedersen (2013) showed this is a distinct factor from time-series momentum. For FX we rank currencies, not pairs, and express each long/short through the available quote (inverting direction when necessary).
Mathematical Foundation
rank_i = R_i,6M (currency vs USD) long top_k, short bottom_kSignal Generation Logic
- 1Build each G10 currency's 'price vs USD' series (direct if ccy_USD is available, inverted if only USD_ccy)
- 2At each rebalance date, compute the trailing 6-month log return for every currency with enough history
- 3Rank currencies by this return — USD itself is implicitly the base
- 4Long the top_k currencies (strongest vs USD), short the bottom_k (weakest)
- 5Express each currency exposure through its available pair — if only USD_ccy exists, flip direction accordingly
- 6Rebalance monthly — this is a slower factor than daily trading
Parameters Explained
lookback_monthsRanking window for trailing currency returns (in months). 6 months is the Asness–Moskowitz–Pedersen standard; 3 captures faster shifts but is noisier, 12 is slower but steadier.
Default
6top_kNumber of longs and number of shorts per rebalance. Smaller k = higher conviction but less diversification.
Default
2rebalance_freqHow often to re-rank and re-emit. Monthly matches the academic convention for cross-sectional momentum.
Default
monthlyWhen It Works
When there is a clear dispersion of currency strength — e.g. the strong-USD regimes of 2014-2015 and 2022, or strong-JPY regimes in risk-off periods. Benefits from USD as a stable anchor currency.
When It Fails
When currency leadership churns monthly without follow-through. Also whipsaws around macro surprises that flip the ranking (central bank pivots, political shocks).
Risks & Limitations
- Correlated losses across multiple legs during global risk-on/off flips
- Inverted-quote handling: ranking is by currency but signal lives on a pair — UI must explain why 'rank #1 JPY' shows as 'short USD_JPY'
- Rebalancing lag: 6-month ranking reacts slowly to sudden regime shifts
Implementation
currency_vs_usd_series() handles both direct (ccy_USD) and inverted (USD_ccy) quote resolution by taking 1/price on the inverted case. rank_returns() computes trailing log returns using only data on-or-before the rebalance date — no look-ahead.
Model parameters
Lookback
Ranking window for trailing currency returns vs USD
Top K
Number of longs and number of shorts per rebalance
Rebalance
Re-rank G10 universe at month start
Academic background
Academic Basis
Based on Asness, Moskowitz & Pedersen (2013), 'Value and Momentum Everywhere', Journal of Finance
Backtest this strategy
Run the exact model on your selected assets and date range. See trade-by-trade performance.
Backtest This →