FX Forwards and NDFs for Quants
An FX forward locks an exchange rate for a future date. For a quote expressed as domestic currency per unit of foreign currency, covered interest parity gives
F = S · (1 + r_dom T) / (1 + r_for T)
using simple rates for illustration; production systems use currency-specific day-counts, curves, and discount factors. The forward points encode relative funding, not a free forecast of spot appreciation. A high-yielding currency tends to trade at a forward discount against the funding currency, which is the mechanical basis of carry trading.
Deliverable forwards versus NDFs
A deliverable forward exchanges both currencies at maturity. A non-deliverable forward (NDF) settles only the difference between the contracted rate and an agreed spot fixing, typically in USD. NDFs are used where capital controls, settlement infrastructure, or convertibility make delivery impractical.
| Feature | Deliverable forward | NDF |
|---|---|---|
| Settlement | Exchange two currencies | Cash difference |
| Key dates | Value date | Fixing date and settlement date |
| Main basis risk | Funding/settlement | Fixing and onshore-offshore basis |
| Typical use | G10 hedging | Restricted/emerging currencies |
For NDF notional N foreign units and quote convention domestic per foreign, the cash settlement depends on contract convention. Do not memorize a generic sign: encode the currency pair, fixing source, settlement currency, and notional definition explicitly. A one-character convention error can invert a hedge.
Curves, basis, and marks
Price forwards from collateral-consistent discount curves. Post-crisis cross-currency basis means a naive pair of unsecured deposit rates can disagree with traded forwards. For an uncollateralized client trade, credit valuation adjustment, funding valuation adjustment, and credit support annex terms affect the mark. For research, distinguish tradable bid/offer forward points from mid curves and roll dates; carry signals can vanish after crossing spreads monthly.
def forward_rate(spot, r_dom, r_for, yearfrac):
return spot * (1 + r_dom * yearfrac) / (1 + r_for * yearfrac)
def forward_pnl(notional_foreign, forward, spot_at_fix):
# domestic-currency approximation; confirm actual contract convention
return notional_foreign * (spot_at_fix - forward)
Signal construction and risk
A cross-sectional carry strategy ranks currencies by forward discount, but it is exposed to global risk appetite, funding squeezes, and sharp depreciation of high-yielders. Add volatility scaling, liquidity screens, concentration limits, and a crash scenario in which correlations converge. Momentum and valuation signals may diversify carry, but only if their data timestamps and rebalance assumptions are realistic.
NDF research needs fixing-aware data. The offshore quote can move materially between London close, local fix, and settlement. Holidays create broken dates and nonstandard accruals; a backtest that rolls on an impossible local holiday quietly creates alpha. Counterparty limits and settlement confirmation are operational risks, not paperwork.
Implementation discipline
The model is only one layer of the trade. Store input timestamps, vendor identifiers, contract specifications, FX conversion conventions, and the exact version of each risk model alongside every signal. A result that cannot be reproduced from raw inputs is not a research result; it is an anecdote. Use point-in-time constituent data, distinguish an indicative quote from an executable quote, and make the decision clock explicit. For an execution-sensitive strategy, a close price or composite midpoint is usually an unattainable benchmark rather than a fill.
Evaluate the full distribution, not just a headline Sharpe: drawdown, tail loss, turnover, capacity, exposure concentration, and degradation during the stressed periods that motivated the idea. Split design, parameter choice, and final evaluation across separate samples. If alternatives were explored, record them and account for the search using the Deflated Sharpe Ratio. Finally, run a paper or shadow phase with the same order, reconciliation, and limit logic planned for production. A backtest should establish a conditional expectation, not a promise of a tradable return.
Key takeaways
- FX forwards reflect covered interest parity under the relevant collateral and curve conventions.
- NDFs settle a fixing-based cash difference and introduce distinct onshore-offshore and fixing risks.
- Forward points are carry compensation, not a standalone directional forecast.
- Respect quote, notional, fixing, and day-count conventions in every pricing function.
- Carry strategies require liquidity, crash, and realistic roll-cost controls.
