Currency portfolios
Cross-Sectional Currency Momentum
Original implementation of a cross-sectional momentum family: rank currencies by prior returns and hold winners against losers, with conservative execution rules.
- Category
- Currency portfolios
- Timeframes
- D1 (monthly portfolio rebalance)
- Pairs
- AUD, CAD, CHF, EUR, GBP, JPY, NOK, NZD and SEK versus USD
- Test status
- Monthly family research; exact portfolio test incomplete

How the rule works
Cross-sectional momentum compares currencies with one another; it can hold a relative winner even if that currency has fallen against USD. USD/JPY must be inverted before ranking yen returns, or the sign is wrong. Equal long/short notional removes the initial dollar imbalance, but currency correlations, financing and discrete lot sizes still affect realized risk. Sudden reversals of recent winners are a characteristic loss scenario.
Setup
- Use a fixed universe of AUD, CAD, CHF, EUR, GBP, JPY, NOK, NZD and SEK versus USD. Normalize every spot quote to Q = USD per one unit of foreign currency; invert USD/foreign quotes before computing returns. Synchronize closing observations at 17:00 America/New_York using a historical broker-offset schedule. Require 300 common, valid daily observations and at least six eligible currencies.
- At the last completed New York trading day of each month, freeze the ranking. Define t as that completed close. Ties are resolved alphabetically by ISO currency code. Set n=floor(number eligible/3), and select the highest n and lowest n currencies. Submit the rebalance at 08:00 Europe/London on the next common trading day, using then-executable prices.
- Rank by R60=Q[t]/Q[t−60]−1, including only information from completed t. The 60-interval lookback needs 61 closes. This spot-price variant is not the total/excess-return construction of every published momentum study.
Indicators
- 60-trading-day normalized spot return Q[t]/Q[t−60]−1
- 60 daily log returns for per-currency volatility and the sample covariance matrix
- Historical broker financing for implementation costs; not part of the spot rank
Long entry
- At next liquid-session open, buy each winner/USD or sell USD/winner as needed to create long winner exposure.
Short entry
- At the same time, sell each loser/USD or buy USD/loser to create short loser exposure.
Stop loss
- There is no guaranteed per-leg price SL. At each completed New York daily close, value portfolio NAV after costs. If NAV/NAV_at_month_start−1 <= −0.06, request liquidation of every tradable leg at the next executable quote and remain in cash until the next monthly decision. This is a 6% month-to-date loss trigger, not a maximum drawdown guarantee; gaps and untradeable quotes can make losses larger.
Exit
- At the next monthly rebalance, close legs no longer selected and adjust surviving notionals to the newly computed weights. Roll forward contracts on their stated settlement/maturity schedule using actual executable quotes. The signal does not justify allowing an expiring contract to settle accidentally.
- If a required quote is missing, initiate no new portfolio. Existing exposure remains a recorded risk until an executable quote becomes available; request exit then. Never fill a suspended market at its last stale price or pretend it could be force-closed after a fixed number of days.
Risk and position size
- Compute individual volatilities from 60 daily log returns. Within each selected tail, normalize inverse-volatility weights to +0.5 for the long side and −0.5 for the short side. If any volatility is zero or inputs are missing, do not initiate the portfolio. Let w be this signed weight vector and Σ the 60-day sample covariance matrix. Annualized portfolio volatility = sqrt(252 × wᵀΣw).
- Multiply every weight by k=min(0.08/portfolio volatility, 1.5/sum(abs(w)), 0.2/max(abs(w))). Thus volatility is a target ceiling of 8% rather than a guaranteed risk level; gross exposure is at most 150% of NAV and each currency at most 20%. Convert notionals to executable lot/contract sizes by rounding down and recheck caps.
Costs and execution
- Include bid/ask on every entry, reduction and roll, commissions, financing or forward points, and account-currency valuation. Do not splice spot returns, forward excess returns and broker swaps into one unexplained series. Forward quotes, calendars and historical funding must be independently available; an MT5 spot screenshot does not supply them.
When the method can fail
- Exclude pegged, capital-controlled, or persistently non-tradable currencies. This requires synchronized, survivorship-aware data, not retail chart snapshots.
Worked example
- Hypothetical six-currency R60 ranks are +5%, +3%, +1%, −1%, −2% and −4%. Long the two strongest and short the two weakest. With identical volatilities, base weights are +0.25,+0.25,−0.25,−0.25; if base portfolio volatility is 10%, k=min(0.08/0.10,1.50/1,0.20/0.25)=0.8. Final gross is 80% of NAV. These invented returns explain the rule and are not a backtest.
Monthly family research and remaining test gap
The exact portfolio specification above remains incompletely tested. Public Internet data now supports the separate monthly family analysis below. A positive research result is not a pass for the strategy on this page.
Source: Adrien Verdelhan’s public MIT workbook, country-level monthly exchange-rate changes and interest-rate differences. Research window: 1984-03-30–2020-04-30; 434 calendar months including cash periods. The universe uses the nine named G10 currencies where observations are available, with at least six eligible currencies.
| Assumed cost | Months | Annualized net | Monthly profit factor | Max drawdown | Later-half annualized |
|---|---|---|---|---|---|
| 5 bp × turnover | 434 | -0.12% | 0.99 | 23.72% | -1.04% |
| 10 bp × turnover | 434 | -0.56% | 0.90 | 29.77% | -1.51% |
| 20 bp × turnover | 434 | -1.42% | 0.75 | 45.82% | -2.45% |
The reproducible monthly variant uses three-month momentum/volatility, lagged monthly interest differences for carry, top and bottom thirds, inverse-volatility weights capped at 20% per leg, and cash for rejected legs. Carry plus trend retains carry-selected legs only when their three-month trend agrees. Costs apply to absolute weight turnover, including closing to cash and final liquidation. Signals never use next-month prices or their availability.
Missing from this dataset: daily synchronized spot and forward levels, maturity and executable bid/ask, London 08:00 fills, NY 17:00 decision prices, daily volatility controls and the stated monthly loss-trigger exits. These cannot be reconstructed reliably from monthly returns. Historical interest differences are a funding proxy; they are not an executable forward quote.
MIT source and research datasets · Download full monthly results, units and data audit · Download reproduction code and source manifest
Execution and research protocol
- A spot chart illustrates one currency only. It cannot show cross-sectional ranks, contemporaneous forwards, portfolio weights or actual trading costs. Obtain synchronized historical inputs for every constituent before testing this rule.
- Freeze signals using information available at the decision timestamp. Convert all exchange rates to the stated quote convention before calculating returns and covariance. Record missing observations, executable bid/ask, forward maturity, interest, rolls and each cash allocation.
- Validate the full portfolio out of sample, including transaction costs and historical funding. The monthly loss threshold is an exit trigger, not a guaranteed maximum loss: quotes can gap or become unavailable. This rule has no claimed verified portfolio performance.
Adapt and test your version
- Treat these inputs as a reproducible starting specification. Choose a currency pair, session and holding period that match the time you can monitor the market, then record any changes to indicator periods, thresholds, stop distance or exits as a new version.
- Change one hypothesis at a time. Reserve a later period and additional pairs for evaluation before looking at their results. Include your account’s actual trading and financing costs, compare small parameter changes, and forward-test on demo. A selected profitable window does not validate the strategy or its modified version.
Reproduce the chart in MT5
- Display a D1 spot chart for one portfolio currency with month boundaries marked. This is price context only: the ranking, financing and covariance calculations require a separate synchronized multi-currency dataset. The chart is not evidence that a portfolio entry passed those tests.
Sources
- Currency Momentum Strategies — Academic currency-momentum family evidence and limits to arbitrage.
- Drivers of carry and currency momentum — Difference between momentum and carry, transaction costs and downside risk.
