Discount Factors and Zero-Coupon Prices: One Object
A discount factor is what one rupee costs today when it is certain to arrive at a stated future date. A zero-coupon price is the price of a contract paying exactly that. The two names are one object, and the number is the primitive: a rate is something computed from it, and computing it needs a convention that must be stated alongside.
Turn a quote into a price, and that price into every rate it can be called
Work one quote all the way through, and watch it close
The fields take whatever figures were actually handed over. The quote and the two date figures build the price, the price builds the rate under every convention at once, and the amount turns the price into money. The reconciliation strip runs the round trip on the entered figures rather than on the worked instance, so a quote that does not close shows itself as soon as the typing stops. The fields are prefilled with the one year instance of the standard process. Nothing is saved anywhere, and a reload brings the instance back.
Illustration. A quote of 95.12294245 per 100 is a price of 0.951229 for one rupee due in 1.000000 years, which reads as 5.000000 per cent continuously compounded and 5.127110 per cent compounded once a year, and it turns Rs 1,000/- due then into Rs 951.23/- today.
Nothing has been changed yet. These are the figures of the worked instance, and the working above reproduces them exactly.
Two sources, two rates, the same payment date. Slide the first one and watch two things separately: the gap between the quotes, and the gap between the prices those quotes stand for. The two gaps are not the same, and at one setting the first is 12.71 basis points wide while the second is nothing at all.
Educational illustration. Whatever rate or convention is typed in is an assumption of the reader's own, and the working cannot test whether the quote it was handed is right. Prices and factors are printed to six decimal places, rates to six decimal places of a per cent, and money to whole paise. Because the difference between the two prices in the failure control lives in the ninth decimal, those two are printed to nine. Every reading is computed from the unrounded fields and rounded once at the point it is printed. Nothing is written to this browser. The figures live only in the open tab and die with it.
On its defaults the instrument puts the whole worked instance on one screen. A quote of 95.12294245 per 100 of face is a discount factor of 0.951229. The payment date is 365 days away and the quote counts a 365 day year, so the maturity is 1.000000 years. One price reads as 5.000000 per cent continuously compounded, 5.000342 per cent compounded daily, 5.010431 per cent twelve times a year, 5.031381 per cent four times a year, 5.063024 per cent twice a year and 5.127110 per cent once a year, a spread of 12.71 basis points across the six. An amount of Rs 1,000/- falling due on that date is worth Rs 951.23/- today, and the Rs 48.77/- between the two is what the wait costs. Reading the rate back out and rebuilding the price from it lands on 0.951229 again.
The object has already carried everything earlier in this sequence: the argument that no position may cost nothing and pay something used a number to move a rupee from one date to another, and that number is what gets opened up here. The instrument does the arithmetic in both directions. Why the number behaves as it does, the one place it goes wrong, and a routine for checking a figure handed over by somebody else are all set out below.
One warning before the numbers go further. The rate used throughout is 5 per cent a year, continuously compounded. The 5 per cent is the invented parameter of the standard processThe single invented construction this whole sequence works on, so that every part of it computes against the same figures instead of a new set each time., the single traded quantity this sequence works on, and it describes no market anywhere. The rate was chosen because it makes the arithmetic land on figures that can be checked by hand.
What is a discount factor, and what is a zero-coupon price?
Take the question apart. A discount factor is a price. Not a percentage, not a multiplier, not an adjustment: a price, quoted in rupees, for a thing that could in principle be bought. The thing is one rupee, delivered at a named date, with no doubt about whether it arrives. At the rate used throughout this guide, the price of one rupee delivered a year from now is 0.951229 of a rupee. The price is 95.1229 paise handed over today for a rupee that comes back in a year.
Now the second name. A zero-coupon price is the price of a contract that pays one unit at one date and nothing at all before it. Set that description beside the description of the discount factor: they describe the same thing. One is phrased as an operation performed on a future amount, the other as an instrument that could be held, and underneath the phrasing there is one number.
The two names are not two concepts that happen to agree; they are one quantity that acquired two vocabularies because two groups of people arrived at it from different directions. Somebody working out what a future amount is worth today reaches for it as a factor and multiplies. Somebody quoting an instrument reaches for it as a price and pays. Neither is more correct. When a text or a workbook switches between the words without warning, nothing has changed underneath, and a reader who knows they are one object stops looking for the difference.
Where does the number itself come from? The standard process supplies a rate, so start there. Growing a rupee forward for a year at 5 per cent a year, compounded continuously, multiplies it by the exponential of 0.05. Bringing a rupee back over the same year divides by that same amount. Dividing by the exponential of 0.05 is multiplying by the exponential of minus 0.05, and the whole construction is nothing more than that.
| \(D(0,T)\) | the discount factor seen from today for a rupee delivered at time \(T\), in rupees |
| \(r\) | the risk-free rate of the standard process, continuously compounded, as a decimal, invented and fixed at 0.05 |
| \(T\) | the maturity, measured in years from today, as a decimal |
| \(e\) | the base of the natural logarithm, roughly 2.718282 |
There is a second route to the same number, and it matters because it is the route taken earlier in this sequence. The price of any payoff is the expectation, under the risk-neutral measureThe set of probabilities under which discounted prices neither drift up nor drift down on average. It is a computing device rather than anybody's forecast, and it is built up separately. Q, of that payoff discounted back. Hand that machinery the simplest payoff there is, one rupee whatever happens, and the expectation has nothing left to average.
| \(Z(0,T)\) | the price today of the contract paying one rupee at time \(T\) and nothing before it |
| \(\mathbb{E}^{\mathbb{Q}}\) | expectation taken under the risk-neutral measure Q, the measure under which discounted prices are martingales |
| \(\mathbb{Q}\) | the risk-neutral measure, as against P the physical measure |
| \(1\) | the payoff, one rupee at time \(T\) in every state of the world |
| \(r,\;T\) | as above, the invented rate of 0.05 and the maturity in years |
The second route is worth holding on to: a discount factor is not a bookkeeping device. The discount factor is a price produced by the same rule that prices everything else, applied to the least interesting payoff available. Nothing was assumed about it separately. The factor falls out of the machinery already built.
Why is the price the primitive and the rate the derived thing?
The everyday case comes first, and it is worth a moment. A sack of grain has a weight. On one scale the dial says 40. On another scale, calibrated in different units, the dial says 88. The sack did not change between the two readings. The weight is the thing; the dial reading is a description of the thing on a chosen scale, and there is more than one scale. A report that the sack reads 88 without naming the scale does not permit the weight to be recovered.
The discount factor is the weight. The rate is the dial reading. The factor is the primitiveThe quantity that is directly meaningful on its own, from which other quantities are computed rather than the reverse. here because it is a price, and a price is meaningful without anybody agreeing to anything first. Hand over 0.951229 of a rupee, receive a rupee in a year: that transaction is fully described, and no convention was needed to describe it. The rate, by contrast, is not meaningful until a convention has been chosen. A rate answers one thing: what constant speed of growth would produce this price? More than one answer fits, and the convention decides which one is meant.
Why bother with rates at all, then? Because prices at different maturities are not comparable by eye. A factor of 0.951229 at one year and 0.606531 at ten years look like two unrelated numbers, and the second looks alarming next to the first until it emerges that they carry exactly the same rate. Rates put maturities on a common scale. A ten year price can then be seen as expensive or cheap relative to a one year price. The common scale is a real service, and it is the only service a rate performs. A rate never becomes the underlying object.
Which is the directly meaningful quantity here: the factor or the rate?
How does a factor turn into a rate, and the rate back into a factor?
Both directions are one line of arithmetic. From the rate to the factor, the operation is already in hand: exponentiate minus the rate times the maturity. The other way, a logarithm undoes the exponential and a division undoes the multiplication.
| \(r\) | the continuously compounded rate implied by the factor, as a decimal a year |
| \(\ln\) | the natural logarithm, the inverse of the exponential |
| \(D(0,T)\) | the discount factor for maturity \(T\), a number strictly between zero and one whenever the implied rate is positive |
| \(T\) | the maturity in years, and the reason the minus sign is there is that the logarithm of a number below one is negative |
On the worked number: the natural logarithm of 0.951229 is minus 0.050000 to six decimal places. Divided by one year with the sign flipped, that is 0.050000, or 5 per cent a year. And back the other way: minus 0.05 times one, exponentiated, is 0.951229 again. Six decimals out and six decimals back: the two directions are not two procedures but one procedure read in each direction.
Convert 0.951229 to a continuously compounded rate over one year.
Which convention is being used, and why does that need saying every time?
Everything above assumed one reading of the question: what rate, applied without interruption, produced this price? Continuous compoundingThe convention where growth over a period is the exponential of the rate times the length of the period. asks for the constant rate of growth applied without interruption. Continuous compounding is the convention this whole subject uses. Making the calculus behave is what earns it that place, and it is why the exponential appeared earlier without comment.
But there are other readings, and they are all perfectly ordinary. Annual compoundingThe convention where growth over a period is one plus the rate, raised to the number of years. asks a different question: what rate, applied once at the end of each year to whatever is standing, would produce this price? Semi-annual compounding asks the same question with the rate applied twice a year at half its size. Each is a different way of describing the same growth, and each therefore returns a different number.
| \(y_1\) | the annually compounded rate implied by the same factor, as a decimal a year |
| \(D(0,T)\) | the discount factor, unchanged from every block above |
| \(T\) | the maturity in years, and raising to the power minus one over \(T\) is what turns a whole period growth into a per year growth |
| \(y_m\) | the rate quoted on \(m\) compounding periods a year, as a decimal a year |
| \(m\) | the number of compounding periods in a year: 1 for annual, 2 for semi-annual, 4 for quarterly, 12 for monthly |
| \(D(0,T)\) | the discount factor, still the same number |
| \(T\) | the maturity in years, so \(mT\) is the number of compounding periods to maturity |
Now put the one year factor through all of them. The price is 0.951229 in every row. Nothing else in the table moved.
| Convention | Compounding periods a year | Rate implied by 0.951229 | Distance from continuous |
|---|---|---|---|
| Continuous | unbounded | 5.000000 per cent | 0.00 bp |
| Daily | 365 | 5.000342 per cent | 0.03 bp |
| Monthly | 12 | 5.010431 per cent | 1.04 bp |
| Quarterly | 4 | 5.031381 per cent | 3.14 bp |
| Semi-annual | 2 | 5.063024 per cent | 6.30 bp |
| Annual | 1 | 5.127110 per cent | 12.71 bp |
Six rows, six numbers, one price. The spread between the top row and the bottom row is 12.71 basis pointsOne hundredth of a percentage point, so a hundred of them make one percentage point., and every basis point of it was produced by wording. Without its conventionThe rule that turns a price into a rate, without which a rate does not determine a price. a rate does not pin down a price at all, and there is therefore nothing left for it to be approximately right about. A rate quoted that way is incomplete rather than imprecise.
Somebody quotes a rate with no convention stated. Is that imprecise or incomplete?
What does the whole set across maturities give?
One factor prices one date. Any stream of future amounts is just a list of dated rupees, and each dated rupee has its own price, so a set of factors, one for every date in question, prices every dated amount that can arise. The whole set is the working object, and the plural matters more than the singular.
The rate here is 5 per cent at every maturity. Before reading on: do the six maturities below give the same rate as one another?
Here is the set for the standard process, computed at the invented rate of 5 per cent a year continuously compounded. Read each factor twice: once as a multiplier, and once, more usefully, as a price in paise.
| Maturity | Discount factor | What one rupee costs today | Rate read back, continuous |
|---|---|---|---|
| Three months | 0.987578 | 98.7578 paise | 5.000000 per cent |
| Six months | 0.975310 | 97.5310 paise | 5.000000 per cent |
| One year | 0.951229 | 95.1229 paise | 5.000000 per cent |
| Two years | 0.904837 | 90.4837 paise | 5.000000 per cent |
| Five years | 0.778801 | 77.8801 paise | 5.000000 per cent |
| Ten years | 0.606531 | 60.6531 paise | 5.000000 per cent |
Six prices, one rate. A flat curveA set of maturities all returning the same rate, which is what this guide assumes throughout. is exactly that, and every table here assumes one. The prices carry every bit of the variation across the table and the rates carry none of it. Nothing demonstrates more clearly that the two are not interchangeable ways of saying the same thing. A reader who watches the right-hand column stay still while the left-hand column falls by nearly forty paise has seen why the price is the object worth holding.
The factor earns its keep here, and it does so by scaling without any further thought. An amount of Rs 1,000/- falling due in five years is priced by one multiplication: Rs 1,000/- times 0.778801, giving Rs 778.80/-. An amount of Rs 10,000/- due in ten years is Rs 10,000/- times 0.606531, giving Rs 6,065.31/-. The standard process itself starts at Rs 100/-, and any dated rupee attached to it is priced by reaching into the same column. A stream of future amounts is nothing more than a list of dated rupees, and the set of factors prices the whole list one row at a time. No rate was needed at any point in that paragraph.
Look at the shape as well as the numbers. The factor does not fall in a straight line. The factor loses 1.24 paise over the first three months, a pace of 4.97 paise a year, and 17.23 paise over the five years from the five year point to the ten year point, a pace of 3.45 paise a year. The fall per year of extra maturity is steepest at the short end and flattens as the maturity lengthens. An exponential always behaves this way, and the shape is visible without any arithmetic once the set is drawn.
A rupee ten years away costs how much today at this rate?
What happens to the price when the maturity moves?
The table above has six rows. The control below has all of them and everything in between.
One price, 0.951229 at one year. How many different rates can it correctly be quoted as?
Move the maturity and watch which of the two numbers refuses to move
The rate of the standard process is held at 5 per cent a year, continuously compounded, and it was chosen rather than observed. Only the maturity moves. The curve marker and the price bar redraw as the slider travels. The curve is flat, so the three markers on the rate scale at the bottom stay exactly where they are at every maturity. Under a different convention the fourth marker travels while the price does not.
Two things are worth noticing while the control is open. First, the price bar shrinks steadily as the maturity is pushed out, and at ten years it has lost nearly two fifths of its length: a decade of the rate, drawn to scale. Second, the three markers on the bottom scale never twitch. Every maturity on a flat curve returns the identical rate, so the entire visible difference between a three month price and a ten year price lives in the price and none of it lives in the rate.
What goes wrong when two rates are compared?
Now the failure. No mistake in any calculation is needed to produce it.
Comparing two rates quoted on different conventions
Two workbooks, two sources, two numbers. The first says 5.1271 per cent. The second says 5.0000 per cent. A number that size is not noise and both sources look careful, so a gap of 12.71 basis points gets written up as a real difference.
There is no difference. The first source quoted on annual compounding and the second on continuous compounding, and behind both numbers sits the identical price of 0.951229. Nothing was cheaper, nothing was dearer, nobody was wrong, and the gap was manufactured entirely by two different ways of describing one number. Two descriptions were compared, not two prices.
The cost is a report of a real difference where none exists, and every decision that leans on the report inherits the error. The fix takes one line each: convert both quotes back to factors under the convention each was actually quoted on, and compare those. Prices carry no convention, so once the comparison is 0.951229 against 0.951229 there is nothing left to disagree about.
Two sources quote rates that differ by 12 basis points. Which of these gets checked first?
How is a discount factor that has been handed over checked?
Most of the time these numbers are not built but inherited: a column of them in somebody else's workbook, with a heading and no note of where they came from. Three checks, in order, each catching a different kind of fault, and under a minute together. The instrument at the top of this guide runs the first and the third on any figure typed into it; the second needs the whole column and has to be run by hand.
- Is it strictly between zero and one?
A factor at or above one says a rupee later costs at least as much as a rupee now, and that happens only at a rate of zero or below. A factor at or below zero is not a price at all. The first check catches a sign error, a percentage entered as a decimal, and a cell that picked up the wrong column.
Catches: sign flips, scale errors, misaligned references.
- Does the column fall as the maturity lengthens?
On a flat curve at a positive rate, every longer maturity has a strictly smaller factor, without exception. A row that sits above the row before it is either a typing error or a curve that is not flat, and which of the two it is has to be settled before any of the column is used.
Catches: transposed rows, mistyped digits, a curve nobody mentioned.
- Convert it back to a rate under the stated convention.
The logarithm, divided by minus the maturity, returns a rate, and the question is whether it is the rate the column was said to be built on. A column built on annual compounding but converted as though it were continuous comes out by roughly the spread shown above, and a gap of that size is the tell.
Catches: the wrong convention, the wrong maturity, and a column built at a different rate from the one in the heading.
A discount factor of 1.02 arrives for a two year maturity. Which conclusion follows?
Who actually runs this arithmetic, and when?
The habit matters more than the arithmetic, so it is worth being concrete about where the three checks get used. Check two takes four seconds of scrolling and it catches the fault that does the most damage, a column that is nearly right, so somebody reviewing a valuation workbook they did not build runs it first. A column with one transposed row prices most dates correctly and one date badly. A fault of that kind is far harder to spot downstream than a column that is wrong everywhere.
A mismatch of roughly the size shown here is the fingerprint of a convention difference rather than a modelling difference, and knowing which of the two is in front of the reviewer decides whether the work takes an hour or a week. So somebody reconciling two sets of numbers that ought to agree runs check three. An analyst handed a single rate and no workbook runs a different routine altogether: ask what convention it was quoted on, and treat a refusal or a shrug as a missing input rather than a detail. Never accept a rate without its convention, and never compare two rates until both have been reduced to prices.
A number that leaves as 0.951229, becomes 5 per cent, and comes back as 0.951229 to six decimal places settles the point faster than any argument about which quantity is more fundamental. So anybody teaching this runs the round trip in front of the room.
No jurisdiction legislates how an exponential works, and no regulator publishes a discount factor as a rule of law. The arithmetic holds identically everywhere. The compounding convention a particular market or contract quotes on does vary between settings, and the convention belongs with the instrument rather than with the mathematics: it is confirmed at the source that issued the quote, every time, and never assumed to be the convention used here.
References
| Source | Document | Where |
|---|---|---|
| arXiv Quantitative Finance | Preprint repository for discounting, term structure and no-arbitrage pricing | arxiv.org |
| Social Science Research Network | Working paper repository for the same material | ssrn.com |
| Hull, Shreve and Wilmott | Standard texts on discounting, the term structure and no-arbitrage pricing | Pearson, Springer and Wiley |
The standard process is invented.
Educational material. Not advice on any investment, tax, budget or market position.
