Level 5 — MasteryCommodities, Forex & Crypto

Commodities, Forex & Crypto

90 minutes60 marksprintable — key stays hidden on paper

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:

F=S0e(r+uy)TF = S_0 \, e^{(r + u - y)T}

where S0S_0 is spot, rr the risk-free rate, uu the storage cost rate, yy the convenience yield, and TT time to expiry (years).

(a) Gold trades on MCX at spot S0=72,000S_0 = \text{₹}72{,}000 per 10g. The 3-month risk-free rate is 6.8%6.8\% p.a. (continuous), storage u=1.2%u = 1.2\% p.a., convenience yield y=0y = 0. Compute the fair 3-month futures price FF. (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 (F<S0F < S_0). Using the model, prove algebraically the condition on yy relative to (r+u)(r+u) 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 σd=3.5%\sigma_d = 3.5\%. Compute the annualised volatility assuming 365 trading days, and compare it qualitatively to an equity index at 16%16\% annualised. (4 marks)

(b) A crypto position of 50,000inETHhasdaily50{,}000 in ETH has daily \sigma = 4.2%.Assumingnormallydistributedreturns,computethe1day99. Assuming normally distributed returns, compute the **1-day 99% Value-at-Risk** (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 nn stores H(datanHn1)H(\text{data}_n \,\|\, H_{n-1}). Prove briefly why altering data in block kk invalidates all blocks j>kj > k, and write pseudocode verify_chain(blocks) returning True iff the chain is intact. (5 marks)


Answer keyMark scheme & solutions

Question 1

(a) T=0.25T = 0.25, exponent =(0.068+0.0120)(0.25)=0.08×0.25=0.02= (0.068 + 0.012 - 0)(0.25) = 0.08 \times 0.25 = 0.02. F=72000e0.02=72000×1.020201=73,454.5F = 72000 \, e^{0.02} = 72000 \times 1.020201 = \text{₹}73{,}454.5. (5)

  • Correct TT and rate sum (2), exponentiation (2), final value (1).

(b) Market future ₹73,500 > fair ₹73,454.5 → future is overpricedcash-and-carry arbitrage: buy spot gold, sell the future. (3) Profit = market future − fair future = 7350073454.5=45.573500 - 73454.5 = \text{₹}45.5 per 10g. (3)

  • Direction identified (3), magnitude (3).

(c) Backwardation means F<S0e(r+uy)T<1(r+uy)<0y>r+uF < S_0 \Rightarrow e^{(r+u-y)T} < 1 \Rightarrow (r+u-y) < 0 \Rightarrow y > r + u. (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 =FSS×365days×100%= \dfrac{F - S}{S} \times \dfrac{365}{\text{days}} \times 100\%. (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): 100,000×0.06=6,000100{,}000 \times 0.06 = \text{₹}6{,}000 profit. (1.5)

(b) Implied EUR/INR = EUR/USD × USD/INR = 1.0850×83.20=90.2721.0850 \times 83.20 = 90.272. (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):

  1. 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) σannual=σd365=0.035×19.105=0.6687=66.9%\sigma_{annual} = \sigma_d \sqrt{365} = 0.035 \times 19.105 = 0.6687 = \mathbf{66.9\%}. (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 datak\text{data}_k changes HkH_k; since block k+1k{+}1 committed to the old HkH_k, its stored pointer no longer matches, and this mismatch cascades to every j>kj > k. 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"}
]