Level 3 — ProductionCommodities, Forex & Crypto

Commodities, Forex & Crypto

45 minutes60 marksprintable — key stays hidden on paper

Level 3 — Production (from-scratch derivations, code-from-memory, explain-out-loud) Time limit: 45 minutes Total marks: 60

Instructions: Show all working. Derivations must start from first principles. Code answers may be pseudo-code but logic must be complete. Explain-out-loud prompts require a clear conceptual narrative.


Q1. [Spot–Futures Derivation] (12 marks)

(a) Derive from first principles (no-arbitrage / cost-of-carry argument) the fair futures price FF of a commodity given spot price SS, annual risk-free rate rr, annual storage cost rate uu (proportional), and time to maturity TT years. State every assumption. (6)

(b) Gold spot = \2{,}000/oz,/oz, r = 5%,storagecost, storage cost u = 1%p.a.(continuouslycompounded),p.a. (continuously compounded),T = 6$ months. Compute the fair futures price. (3)

(c) The market futures quote is \2{,}080$. Show whether an arbitrage exists and describe the exact cash-and-carry trade steps. (3)


Q2. [Forex Pips & Quotes] (11 marks)

(a) Define base currency, quote currency, and pip. Derive a general formula for the profit (in quote currency) on a position of NN units of the base currency when the pair moves by Δ\Delta pips. (4)

(b) A trader goes long 100,000 units of EUR/USD at 1.08501.0850 and closes at 1.09121.0912. Compute the pip movement and profit in USD. (4)

(c) Explain out loud why USD/INR is quoted the way it is and what a "depreciating rupee" looks like in the quote. (3)


Q3. [Cross-Rate Derivation] (9 marks)

Given EUR/USD = 1.09001.0900 and USD/INR = 83.2083.20:

(a) Derive the EUR/INR cross rate from first principles, showing the currency-cancellation logic. (4)

(b) If a dealer quotes EUR/INR at 91.2091.20, identify the arbitrage direction and compute profit per 1,000 EUR routed through USD. (5)


Q4. [Crypto / Blockchain — Explain & Build] (12 marks)

(a) From memory, write pseudo-code for computing a simplified block hash and describe how "proof-of-work" mining searches for a valid nonce. (6)

(b) Explain out loud the difference between a hot wallet and a cold wallet, and why a private key — not the coins — is what you actually secure. (3)

(c) Distinguish Bitcoin from Ethereum in terms of core purpose and consensus, and define what an "altcoin" is. (3)


Q5. [Stablecoins, DeFi & Volatility] (9 marks)

(a) Explain the three main mechanisms by which stablecoins maintain their peg (fiat-collateralised, crypto-collateralised, algorithmic), giving one risk of each. (4)

(b) Compute the annualised volatility of an asset whose daily log-return standard deviation is 4%4\% (assume 365 trading days for crypto). Compare qualitatively to an equity index at 1%\approx 1\% daily. (5)


Q6. [Commodity Exchange — Explain-out-loud] (7 marks)

Explain the role of MCX in India: contract standardisation, the clearing house / margining function, and how mark-to-market settlement reduces counterparty default risk. (7)


Answer keyMark scheme & solutions

Q1 (12)

(a) Derivation (6) Assume: no arbitrage, frictionless market, can borrow/lend at rr, storage cost paid, asset held only for financing (no convenience yield), continuous compounding. (1 for assumptions)

Cash-and-carry replication: today borrow SS, buy 1 unit spot, and prepay storage. At TT deliver into the futures.

  • Cost of borrowed cash grows to SerTSe^{rT}. (1)
  • Storage adds cost that grows as SeuTSe^{uT} (treated as continuous proportional carry). (1)
  • Combined carry: Se(r+u)TS e^{(r+u)T}. (1) By no-arbitrage the futures price must equal the total carry cost, else risk-free profit exists: (1) F=Se(r+u)TF = S\,e^{(r+u)T} (1)

(b) (3) (r+u)T=0.06×0.5=0.03(r+u)T = 0.06 \times 0.5 = 0.03. F = 2000\,e^{0.03} = 2000 \times 1.030455 = \2060.91$. (3)

(c) (3) Market =2080>= 2080 > fair 2060.912060.91 → futures overpriced. (1) Cash-and-carry arbitrage:

  • Borrow $2000, buy gold spot, pay storage; short the futures at 2080. (1)
  • At TT deliver gold, receive 2080, repay carry 2060.91 → risk-free profit \approx \19.09$/oz. (1)

Q2 (11)

(a) (4)

  • Base currency = first currency in the pair; the one being bought/sold (priced). (1)
  • Quote currency = second currency; the price is expressed in it. (1)
  • Pip = smallest standard price increment, 0.00010.0001 for most pairs (0.010.01 for JPY pairs). (1)
  • Profit =N×Δ×(pip size)= N \times \Delta \times (\text{pip size}) in quote currency (positive for correct direction). (1)

(b) (4) Pip move =(1.09121.0850)/0.0001=0.0062/0.0001=62= (1.0912 - 1.0850)/0.0001 = 0.0062/0.0001 = 62 pips. (2) Profit = 100000 \times 62 \times 0.0001 = 100000 \times 0.0062 = \620$. (2)

(c) (3) USD/INR: USD is base, INR is quote → quote tells how many rupees per 1 USD. (1) A depreciating rupee means more rupees needed per dollar → the quote number rises (e.g. 83 → 85). (1) Standard convention because USD is the global reserve/base currency. (1)


Q3 (9)

(a) (4) EUR/INR =EURUSD×USDINR= \dfrac{\text{EUR}}{\text{USD}} \times \dfrac{\text{USD}}{\text{INR}}; USD cancels. (2) =1.0900×83.20=90.688= 1.0900 \times 83.20 = 90.688. (2)

(b) (5) Dealer quotes 91.20, synthetic (true) =90.688= 90.688 → dealer's EUR is overvalued in INR. (1) Arbitrage: sell EUR to the dealer for INR at 91.20, then buy EUR back synthetically via USD at 90.688. (2) Per 1000 EUR: receive 9120091200 INR, cost to rebuy =90688= 90688 INR → profit =512= 512 INR. (2)


Q4 (12)

(a) (6)

function computeHash(index, prevHash, timestamp, data, nonce):
    return SHA256(index + prevHash + timestamp + data + nonce)

function mineBlock(block, difficulty):
    target = "0" * difficulty          # required leading zeros
    nonce = 0
    while True:
        h = computeHash(block.index, block.prevHash,
                        block.timestamp, block.data, nonce)
        if h[:difficulty] == target:
            return nonce, h            # valid block found
        nonce += 1

Marks: correct hash-of-fields concept (2), loop incrementing nonce (2), leading-zero target / difficulty check (2).

(b) (3) Hot wallet = connected to internet (exchange/app), convenient but exposed. (1) Cold wallet = offline (hardware/paper), safer for storage. (1) You secure the private key because coins live on the blockchain; whoever holds the key can move the coins — losing the key loses access permanently. (1)

(c) (3) Bitcoin: digital store of value / peer-to-peer cash, Proof-of-Work. (1) Ethereum: programmable smart-contract platform (dApps), now Proof-of-Stake. (1) Altcoin = any cryptocurrency other than Bitcoin. (1)


Q5 (9)

(a) (4) (1 mark each: mechanism + a risk)

  • Fiat-collateralised (e.g. USDC): backed 1:1 by dollars in reserve; risk = reserve/custodian trust & audits.
  • Crypto-collateralised (e.g. DAI): over-collateralised with crypto; risk = collateral crash / liquidation cascade.
  • Algorithmic: supply expands/contracts by algorithm; risk = de-peg / death spiral (e.g. UST). (4th mark: any coherent 4th risk point or clear structure.)

(b) (5) Annualised vol =σdailyn=0.04×365= \sigma_{daily}\sqrt{n} = 0.04 \times \sqrt{365}. (2) 365=19.105\sqrt{365} = 19.105; =0.04×19.105=0.7642=76.4%= 0.04 \times 19.105 = 0.7642 = 76.4\%. (2) Equity index: 0.01×25215.9%0.01\times\sqrt{252}\approx 15.9\% — crypto is roughly 4–5× more volatile. (1)


Q6 (7)

  • MCX standardises contracts (lot size, quality/grade, delivery, tick) so trading is fungible & liquid. (2)
  • Clearing house acts as central counterparty, collects initial + maintenance margin to guarantee performance. (2)
  • Daily mark-to-market: gains/losses settled each day so no large accumulated exposure builds up. (2)
  • This reduces counterparty/default risk by ensuring losses are covered before they compound. (1)

[
  {"claim":"Gold fair futures = 2000*e^0.03 ≈ 2060.91","code":"import sympy as sp\nF=2000*sp.exp(0.03)\nresult=abs(float(F)-2060.909)<0.01"},
  {"claim":"Arbitrage profit per oz ≈ 19.09","code":"import sympy as sp\nF=2000*sp.exp(0.03)\nprofit=2080-float(F)\nresult=abs(profit-19.091)<0.01"},
  {"claim":"EUR/USD long 100k, +62 pips = $620","code":"pips=(1.0912-1.0850)/0.0001\nprofit=100000*pips*0.0001\nresult=abs(pips-62)<1e-6 and abs(profit-620)<1e-6"},
  {"claim":"EUR/INR cross rate = 90.688","code":"cross=1.0900*83.20\nresult=abs(cross-90.688)<1e-6"},
  {"claim":"Cross arb profit per 1000 EUR = 512 INR","code":"cross=1.0900*83.20\nprofit=1000*(91.20-cross)\nresult=abs(profit-512)<1e-6"},
  {"claim":"Annualised crypto vol = 0.04*sqrt(365) ≈ 76.4%","code":"import sympy as sp\nv=0.04*sp.sqrt(365)\nresult=abs(float(v)-0.7642)<0.001"}
]