24 — FX Forwards, Carry, and Commodity Roll Yield¶
Free learning pack¶
reference/fx/spot_and_forward.md,cross_currency_basis.md,fx_carry.mdreference/commodities/roll_yield.md
Do not search for more material until these are insufficient.
PREDICT¶
USD rates are 5%, EUR rates are 3%, spot is 1.10 USD/EUR. Without calculating, does EUR trade forward stronger (more USD per EUR) or weaker than spot? Which currency's rate advantage does that reflect?
Formula (covered interest parity)¶
F = S * (1 + r_domestic*T) / (1 + r_foreign*T)
spot = 1.10 # USD per EUR
r_usd = 0.05
r_eur = 0.03
years = 1.0
# MANUAL FIRST:
# compute the 1-year CIP forward rate.
forward = None
print(forward)
PREDICT (basis)¶
The market forward is actually quoted at 1.1250, slightly above the CIP value you just computed. Is the implied cross-currency basis positive or negative? What might cause it (a fundamental view, or a funding technical)?
market_forward = 1.1250
# MANUAL FIRST:
# solve for the implied foreign rate that would make CIP reproduce
# market_forward, then compute the basis (implied_rate - r_eur).
basis = None
print(basis)
FX carry¶
carry = r_foreign - r_domestic
# MANUAL FIRST:
# a PM is long a currency yielding 7%, funded in one yielding 2%.
# compute the unhedged carry.
carry = None
print(carry)
PREDICT (commodities)¶
Crude oil's near-month future trades at $80, the 12-month-out contract at $74 (backwardation). If spot doesn't move at all over the year, does a long position that keeps rolling from near to far month make or lose money purely from rolling?
Formula¶
roll_yield = (near_price - far_price) / far_price
near_price, far_price = 80.0, 74.0
# MANUAL FIRST:
# compute the roll yield and state whether the curve is in contango or
# backwardation.
yield_from_roll = None
print(yield_from_roll)
Experiment¶
Flip the commodity example into contango (near=$74, far=$80) and recompute roll yield. Then check: does the sign match your intuition from the PREDICT question?
Reference¶
reference/fx/spot_and_forward.md
reference/fx/cross_currency_basis.md
reference/fx/fx_carry.md
reference/commodities/roll_yield.md
Promote¶
Use src/pm/fx.py (fx_forward_rate, cross_currency_basis,
fx_carry) and src/pm/commodities.py (roll_yield,
commodity_curve_state) only after your own implementation.
Test¶
pytest tests/test_fx.py tests/test_commodities.py
ORAL CHECK¶
Explain to a PM why a persistently nonzero cross-currency basis is the FX market's version of the CDS-bond basis, and why a commodity's roll yield matters even when its spot price doesn't move.
Try /tutor concept fx carry for an adaptive walkthrough.