Quant from Scratch by QuantWright

Introduction to Quant Finance · Lesson 23

Forwards, futures and options

Contracts whose value depends on another price: agree a price today and pay the difference later, or buy a right without the duty.

Know the basics? Read the lesson notes

A price agreed today

A farmer will harvest wheat in six months. A miller will need wheat then. Neither knows what wheat will sell for in six months, so today they sign a promise: on that day the miller buys the farmer's wheat at €200 a tonne, whatever wheat sells for then. Every price in this lesson is made up.

A promise to buy or sell later at a price agreed today is a forward contract, or a forward. It is the simplest derivative: a contract whose value depends on another price. The thing whose price it depends on, here wheat, is the underlying.

Delivery day comes, and wheat is selling at €240 a tonne. Who is glad they signed?

The farmer must sell at €200 wheat that anyone else would buy for €240, so the promise costs the farmer €40 a tonne.
The miller buys at €200 what costs €240 that day: €40 a tonne better than buying then. The farmer gets €40 a tonne less than the market pays.
They did trade at €200, but wheat was worth €240 that day. The miller is €40 a tonne better off than buying then, and the farmer €40 worse off.

Draw the miller's line

On delivery day the contract is worth, to the miller, the price then minus the agreed price: at €240, 240 − 200 = +€40 a tonne. What a contract pays at its end is its payoff. Drag the price at delivery from one end to the other; the dot draws the miller's payoff at every price.

The forward's payoff on delivery day (made-up prices)

Across: the price of wheat on delivery day. Up: the payoff, in euros a tonne. Dashed: the agreed price, €200.

Miller (agreed to buy)€0
Farmer (agreed to sell)€0

A straight line through €0 at the agreed price: each €1 on the price is €1 of payoff, gain above €200 and loss below.

The side that agreed to buy is called long; the side that agreed to sell is short. The farmer's payoff is the mirror image, 200 minus the price (the grey line), so the two always add up to zero: one side's gain is the other side's loss.

Why sign it

The farmer grows wheat, so a fall in its price hurts. Under the forward, the farmer gets €200 a tonne at any price: when wheat sells for less, the contract pays the farmer the difference; when it sells for more, the farmer pays it. Drag the price and compare the farmer's income with and without the contract.

The farmer's income per tonne on delivery day (made-up prices)

Grey: without the forward, the market price. Orange: with it, the market price plus the forward's payoff (200 minus the price).

Without the forward€200
Forward's payoff€0
With the forward€200

With the forward, the farmer's income is €200 at every price. The price risk is gone, and so is any gain from a rise.

Taking on a contract that cancels a price risk you already have is hedging. An importer that must pay a supplier in a foreign currency later can hedge the other way, with the long side of a forward on that currency: if the currency gets dearer, the forward pays the difference. Taking the long side with no wheat, only to gain if the price rises, is speculating.

Futures: a forward with a referee

A forward is a private promise, and one side may fail to pay. A futures contract is a forward with standard terms (here, 100 tonnes per contract) traded on an exchange, a market with set rules that stands between buyer and seller. Each side deposits money with the exchange, called margin: here €2,000. Every day the exchange sets a closing price (the day's last price) and moves that day's gain or loss from one side's margin to the other's. This is daily settlement.

You bought one contract at €200. Press Next day.

One futures contract, five days (made-up prices)

Top: the day's closing price. Bottom: your margin after that day's payment.

Day0 of 5
Closing price€200
Today's payment–
Your margin€2,000

The five payments add up to +€600, the same as (206 − 200) × 100: what a forward agreed at €200 pays when the price ends at €206. A futures contract pays the same total, day by day.

On day 3 the price was €191, 4.5% below €200, and €900 of your €2,000 margin, 45%, had gone to the other side.

Leverage: a small move, a big swing

Your €2,000 margin carries wheat worth 100 × €200 = €20,000, ten times as much. Controlling more than the money you put down is leverage: it makes every move in the price ten times bigger as a share of your money, and that holds for losses exactly as for gains.

Wheat falls 5%, from €200 to €190. What happens to your €2,000 margin?

5% of the margin would be €100, but you carry €20,000 of wheat, not €2,000. The fall is €10 a tonne × 100 tonnes = €1,000, half the margin.
Not yet: €10 a tonne × 100 tonnes = €1,000, half the margin. A 10% fall, €20 a tonne, would take all €2,000.
€10 a tonne × 100 tonnes = €1,000 out of €2,000: a 5% move in the price is a 50% move in your money, ten times as big.

Your €2,000 margin after a move in the price (made-up prices)

The bar is your margin; the move is from €200.

Price€190
Gain or loss−€1,000
Margin left€1,000

A 10% fall takes the whole €2,000; past that, the loss is more than you deposited. If the margin runs out, the exchange asks for more money or closes the position. A 5% rise adds €1,000 the same way.

Options: the right, not the duty

A forward binds both sides. An option gives its buyer a right without a duty. A call is the right to buy the underlying at a fixed price, the strike, on a set last day.

Take a call on one tonne of wheat with a strike of €200. On the last day, if wheat sells for more than €200, the buyer uses the right and gains the difference. At €200 or less, the buyer simply doesn't use it, and the payoff is 0. Drag the price on the last day.

A call's payoff on its last day, strike €200 (made-up prices)

Across: the price of wheat on the last day. Up: the payoff, in euros a tonne. Grey dashed: the forward's line, for comparison.

Use the right?No
Call's payoff€0
Forward's payoff€0

Above €200 the call pays like the forward: at €240, +€40. Below €200 it pays nothing instead of a loss. That bend at the strike is what makes an option different.

The premium, and the capped loss

A right without a duty isn't free. The buyer pays the seller up front, when they agree, a price called the premium: say €12 a tonne for this call. The option's last day is its expiry. The buyer's result is the payoff minus the premium.

At expiry wheat sells for €150. How many euros a tonne did the call's buyer lose, in all?

Hint: at €150, is the right to buy at €200 worth using? Then subtract the premium, and type the loss as a positive number.

Nobody pays €200 for wheat that sells for €150, so the call is not used: payoff 0. The result is 0 − 12 = −€12: the buyer lost €12, the premium. A forward at €200 would have lost 150 − 200 = −€50.
At €150 the call is not used, so its payoff is 0, not 150 − 200. The result is 0 − 12 = −€12: the buyer lost €12, the premium. It is the forward that would have lost €50.

The call buyer's result: payoff minus the €12 premium (made-up prices)

Orange: the call buyer. Grey dashed: the forward's buyer, who paid no premium.

However low wheat goes, the call's buyer loses at most the €12 premium. To come out ahead, wheat must end above 200 + 12 = €212. The seller of the call holds the other side: it keeps the €12, but owes the buyer every euro above €200, with no limit.

The put: the right to sell

A put is the right to sell the underlying at the strike on expiry. It pays when the price ends below the strike: at €170, the buyer of a put with a strike of €200 sells for €200 what sells for €170 elsewhere, a payoff of €30. Drag the price.

A put's payoff at expiry, strike €200 (made-up prices)

Across: the price of wheat at expiry. Up: the payoff, in euros a tonne.

Use the right?No
Put's payoff€0

The put's line is the call's turned around: it rises as the price falls, and is 0 at or above the strike.

How often does a bought call pay?

Take 10,000 made-up prices, each starting at €200. Every day a fair coin (heads and tails equally likely) moves each one: heads up €1, tails down €1, for 100 days. A running total of random steps like this is a random walk; each toss is new, so past moves say nothing about which way the next one goes. On every walk, a call with a strike of €200 expires on day 100.

Out of the 10,000 calls, how many expire worthless, with a payoff of 0?

Keep your guess in mind. The 10,000 walks end below.

Where 10,000 simulated prices ended on day 100

Each bar counts walks ending at that price. Orange: the call pays. Grey: it expires worthless.

Calls so far0
Expired worthless0
Average payoff–

With the coin fair, about as many walks ended above €200 as below: 4,546 above and 4,606 below. Another 848 ended at exactly €200, where the right to buy at €200 is worth nothing too. So in this simulation 5,454 of 10,000 calls, a little over half, expired worthless.

Averaged over all 10,000, the payoff was €3.97 a tonne, before any trading costs (fees, and the gap between buying and selling prices). Move the strike: a higher one leaves more calls worthless.

Stack a call and a put

Payoffs add up: holding two contracts pays the sum of their payoffs (payoffs only, before premiums). Take a bought call and a sold put, both with a strike of €200. Selling the put means taking the other side of it: you receive its premium and pay its payoff, so its line is the put's turned upside down. Add each one, then drag the price.

A bought call plus a sold put, both strike €200 (made-up prices)

Payoffs only, before premiums. Solid black: the call. Dotted black: the sold put. Wide orange: the two added up. Grey dashed: the forward's line, price minus €200. Lines that share a stretch are drawn a little apart.

Bought call–
Sold put–
Sum–
Forward€0

The sum is the forward's straight line: call payoff minus put payoff = price − 200 at every price.

Above €200 the call pays and the put pays nothing; below €200 the call pays nothing and the sold put costs the difference. This identity is put–call parity, here in its payoff form, on the last day.

Theory

Payoffs at the end, and put–call parity

A derivative's payoff is what it pays at its end, per unit of the underlying (per tonne of wheat, say), worked out from the price then. Three payoffs cover this lesson, and put–call parity links them: a call's payoff minus a put's, same strike, is the payoff of a forward agreed at the strike. The function max(a, b) means the larger of a and b, so max(S − K, 0) is S − K when that is above 0, and 0 otherwise.

forward, long: S − F  ·  short: F − S
call: max(S − K, 0)  ·  put: max(K − S, 0)
option buyer's result = payoff − premium
max(S − K, 0) − max(K − S, 0) = S − K
S
the price of the underlying on delivery day (forward) or at expiry (option)
F
the forward's agreed price
K
the option's strike: the price at which it lets its buyer buy (call) or sell (put)
premium
what the option's buyer paid the seller up front
max(a, b)
the larger of the two numbers
Worked example: this lesson's numbers

Strike €200, price €240: call max(40, 0) = 40, put max(−40, 0) = 0, call − put = 40 = 240 − 200. Price €170: call 0, put max(30, 0) = 30, call − put = −30 = 170 − 200.

The call bought for €12, price €150: 0 − 12 = −€12. The futures contract: (206 − 200) × 100 tonnes = €600.

Holds when
  • the options can be used only at expiry, as here (some can be used earlier);
  • both sides pay what they owe (futures margin is there for this);
  • results are before trading costs (fees, and the gap between buying and selling prices), and before interest on money paid up front;
  • amounts are per unit: multiply by the number of units.
Breaks when

You ask what a contract is worth before its end. Payoffs don't give that price: pricing needs no-arbitrage arguments (a fair price leaves nobody a sure profit from combining contracts) and models (rules for how prices might move), taught in a later course. Parity's full version, with prices today instead of payoffs, adds interest, and comes with them.

The situationA call and a put on the same made-up price, both with a strike of €50. At expiry the price is €58.

What is the call's payoff minus the put's payoff, in euros?

Hint: work out max(S − K, 0) and max(K − S, 0) with S = 58 and K = 50, then subtract.

Call: max(58 − 50, 0) = 8. Put: max(50 − 58, 0) = max(−8, 0) = 0. Call − put = 8 − 0 = 8, which is S − K = 58 − 50, as parity says.
Call: max(58 − 50, 0) = 8. Put: max(50 − 58, 0) = max(−8, 0) = 0, since a payoff is never below 0. Call − put = 8 = S − K, as parity says.

What this lesson does not do

Three things payoff lines don't show. Turn them over one at a time.

  1. A payoff line is not a price.

    What an option is worth today, before anyone knows the final price, is pricing. It needs the no-arbitrage arguments and price models of a later course.

Practice 1 of 3

The importer's hedge

The situationAn importer (made up) must pay a supplier 500,000 units of a foreign currency in three months. Today it takes the long side of a forward: it will buy the 500,000 units then at €1.10 each. On the day, the currency sells for €1.04, so the forward's payoff is (1.04 − 1.10) × 500,000 = −€30,000.

Was the hedge a mistake?

The forward lost €30,000, but the currency was €30,000 cheaper: 500,000 × €1.04 = €520,000 at the market, and the forward's loss of €30,000 on top makes €550,000 = 500,000 × €1.10, the amount fixed on day one. Fixing it was the hedge's job; it also gave up the cheaper price.
500,000 × €1.04 = €520,000 at the market, and the forward's loss of €30,000 on top makes €550,000 = 500,000 × €1.10, fixed on day one whatever the rate. That was its job; the cost was giving up the cheaper price.
The sign is the other way: the long side gains when the price ends above the agreed €1.10, and here it ended below. The payoff is −€30,000: €520,000 at the market plus that loss of €30,000 makes €550,000.
Practice 2 of 3

A put, all in

The situationSomeone buys a put on a made-up price, with a strike of €80, paying a premium of €5. At expiry the price is €68.

What is the put buyer's result, payoff minus premium, in euros per unit?

Hint: payoff = max(K − S, 0) with K = 80 and S = 68. Then subtract the premium.

Payoff: max(80 − 68, 0) = 12. Result: 12 − 5 = +€7 per unit.
The price ended below the strike, so the put is used: payoff max(80 − 68, 0) = 12. Minus the €5 premium: +€7 per unit. (12 alone is the payoff before the premium.)
Practice 3 of 3

A smaller margin

The situationA made-up futures contract covers 50 units at €400 each, so it carries €20,000. Its margin is €1,000. The price falls 3%, from €400 to €388.

What share of the margin is lost, in percent?

Hint: the loss is the fall per unit times the number of units. Then divide by the margin.

The fall is €12 a unit × 50 units = €600, and €600 ÷ €1,000 = 60%. €1,000 carries €20,000, twenty times as much, so a 3% fall is 3 × 20 = 60% of the margin.
400 − 388 = €12 a unit, × 50 units = €600 lost. €600 ÷ €1,000 = 60% of the margin: the margin carries twenty times its size, so 3% becomes 60%.
✓

Lesson done

A forward fixes a price today and pays the difference later; a futures contract does it day by day, on a small deposit (margin) that makes your money swing many times faster than the price, both ways (leverage). An option is a right without a duty; at expiry a bought call plus a sold put pays what a forward at the strike pays. Payoffs are not prices.

Key ideas

Derivative
a contract whose value depends on the price of something else, its underlying
Forward contract
a promise to buy or sell later at a price agreed today
Long / short
the side that agreed to buy / to sell
Payoff
what a contract pays at its end, worked out from the price then
Hedging / speculating
taking a contract that cancels a price risk you already have / taking the price risk on purpose
Futures contract
a forward with standard terms, traded on an exchange, settled every day
Margin
money each side of a futures contract deposits with the exchange; the daily gains and losses are paid from it
Leverage
controlling more than the money put down, so gains and losses on that money are a multiple of the price's move
Call / put
the right, not the duty, to buy / to sell the underlying at the strike at expiry
Strike / expiry / premium
an option's fixed price / its last day / what its buyer pays up front
Put–call parity (payoff form)
at expiry, a call's payoff minus a put's, same strike, equals the price minus the strike

forward: S − F  ·  call: max(S − K, 0)  ·  put: max(K − S, 0)

max(S − K, 0) − max(K − S, 0) = S − K

Lesson notes

A derivative is a contract whose value depends on another price. A forward fixes a price today for a trade later; a futures contract is a standard forward settled through an exchange every day, on a small deposit (margin) that makes your money swing many times faster than the price (leverage). An option is a right without a duty: a call pays max(S − K, 0) at expiry and a put max(K − S, 0), where S is the price then, K the fixed price (the strike) and max(a, b) the larger of the two numbers; a bought call plus a sold put pays what a forward at the strike pays. These are payoffs on the last day, before costs, not prices: pricing is a later course.

A price agreed today

A farmer will harvest wheat in six months, and a miller will need it then. Today they sign a forward contract: on that day the miller buys at €200 a tonne, whatever wheat sells for then (all prices made up). A forward is the simplest derivative, a contract whose value depends on another price; wheat is its underlying. If wheat sells for €240 on delivery day, the miller pays €200 for wheat worth €240, €40 a tonne better than buying then, and the farmer gets €40 less than the market pays.

The payoff line

What a contract pays at its end is its payoff. The side that agreed to buy, the long side, gets the price on the day minus the agreed price: a straight line through 0 at €200, rising €1 for each €1 on the price. The side that agreed to sell, the short side, gets 200 minus the price. The two always add up to zero.

Hedging and speculating

The farmer sells wheat at the market price and the forward pays 200 minus that price, so together the farmer gets €200 a tonne at any price: the price risk is gone, and so is the gain if wheat rises. Taking a contract that cancels a price risk you already have is hedging. An importer that must pay in a foreign currency later can hedge by taking the long side of a forward on that currency. Taking the long side with no wheat, only to gain if the price rises, is speculating.

Futures and daily settlement

A futures contract is a forward with standard terms (in the lesson, 100 tonnes) traded on an exchange that stands between the two sides. Each side deposits margin with the exchange, here €2,000, and every day the day's gain or loss moves from one side's margin to the other's: daily settlement. In the lesson's made-up example, you buy one contract at €200 and the next five closing prices (each day's last price) are €204, €197, €191, €199 and €206. The payments are +€400, −€700, −€600, +€800 and +€700, adding up to €600 = (206 − 200) × 100: what a forward at €200 pays at €206, paid day by day. On day 3, at €191, €900 of the margin, 45%, was gone.

Leverage

The €2,000 margin carries wheat worth 100 × €200 = €20,000, 10 times as much. Controlling more than the money put down is leverage, and it scales losses exactly as it scales gains: a 5% fall, €10 a tonne, costs €1,000, which is 50% of the margin; a 10% fall takes all of it, and past that the loss is more than was deposited. If the margin runs out, the exchange asks for more money or closes the position.

Calls, puts and the premium

An option gives its buyer a right without a duty. A call is the right to buy the underlying at a fixed price, the strike, on its last day, the expiry; a put is the right to sell at the strike. With a strike of €200, a call pays €40 at €240 and nothing at €200 or below, because its buyer simply doesn't use it; a put pays €30 at €170 and nothing at €200 or above. The buyer pays the seller a premium up front, and the buyer's result is the payoff minus the premium. A call bought for €12 loses €12 at €150, where a forward's buyer would lose €50; the call's buyer comes out ahead only above 200 + 12 = €212. The buyer's loss is capped at the premium; the seller of a call keeps the premium but owes every euro above the strike, with no cap.

How often a bought call pays, in one simulation

The lesson ran 10,000 made-up prices from €200, each moved €1 up or down by a fair coin every day for 100 days (a random walk: a running total of random steps). In this simulation, 4,546 ended above €200, 4,606 below and 848 at exactly €200, so a call with a strike of €200 expired worthless on 5,454 of the 10,000, a little over half. Its average payoff over all 10,000 was €3.97, before trading costs (fees, and the gap between buying and selling prices); it is not what the €12 premium should be, which needs pricing, in a later course. The counts belong to fair-coin walks: real prices drift, jump and swing differently, and none of this says what the call should cost.

Stacking: put–call parity

Payoffs add up (payoffs only, before premiums). A bought call plus a sold put (the other side of a put: you receive the premium and pay its payoff), both with a strike of €200, pays price − 200 at every price: above €200 the call pays and the put pays nothing; below, the call pays nothing and the sold put costs the difference. That is the forward's line. Put–call parity, in its payoff form: at expiry, call payoff − put payoff = S − K.

Formula: payoffs at the end, and put–call parity

Payoffs are per unit of the underlying (per tonne of wheat, say), on the last day; max(a, b) is the larger of the two numbers. In words, parity says a call's payoff minus a put's, same strike, is the payoff of a forward agreed at the strike.

forward, long: S − F  ·  short: F − S
call: max(S − K, 0)  ·  put: max(K − S, 0)
option buyer's result = payoff − premium
max(S − K, 0) − max(K − S, 0) = S − K
S
the price of the underlying on delivery day (forward) or at expiry (option)
F
the forward's agreed price
K
the option's strike: the price at which it lets its buyer buy (call) or sell (put)
premium
what the option's buyer paid the seller up front
max(a, b)
the larger of the two numbers
Worked example

Strike €200, price €240: call max(40, 0) = 40, put max(−40, 0) = 0, call − put = 40 = 240 − 200. Price €170: call 0, put max(30, 0) = 30, call − put = −30 = 170 − 200.

The call bought for €12, price €150: 0 − 12 = −€12. The futures contract: (206 − 200) × 100 tonnes = €600.

Holds whenBreaks when

You ask what a contract is worth before its end. Payoffs don't give that price: pricing needs no-arbitrage arguments (a fair price leaves nobody a sure profit from combining contracts) and models (rules for how prices might move), taught in a later course. Parity's full version, with prices today, adds interest and comes with them.

One more worked example

New made-up numbers

A call and a put on a made-up price, both with a strike of €30. The call cost €2 and the put €1.50. At expiry the price is €26.

Call payoff: max(26 − 30, 0) = 0, so the call's buyer's result is 0 − 2 = −€2, the whole premium.

Put payoff: max(30 − 26, 0) = 4, so the put's buyer's result is 4 − 1.50 = +€2.50.

Parity: call − put = 0 − 4 = −4 = 26 − 30 = S − K.

Common mistakes

Check yourself

  1. A forward's agreed price is €75 and the price on delivery day is €69. What is the long side's payoff, and the short side's?
    Answer

    Long: 69 − 75 = −€6. Short: 75 − 69 = +€6. They add up to zero.

  2. A call has a strike of €120 and cost a premium of €4. At expiry the price is €131. What is its buyer's result?
    Answer

    Payoff max(131 − 120, 0) = 11; result 11 − 4 = +€7.

  3. A futures position carries €30,000 on a margin of €3,000. The price falls 4%. What share of the margin is lost?
    Answer

    4% of €30,000 is €1,200, and €1,200 ÷ €3,000 = 40%: the margin carries ten times its size, so 4% becomes 40%.

  4. A call and a put, both with a strike of €60. At expiry the price is €52. What is the call's payoff minus the put's, and why?
    Answer

    Call 0, put max(60 − 52, 0) = 8, so call − put = −8 = 52 − 60 = S − K: put–call parity in its payoff form.

  5. In the lesson's simulation, why did a little over half of the calls with a strike of €200 expire worthless, when the coin was fair?
    Answer

    About as many walks ended above €200 (4,546) as below (4,606), and another 848 ended at exactly €200, where the call also pays nothing: 4,606 + 848 = 5,454 of 10,000.

Try it yourself

Run the simulation. The 10,000 walks and every number in this lesson come from one Python script with a fixed random seed (below). Change the strike, the number of days or the step and see which counts move.

Work it out by hand. Draw two axes: the final price across, the payoff up. For a strike K, a call's line is flat at 0 up to K, then rises one for one; a put's is the mirror image. Add two lines point by point to stack contracts: a bought call and a sold put give a straight line through 0 at K.

The code behind every number (Python, seed 2026111123)
Loading…
For the precise: the simulation, strike by strikeSeed 2026111123; 10,000 walks × 100 fair-coin steps of €1 from €200, drawn as one block of uniform numbers (a day is up when its number is below 0.5); only the price on day 100 is used. Final prices ranged from €156 to €238, averaging €199.99; the typical distance from €200 is €1 × √100 = €10. Exact binomial values for a strike of €200 (the price on day 100 is 200 + 2U − 100 with U heads out of 100): worthless 53.98% (the simulation: 54.54%), average payoff €3.98 (the simulation: €3.97), and an end at exactly €200 7.96% of the time. Calls worthless out of 10,000, by strike: €180 293, €190 1,816, €200 5,454, €210 8,630, €220 9,801. The average of call payoff minus put payoff came out at the average final price minus the strike at every strike (−€0.01 at €200), as parity says it must, walk by walk.

Honest notes

Where this comes from