The Analyst's Path

Phase 12Finance Plus, AI and the quant-code trackFinance trackDV1.0111,892 words1 h 6 min of readingabout 18 hours of study5 concept pagesfree

Forwards, Futures & Swaps: Pricing & Valuation

Here is the argument in its purest form, and every later section is a variation on it. Suppose you can (a) buy the underlying today at its spot price S0, financing the purchase by borrowing at the risk-free rate r, and hold it until the forward's maturity T…

Branch: Derivatives (Finance-Plus Ring) · Node DV1.01 · ~18 focused hours · Understanding gate ≥ 85%

A forward, a future, and a swap all share one property that makes them unlike almost anything else you have priced in this program so far: none of them has an independent price. A share of stock has a price because the market forms a view on the business behind it; a bond has a price because the market forms a view on a borrower's credit. A forward contract on that same share, or a future on that same bond, has no view of its own to form, its fair value is entirely and mechanically pinned down by the cost of carrying, financing, or replicating the underlying between today and the contract's settlement date. Change the financing rate, the dividend, the storage cost, or the time remaining, and the forward price moves in lockstep, by an amount you can compute exactly, in advance, with no forecast of where the underlying itself is going. That is a strange and powerful fact, and this module exists to make it a reflex: given a spot price, a financing rate, and a handful of well-defined carry costs and benefits, you will price an equity index future, a currency forward, a commodity future, a forward-rate agreement, and, the capstone, an entire interest-rate swap, recomputing every one of them in Python before it ever reaches this page.

Advertisement

This Ring is additive institutional/CFA breadth, it presents the toolkit and the plumbing alongside, not in place of, the program's process-over-P&L, concentration-over-diversification philosophy. Nothing here asks you to trade derivatives, let alone speculate with them; you are learning to price and value instruments that the rest of the program already assumes exist around every serious operating company and every serious portfolio, a hedge accounting note in M1.09, a corporate treasury's FX cover, an institutional book's rate overlay. DV1.01 opens the Derivatives branch with no prerequisite: only ordinary algebra, the time-value-of-money mechanics you have used everywhere since Phase 3, and comfort with exp() and log() on a calculator or in three lines of Python. What it demands in return is unusual discipline about which compounding convention you are using at any given moment, because the single most common error in this branch, and arguably in all of practitioner derivatives math: is mixing them.

One promise before you start: by the end of this module you will be able to look at a quoted futures price, a quoted forward rate, or a quoted swap rate and know, from first principles and your own arithmetic, whether it is fair, rich, or cheap, and, if it is mispriced, exactly what riskless trade captures the difference. That single reflex is the whole of "no-arbitrage pricing," applied five times to five different underlyings.


Learning objectives

By the end you can:

  1. State and apply the general no-arbitrage cost-of-carry model, and correctly select which compounding convention (continuous (equities, indices, commodities), simple/money-market (FX forwards, FRAs), or discrete periodic (swap legs)) applies to a given instrument, without mixing them.
  2. Price an equity index forward/future from a spot level, a financing rate, and a dividend yield (the continuous-yield method), and a single-stock forward from discrete, dated cash dividends (the PV-of-dividends method); detect a mispriced quote and size the cash-and-carry or reverse-cash-and-carry arbitrage it implies.
  3. Derive and apply Covered Interest Rate Parity (CIP) to price a deliverable USD/INR forward, distinguish it structurally from an offshore Non-Deliverable Forward (NDF), and compute an NDF's cash settlement against a fixing.
  4. Price a commodity forward from a financing rate, a storage/insurance cost, and a convenience yield; distinguish contango from backwardation and back out an implied convenience yield from an observed backwardated quote.
  5. Bootstrap a forward interest rate from two zero rates of different maturities (pricing a Forward Rate Agreement), and compute the FRA's discounted cash settlement against a realized reference rate.
  6. Explain why a forward settles once at maturity while a future is marked to market daily, compute a multi-day futures variation-margin sequence including a maintenance-margin breach and margin call, and value an outstanding OTC forward before its maturity by the replacement-cost method.
  7. Value a plain-vanilla interest rate swap as the difference of a fixed-rate bond and a floating-rate bond (equivalently, as a portfolio of FRAs); derive the par swap rate from a discount curve; value an existing off-market swap and reconcile the direct PV computation against the (contract rate − par rate) × annuity shortcut to the last decimal.
  8. (Productivity objective: R10 duality.) Recognize that derivatives pricing is the corpus's single highest AI-over-trust risk region, and route every AI-assisted curve build or pricing task through your own recomputed discount factors and reconciliation checks, never through the model's stated number alone.
  9. Apply every technique in both an Indian and a US market. Nifty/Bank Nifty index futures, the USD/INR forward and NDF, and an INR OIS-based interest-rate swap; the CME E-mini S&P 500 future, SOFR futures/FRAs, and a USD interest-rate swap, and connect each valuation forward to the hedge-accounting treatment (M1.09) and the portfolio-risk sizing (M9.01, M3.02) it eventually feeds.

Every objective above is a pricing objective, which leaves a layer out on purpose. The taxonomy those instruments sit inside, forward commitments against contingent claims, exchange-traded against over-the-counter, the clearing house and what it does to counterparty risk, and the honest list of what derivatives are for and what they cost, is owned by DV1.04 and is worth reading either before or after this node. Price first or classify first, the order does not matter; skipping the classification does.

The duality, stated once (R10). As in every module of this program's AI-facing threads, this node carries two objectives at once. The understanding objective (items 1–7 and 9) is what the mastery gate rewards: you earn the pass by deriving the price and reconciling the checks yourself, by hand or in code you wrote and understand. The productivity objective (item 8) is the payoff you keep: knowing that this specific region of the corpus is where a fluent, confidently-wrong AI answer is most dangerous, and building the habit of never letting one enter a valuation unverified. A tool can amplify a correct pricing engine; it can do nothing for a wrong one, and it will never tell you which you have.


Prerequisites & connections

Builds on. DV1.01 is the first node of the Derivatives branch, and it unlocks once you pass M3.01. It leans on tools you already own. M3.01 (time value of money) supplies the discounting mechanics, present value, discount factors, compounding, that every formula below is built from. M1.09 §4.9.2 already gave you the accounting side of derivatives at awareness level: fair-value hedges (both legs to P&L), cash-flow hedges (effective portion to OCI, recycled when the hedged item hits P&L), and the FVTPL bucket that catches derivatives by default. This module never re-derives that; it supplies the other half, how the instrument itself is priced and valued, so that when M1.09's OCI note says "cash-flow hedge reserve," you now know exactly what number is sitting inside it. M9.01 (Kelly, conviction × downside, the anti-ruin overlay) and M3.02 (CAPM, the efficient frontier, systematic risk) gave you the vocabulary for why a desk hedges or sizes an exposure at all; this module supplies the instruments those decisions are executed with, without re-teaching either the sizing math or the frontier.

Feeds forward. DV1.02 (Options. Parity, Binomial & BSM) takes the no-arbitrage machinery built here as its literal foundation: put-call parity is itself a cost-of-carry relationship, and the binomial tree's risk-neutral replication argument is the same "riskless portfolio must earn the riskless rate" logic you will use seven times below. DV1.03 (Option Strategies & Hedging Exposures) reuses this module's mark-to-market and swap-duration machinery when it sizes a hedge and quantifies basis risk. On the fixed-income side, FI1.02 (Duration, Convexity, PVBP/DV01) is where the swap fixed-leg sensitivity you compute here by brute-force PV gets its own dedicated tool, and FI1.03 (Term Structure & Swap Curves) is where you learn to build the discount curve this module always hands you as a given input: DV1.01 prices off a curve; FI1.03 teaches you to bootstrap one. In the alternatives ring, AL1.02 (Commodities & Real Assets) will take the contango/backwardation lens opened here in §"Commodities" and build it into a full return decomposition (spot return + roll yield + collateral yield), this module plants only the no-arbitrage pricing mechanism, not the asset-class return story.

The one-sentence version of this module. A forward, future, or swap has no price of its own to discover (only a fair value to compute) because a riskless replicating portfolio (borrow-and-buy the underlying, or a strip of money-market deposits) pins it down exactly; every calculation in this module is that one idea, applied to five different underlyings, under three different (and never-to-be-mixed) compounding conventions.


Core teaching content

Cost of carry model

The cost of carry model prices a forward by comparing two routes to the same asset at maturity: buy it now with borrowed money, or enter a forward and pay nothing today. Because both deliver one unit at time T, the forward price must equal spot compounded at the financing rate, adjusted down for carry benefits such as dividends and up for carry costs such as storage. If the quoted price drifts away from that fair value, an arbitrageur captures the gap, so in a liquid market it can't last.

4 min read, on its own page

Index futures pricing

Index futures pricing sets the fair futures price of an equity index at spot grown at the risk-free rate r less the continuous dividend yield q, F0 = S0 × e^((r-q)T). Because the futures holder doesn't receive the dividends, the financing cost is reduced by q, so the future trades above spot (contango) when r is greater than q. A single-stock forward is priced the same way, except that the present value of its discrete dividends is taken out of spot first.

3 min read, on its own page

The FX forward and its offshore cousin: Covered Interest Rate Parity and the NDF

A currency forward is cost-of-carry applied to money itself held in two currencies, and because both legs are simple bank deposits, the market convention is simple interest with a day-count fraction, not continuous compounding. Quoting USD/INR as "INR per 1 USD" (INR the quote currency, USD the base currency), the no-arbitrage condition is: a rupee invested at the INR rate for time T must earn the same certain return as a rupee converted to dollars today, invested at the USD rate, and converted back at the forward rate. Covered Interest Rate Parity (CIP):

F = S0 × (1 + r_INR·T) / (1 + r_USD·T)

Notice what this buys you: if r_INR > r_USD (India's money-market rate above the US dollar rate, the normal historical case), the formula forces F > S0, the rupee must trade at a forward discount (equivalently, the dollar at a forward premium) by (very nearly) the interest-rate differential, or a riskless arbitrage opens up between the two deposit markets. Worked Example 2 prices a 90-day USD/INR forward this way, confirms the annualized forward premium sits close to the simple rate differential, and then values the same contract one month into its life after both the spot rate and the two money-market rates have moved, the FX analogue of the mark-to-market idea you will formalize more generally in the next section. Be careful with what this relationship does not say: CIP is a riskless, covered no-arbitrage condition, not a forecast of where the spot rate is heading, that different (and much less reliable) claim belongs to uncovered interest rate parity, which is not this module's territory.

India's rupee is only partially convertible, so much of the offshore hedging and speculative activity in USD/INR happens through the Non-Deliverable Forward (NDF) rather than the deliverable forward above. An NDF has the same economic exposure but a different settlement mechanic: instead of exchanging principal (INR for USD) at maturity, the two counterparties cash-settle only the difference between the contracted forward rate and an official fixing rate, and (because the currency is non-deliverable offshore) that difference is settled in USD:

Settlement (USD, paid to the party long USD) = Notional_USD × (Fixing − Contracted forward) / Fixing

The offshore NDF market (historically concentrated in Singapore, London, and New York) exists precisely because it never requires anyone outside India's regulatory perimeter to hold or deliver rupees; since 2020, the Reserve Bank of India has also allowed rupee NDF trading onshore through India INX/NSE IFSC in GIFT City, narrowing (without eliminating) the historical onshore/offshore price gap. Worked Example 2 also settles a numeric NDF, and Practice P4 settles one in the opposite direction, reinforcing that the formula's sign tells you, mechanically, which party pays.

Modern Data Analysis callout. A trading or treasury desk never prices one contract by hand, it re-prices an entire strip of maturities every few seconds. The code for that is a direct, vectorized extension of the exact formulas above: hand a numpy array of maturities T to F = S0 * np.exp((r - q) * T) and get back an array of fair forward prices in one line, or vectorize the CIP formula across a full forward-points curve the same way. Building, calibrating, and backtesting that pricer, plus the curve-bootstrapping and P&L-attribution code around it, is the quant-code region's job (DA), not this one's; this module's job is making sure you understand every symbol in that one-liner well enough to catch it the day a feed hands it a stale q or the wrong day-count fraction for T.

Commodities: carry cost, convenience yield, and the shape of the curve

A commodity forward adds a wrinkle equities do not have: holding the physical asset costs something (storage, insurance, financing of the physical inventory) and can also benefit the holder in a way a purely financial asset never does, a manufacturer holding physical crude oil never runs out of feedstock mid-production, an option-like value that a mere futures contract, without the physical barrel actually in hand, cannot confer. Economists call that benefit the convenience yield, y_c, and it folds into the same continuous-compounding cost-of-carry formula as an extra carry benefit, exactly like a dividend yield:

F0 = S0 × e^{(r + u − y_c)T}, where u is the annualized storage/insurance cost.

When storage cost dominates and convenience yield is small (a well-supplied, easily-stored asset like gold), the future trades comfortably above spot (contango) and Worked Example 4 prices exactly this for gold. When physical scarcity is acute (a tight oil market, a harvest failure), the convenience yield can exceed the financing-plus-storage cost, and the future trades below spot (backwardation) the condition Worked Example 4 also demonstrates for crude oil, by observing a below-spot quote and solving the formula backward for the implied convenience yield the market must be pricing in. That inversion, reading the shape of a futures curve to infer something about physical market tightness that is not otherwise directly observable, is one of the most practically useful skills in this whole section, and it is exactly the seed that AL1.02 will grow into a full commodities-as-asset-class framework (spot return, roll yield from the curve's shape, and collateral yield); this module stops at the pricing mechanism.

Forward rate agreement

A forward rate agreement (FRA) is a contract on the interest rate for a future period, such as a 3×9 FRA covering months 3 to 9. Its rate is whatever makes the one-step and two-step routes to month 9 earn the same, using simple interest and each leg's day-count fraction. At expiry it settles against the realised rate, discounted back one period because payment falls at the start of the forward period.

3 min read, on its own page

Futures vs forwards

A forward is an OTC contract that settles once, at maturity, while a future is exchange-traded and marked to market daily, with variation margin paid in or out each session. Both follow the same cost-of-carry price, so the difference is when the gain or loss is realised: the daily cash flows add up to the total price change. Daily settlement also makes a future functionally free of the counterparty credit risk an uncleared forward carries, at the cost of daily cash-management pressure.

4 min read, on its own page

Interest rate swap valuation

A plain-vanilla interest rate swap, where one party pays a fixed rate and the other a floating rate on the same notional, is valued as a long fixed-rate bond and a short floating-rate bond for the fixed-rate receiver, with the mirror image for the payer. A floating-rate bond is worth par at a reset date, so only the fixed leg needs summing from the discount curve. The fixed rate that makes a new swap worth exactly zero is the par swap rate.

5 min read, on its own page

Common mistakes & how experts think differently

1. Mixing compounding conventions. The single most common bug in this branch: plugging a continuously-compounded rate straight into the simple-interest CIP or FRA formula, or vice versa, without converting. The two conventions are not interchangeable, and the error is often small enough to look "close enough", which makes it worse, not better, because a near-miss is harder to catch than an obviously wrong number. The expert states which convention a formula uses before touching a calculator, and converts explicitly (r_continuous = ln(1+r_simple·τ)/τ) whenever a rate crosses from one market convention into another.

2. Treating "the futures price" and "the fair value" as the same number by assumption. A quoted futures price is a market fact; the cost-of-carry price is a computed benchmark you check it against. Away from expiry the two can differ (basis), and only converge to each other exactly at expiry (Practice P14 shows this numerically). The expert always computes the fair value independently first, then asks whether the quote agrees, never assumes agreement and skips the check.

3. Getting the arbitrage direction backwards. When a future is rich (quoted above fair value), the correct trade is to sell the future and buy the underlying financed by borrowing (cash-and-carry); when it is cheap, the correct trade is the reverse. Reversing this direction turns a riskless arbitrage into a directional bet on the underlying, a surprisingly common error under exam pressure. The expert derives the direction from the sign of (quoted − fair) every time, rather than pattern-matching to whichever trade they did last.

4. Trying to "deliver" an NDF, or forgetting the fixing determines everything. An NDF never exchanges principal; it settles a single net cash amount, in USD, against a published fixing rate, there is no rupee delivery to think about, onshore or off. The expert always names the fixing source and date before computing an NDF settlement, because the entire cash flow is a function of exactly that one number.

5. Assuming any measured mispricing is a real, executable arbitrage. The formulas here are frictionless, no bid-ask spread, no transaction cost, no cost of borrowing the securities to sell short, no margin funding drag. A small basis that looks like "free money" on paper often is not, once realistic frictions are included, and in India specifically, shorting the full underlying basket for index arbitrage runs into securities-lending (SLB) constraints that make textbook cash-and-carry harder to execute at scale than the arithmetic alone suggests. The expert treats a computed mispricing as a signal worth investigating, not an automatic trade, and asks "what would it cost me to actually execute this?" before booking the "profit."

6. Valuing an existing swap with today's rate instead of the contracted rate. The fixed leg of an outstanding swap pays whatever rate K was locked in when the swap was struck, not today's par rate. Today's curve enters only through the discount factors and through c_today (the par rate for the remaining tenor), which is compared against K, never substituted for it. The expert writes down K and c_today as two clearly separate numbers before computing anything, because confusing them silently zeroes out the entire point of marking an off-market swap.

7. Forgetting the floating leg is only "worth par" right at (or immediately after) a reset. The elegant PV(floating) = N×(1−DF_final) shortcut assumes the valuation date coincides with a reset, mid-period, between resets, the floating leg also carries an accrued-interest-like adjustment. The expert states the reset-date assumption out loud whenever using the shortcut, exactly the way a bond-pricing formula states whether it is clean or dirty.

8. Reading backwardation as automatically bullish (or contango as automatically bearish). The shape of a futures curve reflects the carry economics of the commodity (storage cost versus convenience yield) not a directional forecast on the spot price. A steeply backwardated oil curve says physical supply is tight right now; it says nothing certain about where the spot price itself is headed next quarter. The expert reads curve shape as a statement about carry (storage cost vs. convenience yield), and keeps that analysis separate from any view on the spot price's direction.

9. Trusting an AI-produced curve, forward rate, or swap valuation without rebuilding the checks yourself. Because a wrong discount factor and a right one look identical in a fluent explanation, this region rewards paranoia more than almost any other in the program. The expert never accepts a swap value, an FRA rate, or a cost-of-carry price from any source (a colleague, a vendor feed, or an AI assistant) without independently reconciling it against at least one of this module's built-in consistency checks: direct PV versus the shortcut formula, or the DF-weighted forward-rate average versus the quoted par rate.


Worked examples

Worked example 1: Nifty 50 index futures: cost of carry and daily mark-to-market (India, ₹)

A trader is evaluating the near-month Nifty 50 future. Nifty 50 spot (illustrative index level, not a live quote) = 24,800.00. The relevant INR money-market financing rate is 6.75% p.a., the index's trailing dividend yield is 1.20% p.a., and the contract has 30 days (T = 30/365) to expiry.

Solution. Step 1: fair value. F0 = S0 × e^{(r−q)T} = 24,800 × e^{(0.0675−0.0120)×(30/365)} = 24,800 × e^{0.004562} ≈ 24,913.39.

Step 2, check the quote. The exchange is quoting the future at 24,865.00. Since 24,865 < 24,913.39, the future is trading cheap by 48.39 points. The correct arbitrage is a reverse cash-and-carry: sell (or lend out) the underlying basket, invest the proceeds at r, and simultaneously buy the cheap future: capturing 48.39 index points at expiry, riskless (before frictions; see Common mistake #5). At one illustrative contract lot of 75 units (lot sizes are exchange-set and revised periodically by NSE under SEBI's market-lot rules, confirm the current size on nseindia.com before ever trading on this), that is 48.39 × 75 ≈ ₹3,629 per lot.

Step 3: mark it to market. Separately, a trader goes long 5 lots at an entry price of 24,850. Over the next three sessions the exchange settlement prices are 24,910, then 24,790, then 24,950 (exit). The daily point changes are +60, −120, +160, summing to +100, exactly matching the direct exit-minus-entry change (24,950 − 24,850 = 100), which must always hold: mark-to-market redistributes when the P&L lands, never how much, in total. At 75 units/lot × 5 lots = 375 units, the daily cash flows are +₹22,500, −₹45,000, +₹60,000, cumulating to +₹37,500, paid and received in the margin account each day, not in one lump sum at expiry, which is the entire operational difference from a forward on the same index.

Read it. Two separate skills, one arithmetic idea: cost-of-carry tells you what the price should be; daily settlement tells you when you get paid the difference between what it is and what you locked in.

Worked example 2: USD/INR forward and NDF: Covered Interest Rate Parity (India, ₹)

Meridian Components (synthetic), an import-dependent Mumbai manufacturer, wants a 90-day forward to buy USD. Spot USD/INR = 83.20. The relevant 90-day INR rate is 6.85% p.a., the 90-day USD rate is 5.30% p.a., and T = 90/365.

Solution. Step 1: price the forward. F0 = S0×(1+r_INR·T)/(1+r_USD·T) = 83.20 × (1+0.0685×0.24658)/(1+0.0530×0.24658) = 83.20 × 1.016891/1.013069 ≈ 83.5139. Forward points = 0.3139 (₹0.3139/USD); annualized, that is a 1.53% p.a. premium on the dollar (very close to, but not exactly, the simple rate differential of 1.55%, the small gap is the denominator effect of dividing by (1+r_USD·T) rather than 1). Because INR's money-market rate exceeds USD's, CIP forces the rupee to a forward discount, this is a riskless, covered condition, not a forecast of where spot is heading.

Step 2: value it a month later. Thirty days on, spot has moved to 83.60, the remaining 60-day INR rate is now 6.80% and the USD rate 5.25%. The new fair forward for the remaining 60 days is F' = 83.60×(1+0.0680×60/365)/(1+0.0525×60/365) ≈ 83.8112. On a $1,000,000 long-USD forward contracted at 83.5139, the replacement-cost value today is V = Notional×(F'−F0)×DF_INR(60d) = 1,000,000 × (83.8112−83.5139) × 0.988945 ≈ ₹2,94,018, a gain to the long position, because the rupee has weakened more than the original contract priced in.

Step 3: settle an NDF. Separately, a $2,000,000 NDF is contracted at the same 83.5139 rate; at maturity the official fixing is 84.10. Settlement (paid in USD to the long-USD party, since fixing exceeds the contracted rate) is 2,000,000×(84.10−83.5139)/84.10 ≈ $13,939, no rupees change hands at all; only this one dollar amount does.

Read it. Three different questions, one formula family: what should the forward cost today (CIP), what is an existing forward worth right now (replacement cost), and what does an NDF actually pay out (fixing-based cash settlement), and in every case the arithmetic, not a market opinion, supplies the answer.

Worked example 3: S&P 500 (E-mini) futures: cost of carry with a dividend yield (US, $)

S&P 500 spot (illustrative) = 6,150.00. The relevant 90-day US rate is 4.35% p.a., the index's dividend yield is 1.35% p.a., and T = 90/365.

Solution. Step 1. F0 = 6,150 × e^{(0.0435−0.0135)×0.24658} = 6,150 × e^{0.007397} ≈ 6,195.66. At the CME's E-mini contract multiplier of $50 per index point (a durable contract specification, confirm the current multiplier at cmegroup.com before trading), one contract's notional is 6,195.66 × 50 ≈ $309,783.

Step 2: invert it. The exchange is actually quoting 6,206.00. Rather than declaring it "rich" and stopping there, solve the same formula backward for the rate the market must be implicitly pricing in: r_implied = q + ln(F/S0)/T = 0.0135 + ln(6,206/6,150)/0.24658 ≈ 5.03%. That is roughly 68 basis points above the 4.35% rate you started with, useful information in itself, because it tells you what financing rate is embedded in the quote without your ever having observed it directly.

Read it. The same one-line formula runs both directions: forward, it prices a contract from a known rate; backward, it extracts an implied rate from an observed price, a technique you will meet again in Practice P6 (implied dividend yield) and in DV1.02's implied volatility.

Worked example 4: Gold and crude oil forwards: storage cost versus convenience yield (US, $)

Gold spot = $2,380.00/oz. Financing rate 4.35% p.a., storage-plus-insurance cost 0.50% p.a., one-year forward (T = 1).

Solution: gold. F = S0×e^{(r+u)T} = 2,380×e^{(0.0435+0.0050)×1} = 2,380×e^{0.0485} ≈ $2,498.28. A clean contango: gold is cheap and easy to store, so the future simply reflects the cost of financing and vaulting it for a year.

Crude oil, backwardation. Spot WTI = $72.00/bbl, financing rate still 4.35%, storage-plus-insurance 3.00% p.a., T = 0.5, and the observed 6-month futures price is $69.50: below spot.

Step 1. With zero convenience yield, pure carry would price the future at 72.00×e^{(0.0435+0.0300)×0.5} ≈ $74.70, well above spot, the same contango shape as gold.

Step 2. The market instead shows $69.50, so solve for the implied convenience yield that reconciles the two: y_c = r+u − ln(F/S0)/T = 0.0735 − ln(69.50/72.00)/0.5 = 0.0735 − (−0.0707) ≈ 14.42%. A convenience yield this large signals real physical tightness, refiners and merchants are paying up, in effect, for the assurance of having barrels in hand right now.

Read it. Contango (gold) says "storage is cheap, no one needs the physical barrel urgently"; backwardation (oil, here) says "the physical asset is worth more in hand today than any futures price suggests", the same formula, read in both directions, is how a desk infers physical-market tightness from a price alone.

Worked example 5: Pricing a Forward Rate Agreement from the discount curve (US, $)

The 3-month USD zero rate is 4.30% p.a., the 9-month zero rate is 4.55% p.a., an upward-sloping curve.

Solution. Step 1: bootstrap the forward. f = [(1+0.0455×0.75)/(1+0.0430×0.25) − 1] / 0.5 = [1.034125/1.01075 − 1]/0.5 = 0.023087/0.5 ≈ 4.6253%. This is the fair fixed rate for a "3×9" FRA, a 6-month rate starting in 3 months and ending in 9.

Step 2: settle it. At expiry, the realized 6-month reference rate turns out to be 5.00%: higher than the 4.6253% locked in. On a $10,000,000 notional, the settlement paid to the fixed-rate payer ("FRA buyer") is 10,000,000×(0.0500−0.046253)×0.5/(1+0.0500×0.5) = 10,000,000×0.0018735/1.025 ≈ $18,279.

Read it. The FRA buyer behaves like a borrower who locked in a rate and is compensated when the realized rate rises above it, the exact same protective logic a floating-rate borrower gets from any interest-rate hedge, built here from nothing but two zero rates and one settlement formula.

Worked example 6: Valuing a USD interest-rate swap as two bonds: par rate and mid-life MTM (US, $)

A five-year annual-pay USD swap curve (illustrative, upward-sloping): z1=4.20%, z2=4.35%, z3=4.45%, z4=4.52%, z5=4.58%.

Solution. Step 1: discount factors. DF_i = 1/(1+z_i)^i gives DF1=0.959693, DF2=0.918365, DF3=0.877556, DF4=0.837920, DF5=0.799387.

Step 2: par 5-year rate. c5 = (1−DF5)/ΣDF(1..5) = (1−0.799387)/4.392919 ≈ 4.5667%, the fixed rate that makes a brand-new 5-year swap worth zero today.

Step 3: value an existing swap. Northfield Industrial (synthetic) entered a receive-fixed swap two years ago at K = 4.00%, notional $20,000,000, now with 3 years remaining. Using today's curve for years 1–3: today's par 3-year rate is c3 = (1−DF3)/ΣDF(1..3) = (1−0.877556)/2.755613 ≈ 4.4435%. Direct computation: PV(fixed) = 20,000,000×0.0400×2.755613 ≈ $2,204,490; PV(floating) = 20,000,000×(1−0.877556) ≈ $2,448,887; value to the receive-fixed side = PV(fixed) − PV(floating) ≈ −$244,397. Shortcut check: 20,000,000×(0.0400−0.044435)×2.755613 ≈ −$244,397: matches to the dollar.

Read it. Rates rose since inception (par 3-year today, 4.44%, sits above the locked-in 4.00%), so receiving a below-market fixed rate is a loss, exactly what both computation paths agree on, which is the entire point of carrying two independent methods.

Worked example 7: Valuing an INR interest-rate swap: par MIBOR/OIS rate and mid-life MTM (India, ₹)

A five-year INR OIS curve (illustrative, mildly inverted): z1=6.60%, z2=6.50%, z3=6.45%, z4=6.42%, z5=6.40%.

Solution. Step 1: discount factors. DF1=0.938086, DF2=0.881659, DF3=0.829016, DF4=0.779663, DF5=0.733317.

Step 2: par 5-year rate. c5 = (1−0.733317)/4.161742 ≈ 6.4080%.

Step 3: value an existing swap. Kaveri Capital (synthetic), an NBFC treasury, entered a pay-fixed swap one year ago at K = 6.80%, notional ₹15,00,00,000 (₹15 crore), now with 2 years remaining. Today's par 2-year rate is c2 = (1−0.881659)/1.819746 ≈ 6.5031%. Direct computation: PV(fixed) = 15,00,00,000×0.0680×1.819746 ≈ ₹1,85,61,405; PV(floating) = 15,00,00,000×(1−0.881659) ≈ ₹1,77,51,108; value to the pay-fixed side = PV(floating) − PV(fixed) ≈ −₹8,10,297 (about −₹8.10 lakh). Shortcut check: 15,00,00,000×(c2−K)×ΣDF(1..2) = 15,00,00,000×(0.065031−0.0680)×1.819746 ≈ −₹8,10,297: matches exactly.

Read it. Kaveri is paying 6.80% fixed while the market's current 2-year par rate has fallen to 6.50%, paying an above-market fixed rate is a loss to the pay-fixed side, and both the direct and shortcut computations land on the identical figure, the swap-valuation version of "the curve must reprice consistently" (R3).


Practice set

Work every problem fully, write your answer before reading the solution. All rates are annualized; all entities and price levels are illustrative/synthetic unless a named source is given. India problems use INR digit grouping; US problems use USD. Currency and equity-index cost-of-carry problems use continuous compounding; FX and FRA problems use simple interest with an Act/365 day-count fraction; swap problems use annual compounding matching the payment frequency, do not mix conventions across problems.

P1 (guided, India, ₹). Bank Nifty futures, cost of carry. Bank Nifty spot = 51,200.00, financing rate = 6.70% p.a., dividend yield = 0.90% p.a., T = 45/365. Compute the fair futures price.

Solution. F0 = 51,200×e^{(0.0670−0.0090)×(45/365)} = 51,200×e^{0.007151} ≈ 51,567.43.

P2 (guided, India, ₹). Cash-and-carry arbitrage on a rich quote. Using Worked Example 1's Nifty setup (fair value ≈ 24,913.39), the exchange instead quotes 24,990.00. Identify the mispricing, the correct arbitrage direction, and the profit per 75-unit lot.

Solution. 24,990 − 24,913.39 = +76.61, so the future is rich. The correct trade is a cash-and-carry: sell the future, buy the index basket financed by borrowing at r. Profit per lot = 76.61 × 75 ≈ ₹5,746.

P3 (guided, India, ₹). USD/INR 6-month forward. Spot = 83.20, r_INR (180-day) = 6.90% p.a., r_USD (180-day) = 5.35% p.a., T = 180/365. Compute the forward and the annualized premium.

Solution. F = 83.20×(1+0.0690×0.49315)/(1+0.0535×0.49315) ≈ 83.8196. Forward points = 0.6196; annualized premium = (0.6196/83.20)×(365/180)×100 ≈ 1.51%.

P4 (guided, India, ₹). NDF settlement, the other direction. Notional = $5,000,000, contracted NDF rate = 84.00, fixing at maturity = 83.40 (the dollar weakened past the contracted rate). Who pays whom, and how much?

Solution. Settlement = 5,000,000×(83.40−84.00)/83.40 ≈ −$35,971. The negative sign means the long-USD party pays approximately $35,971 to the counterparty, the dollar depreciated below the locked-in rate, so buying it forward at 84.00 was the losing side of the trade.

P5 (independent, US, $). S&P 500 futures, 6-month. Spot = 6,150.00, r = 4.40% p.a., q = 1.30% p.a., T = 180/365. Compute the fair futures price.

Solution. F = 6,150×e^{(0.0440−0.0130)×0.49315} ≈ 6,244.74.

P6 (independent, US, $). Implied dividend yield. Spot = 6,150.00, r = 4.35% p.a., T = 90/365, and the market quotes the future at 6,190.00. Back out the dividend yield the market is implicitly pricing in.

Solution. q_implied = r − ln(F/S0)/T = 0.0435 − ln(6,190/6,150)/0.24658 ≈ 1.72%: noticeably below the 1.35% assumed elsewhere in this module, illustrating how a quote can imply a different carry assumption than the one you started with.

P7 (independent, US, $). Gold forward, 6-month, different storage cost. Spot = $2,400.00/oz, r = 4.30% p.a., storage cost = 0.60% p.a., T = 0.5. Compute the fair forward price.

Solution. F = 2,400×e^{(0.0430+0.0060)×0.5} ≈ $2,459.53.

P8 (independent, US, $). Crude oil, implied convenience yield, 3-month. Spot = $75.00/bbl, r = 4.30% p.a., storage cost = 2.80% p.a., T = 0.25, observed future = $73.80 (backwardation). Solve for the implied convenience yield.

Solution. y_c = r+u − ln(F/S0)/T = 0.0710 − ln(73.80/75.00)/0.25 ≈ 13.55%.

P9 (independent, US, $). FRA, "1×4." The 1-month zero rate is 4.25% p.a., the 4-month zero rate is 4.40% p.a. Compute the fair 3-month forward rate starting in one month.

Solution. T1 = 1/12, T2 = 4/12, τ = 0.25. f = [(1+0.0440×4/12)/(1+0.0425×1/12) − 1]/0.25 ≈ 4.43%.

P10 (independent, India, ₹). FRA settlement, rates fell. Notional = ₹20,00,00,000 (₹20 crore), FRA rate = 6.50%, realized reference rate = 6.10%, τ = 0.5. Who pays whom?

Solution. Settlement = 20,00,00,000×(0.0610−0.0650)×0.5/(1+0.0610×0.5) ≈ −₹3,88,161. The negative sign means the fixed-rate payer pays approximately ₹3,88,161, realized rates fell below the FRA rate, so the party who locked in paying fixed comes out behind.

P11 (exam, 10 min, US, $). Par rate at a different tenor. Using Worked Example 6's USD curve (DF1=0.959693, DF2=0.918365, DF3=0.877556, DF4=0.837920), compute the par 4-year swap rate and compare it to the par 3-year (4.4435%) and par 5-year (4.5667%) rates already computed.

Solution. c4 = (1−DF4)/ΣDF(1..4) = (1−0.837920)/3.593534 ≈ 4.5103%. The par rate rises smoothly with tenor (4.44% → 4.51% → 4.57%), tracing out the term structure of swap rates implied by the same underlying zero curve.

P12 (exam, 10 min, India, ₹). INR swap MTM, a different scenario. Kaveri Capital's sister book entered a receive-fixed swap at K = 6.20%, notional ₹10,00,00,000 (₹10 crore), with 3 years remaining. Using Worked Example 7's INR curve (DF1=0.938086, DF2=0.881659, DF3=0.829016), value the position.

Solution. Today's par 3-year rate: c3 = (1−0.829016)/2.648761 ≈ 6.4552%. PV(fixed) = 10,00,00,000×0.0620×2.648761 ≈ ₹1,64,22,323; PV(floating) = 10,00,00,000×(1−0.829016) ≈ ₹1,70,98,383. Value to receive-fixed = PV(fixed)−PV(floating) ≈ −₹6,76,060 (about −₹6.76 lakh), a loss, because the current 3-year par rate (6.4552%) sits above the locked-in 6.20%.

P13 (exam, 12 min, India, ₹). Futures margin call. A trader goes long 10 lots (75 units/lot = 750 units) of Nifty futures at 24,900.00. Initial margin = ₹1,80,000/lot (₹18,00,000 total); maintenance margin = ₹1,44,000/lot (₹14,40,000 total, 80% of initial). Settlement prices: Day 1 = 24,500.00, Day 2 = 24,200.00, Day 3 = 24,350.00. Track the margin account and identify any margin call.

Solution. Day 1: change = −400, cash = −400×750 = −₹3,00,000, balance = 18,00,000−3,00,000 = ₹15,00,000 (above the ₹14,40,000 maintenance floor, no call). Day 2: change = −300, cash = −₹2,25,000, balance would fall to 15,00,000−2,25,000 = ₹12,75,000, which is below the ₹14,40,000 maintenance level, a margin call for a top-up of ₹18,00,000−12,75,000 = ₹5,25,000, restoring the account to the full ₹18,00,000 initial level (not merely back to ₹14,40,000). Day 3: change = +150, cash = +₹1,12,500, balance = 18,00,000+1,12,500 = ₹19,12,500 (no call).

P14 (exam, 8 min, US, $). Basis convergence to expiry. Using Worked Example 3's S&P 500 inputs (S0=6,150, r=4.35%, q=1.35%), compute the fair futures price and the basis (F−S) at T = 90 days, 30 days, 1 day, and at expiry.

Solution. T=90d: F≈6,195.66, basis≈45.66. T=30d: F≈6,165.18, basis≈15.18. T=1d: F≈6,150.51, basis≈0.51. At expiry (T=0): F=S=6,150.00, basis=0. The basis shrinks smoothly to zero as time to expiry runs out, a future and its underlying are never required to trade at the same price except at the single instant they must.

P15 (exam, 12 min, US, $). Swap rate as a weighted average of forward rates. Using Worked Example 6's USD curve, compute the sequence of one-year forward rates implied by the curve (the "0y1y," "1y1y," "2y1y," "3y1y," and "4y1y" rates), then compute both the simple average and the discount-factor-weighted average of that sequence, and compare each to the par 5-year swap rate (4.5667%).

Solution. The one-year forward rates are: 0y1y = z1 = 4.2000% (the spot 1-year rate itself); 1y1y = (1.0435)²/1.0420 − 1 ≈ 4.5002%; 2y1y = (1.0445)³/(1.0435)² − 1 ≈ 4.6503%; 3y1y = (1.0452)⁴/(1.0445)³ − 1 ≈ 4.7303%; 4y1y = (1.0458)⁵/(1.0452)⁴ − 1 ≈ 4.8203%. Simple average = (4.2000+4.5002+4.6503+4.7303+4.8203)/5 ≈ 4.5802%, close to, but not exactly, the par rate. The discount-factor-weighted average, Σ(DF_i×f_i)/ΣDF_i, comes to 4.5667%, an exact match to the par 5-year swap rate computed directly in Worked Example 6. The swap rate is precisely that specific weighted average (nearer-term rates carry slightly more weight because their discount factors are larger), never a naive simple average of the forward strip.

P16 (independent, India, ₹). Single-stock forward, discrete dividends. Suryakiran Textiles (synthetic) trades at ₹3,200.00. It will pay a ₹18.00 dividend in 60 days and a ₹20.00 dividend in 150 days; a 180-day forward is being priced with a financing rate of 6.75% p.a. (continuously compounded). Compute the fair forward price, and compare it to what a careless analyst would get by ignoring the dividends entirely.

Solution. PV(dividends) = 18×e^{−0.0675×(60/365)} + 20×e^{−0.0675×(150/365)} ≈ 17.80 + 19.45 = ₹37.25. F = (3,200.00−37.25)×e^{0.0675×(180/365)} ≈ ₹3,269.80. Ignoring the dividends entirely (treating the stock as if it paid none) would instead give 3,200×e^{0.0675×(180/365)} ≈ ₹3,308.31, overstating the fair forward price by roughly ₹38.52, almost exactly the future value of the two dividends the naive calculation forgot to remove.


Applied mini-project

Price and value one real contract, end to end, in Python, then reconcile it against the market.

This project produces a durable, one-page artifact (a pricing-and-valuation memo) and it deliberately mirrors this module's R3 discipline: nothing goes in the memo that you have not recomputed yourself in code. Pick one real, currently-listed contract from either market: an NSE Nifty 50 or Bank Nifty index future, or a CME E-mini S&P 500 or 3-month SOFR future. Use only named, live sources for your inputs: the exchange's own contract page (nseindia.com or cmegroup.com) for the spot/index level and the contract's exact expiry and multiplier/lot size; a central-bank or clearing-corporation source for the financing rate (RBI's DBIE or CCIL for India; FRED or the CME/NY Fed SOFR data for the US); and a market data provider or the index provider's own factsheet for the dividend yield. Every non-live number must be labeled illustrative.

Produce, in order:

  1. The fair value. State your four inputs (spot, rate, yield/carry, time-to-expiry) with their exact sources and pull dates, and compute the cost-of-carry fair value in a short Python script you write yourself (no spreadsheet-only work: show the code).
  2. The quote check. Record the contract's actual last-traded or settlement price at the same moment, compute the basis (quote − fair value), and state whether the contract is rich, cheap, or fair within a reasonable band (name the band and why you chose it, bid-ask spread is a sensible starting point).
  3. The arbitrage direction. If the basis is outside your band, state the exact riskless trade (which leg you buy, which you sell) that would capture it, and (honestly) name the two or three frictions (transaction costs, financing spread, securities-lending constraints, margin funding) that would eat into the theoretical profit in practice.
  4. A second, independent method. For an index future, additionally solve the implied financing rate (or implied dividend yield) from the same quote, and state whether it looks reasonable against your independently-sourced rate, a second, cheap consistency check that costs you three lines of code.
  5. The one thing you would verify before trusting this for real money. Name the single input most likely to be stale, wrong, or mismatched in scale/day-count, and how you would re-check it.

Deliverable: a one-page memo with the five items above, your Python snippet included verbatim, and a closing sentence: "[Contract] is priced at [X], my computed fair value is [Y], the basis is [Z], and it is [rich/cheap/fair] because [one-sentence reason]."

Scoring rubric (0/1/2 per criterion; 10 possible; ≥8 to pass, ≥85% overall gate applies to the mastery check, not this rubric):

Criterion012
Sources named and datedInputs unsourced or inventedSome inputs sourced, others assumed without flaggingEvery input traced to a named source (or explicitly labeled illustrative) with a pull date
Fair value computed in codeMissing or hand-arithmetic onlyCode present but not shown / not re-run by the learnerWorking Python snippet included, correctly implementing the right convention for the instrument chosen
Quote check & directionBasis not computed, or arbitrage direction reversedBasis computed, direction stated but reasoning thinBasis computed correctly, direction derived from its sign, frictions honestly named
Second consistency checkOmittedAttempted but not reconciled against the first methodImplied-rate (or equivalent) check run and compared sensibly to the sourced input
The one verification namedVague or generic ("double-check everything")Names a real risk but not why it matters mostNames the single most fragile input specifically and states exactly how to re-verify it

Reading & resources

Everything below is an anchor to learn the mechanism from and verify against, never a substitute for tracing a live number to its own primary source (Guardrail 1–5, AI0.01).

The core theory (durable):

  • John C. Hull, Options, Futures, and Other Derivatives, the standard reference for the cost-of-carry model, FRA pricing, and swap valuation as a bond/FRA-portfolio equivalence; every formula in this module traces to this book's treatment. [Paid] [Intermediate–Advanced]
  • The CFA Program curriculum's Derivatives readings (Levels I–II), the same cost-of-carry, FRA, and swap-valuation content, presented at exam-calibrated depth with worked problems. [Paid, via CFA Institute enrollment] [Intermediate]
  • ISDA (International Swaps and Derivatives Association), publishes the Master Agreement and definitions that document real-world OTC forwards, FRAs, and swaps; skim the FRA and Interest Rate Definitions to see the day-count and settlement conventions real desks actually use. [Free, isda.org] [Advanced]

Live data anchors (India):

  • NSE (nseindia.com). Nifty 50 / Bank Nifty index futures contract specifications, lot sizes, and live quotes. [Free] [Beginner]
  • RBI's Database on the Indian Economy (DBIE) and CCIL (ccilindia.com), money-market and G-sec yields, and the INR OIS curve. [Free] [Beginner–Advanced]
  • FBIL (Financial Benchmarks India), the USD/INR reference rate and India's post-LIBOR-transition benchmark methodology (the historical MIFOR benchmark was itself LIBOR-linked and has been redefined following LIBOR's cessation, confirm the current methodology document before relying on any specific benchmark name). [Free] [Advanced] (perishable)

Live data anchors (US):

  • CME Group (cmegroup.com). E-mini S&P 500 and SOFR futures contract specifications, multipliers, and live quotes. [Free] [Beginner]
  • Federal Reserve Bank of New York: the official daily publisher of SOFR, which replaced USD LIBOR as the primary US reference rate following the ARRC-led transition (substantially complete by mid-2023). [Free] [Beginner–Advanced]
  • FRED (Federal Reserve Economic Data). Treasury and SOFR-related series for a quick, free cross-check of US rate levels. [Free] [Beginner]

Do this, not just read: open one live contract page (NSE's Nifty future or CME's E-mini S&P 500 future) right now, note its quoted price, pull a same-day financing rate from a named source, and run this module's cost-of-carry formula on your own numbers. Ten minutes of reconciling a real quote against your own computed fair value will teach you more than an hour of reading about the concept.


Teach it back & journal

Feynman prompt. Explain to a smart friend who has never heard the phrase "cost of carry" why a Nifty futures contract cannot simply be "however much people think the market will go up", using the idea that a costless futures contract and a financed spot purchase must deliver the identical payoff, so they must cost the same today. Then explain, in the same breath, why a swap someone signed two years ago is not simply "worth what it was worth then", using the idea that its fixed leg still pays the old rate K, but the curve used to discount it, and the rate it is compared against, are today's. If your friend can, unprompted, state that a rich futures quote should be sold (not bought) and explain why, you have installed the mechanism, which is the entire point of this module.

Journal prompt. Pick one real, currently-listed futures contract (Nifty, Bank Nifty, or an E-mini S&P 500/SOFR future) and, for three consecutive trading days, pull its actual settlement price and your own independently-sourced financing rate and dividend/carry assumption, and recompute the fair value each day in the same three-line Python snippet. Log: (1) how the basis (quote minus your fair value) moved across the three days, and whether it narrowed as expiry approached (Practice P14's lesson, live); (2) one day where your computed fair value and the quote disagreed by more than you expected, and your best diagnosis of why (a stale rate input? a dividend assumption that needs updating? a genuine, if small, market friction?); (3) one sentence on which single input in your calculation you trust least, and how you would go about tightening it. Then write a closing paragraph: given that a wrong curve or a wrong sign produces an answer that looks exactly as confident as a right one, what is the one habit from this module, recomputing the fair value independently before trusting a quote, or reconciling a swap's direct valuation against its shortcut formula, that you will make an unbreakable rule the next time anyone (a colleague, a vendor feed, or an AI assistant) hands you a derivatives price?


This module's flashcards and mastery quiz are wired into the app: see the node's Quiz and Reviews.

Advertisement

The gate

The module's flashcards and its quiz are in the app. The quiz is the gate: you need 85% to pass it, and the next module opens when you do.