Commodities, Forex & Crypto
Level: 5 (Mastery — Cross-Domain: Finance + Math + Coding) Time Limit: 90 minutes Total Marks: 60
Instructions: Answer all questions. Show full derivations. Where code is asked, pseudocode or Python is acceptable but must be logically complete. Use for inline math.
Question 1 — Commodity Futures & Cost-of-Carry (20 marks)
The cost-of-carry model for a commodity futures price is:
where is spot, the risk-free rate, the storage cost rate, the convenience yield, and time to expiry (years).
(a) Gold trades on MCX at spot per 10g. The 3-month risk-free rate is p.a. (continuous), storage p.a., convenience yield . Compute the fair 3-month futures price . (5 marks)
(b) The market quotes the 3-month gold future at ₹73,500. Determine whether an arbitrage exists, state its direction (cash-and-carry vs reverse), and compute the risk-free profit per 10g (ignore transaction costs). (6 marks)
(c) Crude oil often shows backwardation (). Using the model, prove algebraically the condition on relative to that produces backwardation, and explain the economic meaning of convenience yield that drives it. (4 marks)
(d) Write a short function annualised_basis(spot, fut, days) returning the annualised basis (percentage) between spot and futures. Show the formula it implements. (5 marks)
Question 2 — Forex Pips, Cross-Rates & Triangular Arbitrage (22 marks)
(a) Define base and quote currency for the pair USD/INR = 83.20. If USD/INR moves to 83.26, how many pips did it move (assume 2-decimal pip convention for INR pairs)? What is the P&L in INR on a long position of $100,000 base? (5 marks)
(b) Given these market quotes:
- EUR/USD = 1.0850
- USD/INR = 83.20
- EUR/INR = 90.60
Compute the implied EUR/INR cross-rate from the first two quotes and determine whether a triangular arbitrage opportunity exists. State the direction of trades to capture it, starting from ₹1,000,000. (9 marks)
(c) Classify USD/INR, EUR/USD, and EUR/TRY into major / minor / exotic and justify each classification in one line. (3 marks)
(d) Write a function triangular_profit(eurusd, usdinr, eurinr, capital_inr) that returns the arbitrage profit in INR for the ₹→EUR→USD→₹... loop (choose the profitable direction). State your loop direction explicitly. (5 marks)
Question 3 — Crypto Volatility, Stablecoins & Blockchain Integrity (18 marks)
(a) Bitcoin daily log-returns have standard deviation . Compute the annualised volatility assuming 365 trading days, and compare it qualitatively to an equity index at annualised. (4 marks)
(b) A crypto position of \sigma = 4.2%z_{0.99} = 2.326$). (5 marks)
(c) Explain the mechanism by which a fiat-collateralised stablecoin (e.g., USDC) maintains its $1 peg, and contrast one systemic risk of an algorithmic stablecoin. (4 marks)
(d) A blockchain links blocks via hash pointers: block stores . Prove briefly why altering data in block invalidates all blocks , and write pseudocode verify_chain(blocks) returning True iff the chain is intact. (5 marks)
Answer keyMark scheme & solutions
Question 1
(a) , exponent . . (5)
- Correct and rate sum (2), exponentiation (2), final value (1).
(b) Market future ₹73,500 > fair ₹73,454.5 → future is overpriced → cash-and-carry arbitrage: buy spot gold, sell the future. (3) Profit = market future − fair future = per 10g. (3)
- Direction identified (3), magnitude (3).
(c) Backwardation means . (2) Economic meaning: a high convenience yield reflects the benefit of holding the physical commodity (avoiding stockouts, meeting production needs); when this exceeds financing + storage costs, holders prefer the physical over the future, pushing futures below spot. (2)
(d) Annualised basis . (2)
def annualised_basis(spot, fut, days):
return (fut - spot) / spot * (365 / days) * 100(3) — formula (2), correct code (3).
Question 2
(a) In USD/INR, USD = base (the priced currency, quantity 1), INR = quote (units of INR per 1 USD). (2) Move 83.20 → 83.26 = 0.06 = 6 pips (1 pip = 0.01 for INR pairs). (1.5) P&L (long USD): profit. (1.5)
(b) Implied EUR/INR = EUR/USD × USD/INR = . (3) Market EUR/INR = 90.60 > implied 90.272 → EUR is overvalued in INR terms in the direct market → arbitrage exists. (2) Direction (start ₹1,000,000):
- Buy EUR directly? No — sell the overpriced side. Convert ₹ → USD → EUR (cheap synthetic), then sell EUR → INR at high market rate.
- ₹1,000,000 / 83.20 = $12,019.23
- $12,019.23 / 1.0850 = €11,077.63
- €11,077.63 × 90.60 = ₹1,003,633.4 Profit ≈ ₹3,633. (4)
(c) (3)
- USD/INR — minor (INR is an emerging-market currency paired with a major; not a G10 cross). Some texts call it exotic-ish, but conventionally minor/emerging.
- EUR/USD — major (two most-traded reserve currencies, deepest liquidity).
- EUR/TRY — exotic (Turkish lira is an illiquid emerging-market currency, wide spreads).
(d) Loop direction: ₹ → USD → EUR → ₹ (the profitable direction found in (b)). (2)
def triangular_profit(eurusd, usdinr, eurinr, capital_inr):
usd = capital_inr / usdinr # INR -> USD
eur = usd / eurusd # USD -> EUR
back = eur * eurinr # EUR -> INR (sell high)
return back - capital_inr(3)
Question 3
(a) . (3) This is ~4× the equity index's 16% — crypto is far more volatile. (1)
(b) VaR_{99\%} = \text{Position} \times z \times \sigma_d = 50000 \times 2.326 \times 0.042 = \mathbf{\4{,}884.6}$. (5)
- Formula (2), z & σ substitution (2), value (1).
(c) Fiat-collateralised stablecoin: each token is backed 1:1 by reserves (cash / short-term treasuries) held by the issuer; redemption at $1 + reserve audits + arbitrage keep the peg (if price < $1, arbitrageurs buy and redeem for $1). (2) Algorithmic stablecoin systemic risk: no hard collateral — the peg relies on a mint/burn mechanism with a paired token; under a confidence loss it can enter a death spiral (e.g., UST/LUNA), where falling price triggers reflexive supply expansion and total collapse. (2)
(d) Each block stores a hash of its data concatenated with the previous block's hash. Altering changes ; since block committed to the old , its stored pointer no longer matches, and this mismatch cascades to every . Because hashes are collision-resistant, an attacker cannot cheaply recompute a consistent chain. (2)
def verify_chain(blocks):
for n in range(1, len(blocks)):
if blocks[n].prev_hash != H(blocks[n-1].data + blocks[n-1].prev_hash):
return False
return True(3)
[
{"claim":"Gold fair future = 72000*e^0.02 ≈ 73454.5","code":"import sympy as sp\nF = 72000*sp.exp(sp.Rational(2,100))\nresult = abs(float(F)-73454.5) < 1.0"},
{"claim":"Cash-and-carry profit ≈ 45.5 per 10g","code":"F = 72000*sp.exp(0.02)\nprofit = 73500 - F\nresult = abs(float(profit)-45.5) < 1.5"},
{"claim":"Implied EUR/INR = 1.0850*83.20 = 90.272","code":"result = abs(1.0850*83.20 - 90.272) < 1e-6"},
{"claim":"Triangular profit from 1,000,000 INR ≈ 3633","code":"cap=1000000\nusd=cap/83.20\neur=usd/1.0850\nback=eur*90.60\nresult = abs((back-cap)-3633) < 5"},
{"claim":"BTC annualised vol = 0.035*sqrt(365) ≈ 0.669","code":"v=0.035*sp.sqrt(365)\nresult = abs(float(v)-0.6687) < 0.01"},
{"claim":"ETH 1-day 99% VaR = 50000*2.326*0.042 ≈ 4884.6","code":"var=50000*2.326*0.042\nresult = abs(var-4884.6) < 1.0"}
]