How to Check Put-Call Parity in Seven Ordered Steps
Checking parity takes seven steps in a fixed order: confirm the two contracts share a strike and a horizon, note both prices, take their difference with its sign, note the level and the rate with its convention, compute the discounted strike, subtract it from the level, and compare the two figures against a tolerance stated in advance. The order matters.
Every one of the seven steps is mechanical once the four quantities are in hand. There is arithmetic in five of them and nothing else at all. The seventh asks for a judgement, and it is the only one that does: how close two figures have to be before they can be called the same. How close is close enough is a decision to be stated out loud, not a number to be looked up somewhere.
What is written down before checking anything?
Weighing something on two different scales to find out whether the scales agree does not begin with the readings. The weighing begins with making sure both scales have the same object on them, and that both are reading in the same units. Only then does a difference between the two readings say anything about the scales. Taken back to front, an afternoon goes into adjusting a perfectly good scale because a different bag was weighed on it.
The check for parityThe identity linking the two contracts, the level of the process and the discounted strike. Checking the identity takes seven steps; explaining why it holds is a separate matter. has exactly that shape, and the first step is the one that corresponds to putting the same object on both scales. Before any arithmetic happens the pair being checked is written down and confirmed to be a matched pairTwo contracts sharing one strike and one horizon. Without that, the identity being tested is not a statement about the pair at hand.. Everything after that is subtraction.
The worked case throughout is an invented standard process, written S with a time subscript, starting at Rs 100/- with a volatility of 20 per cent a year, a risk-free rate of 5 per cent a year compounded continuously, and a horizon of one year. Every price below follows from those four parameters by arithmetic alone, so a reader who wants to check one can recompute it.
| \(C_t\) | the price today of the first contract of the pair |
| \(P_t\) | the price today of the second contract of the pair, which here is a price and not the physical measure P used elsewhere in this subject area |
| \(S_t\) | the level of the standard process today, Rs 100/- here |
| \(K\) | the strike shared by both contracts |
| \(r\) | the risk-free rate, 0.05 a year here, compounded continuously |
| \(T-t\) | the time remaining to the shared horizon, one year here |
Notice what the right hand side asks for and what it does not. The right hand side asks for a level, a strike, a rate and a length of time. Nowhere does it ask for a volatility, a drift, a distribution or a measure. Four demands and no model is why the check can be run on a pair of prices by someone who has none, and why the procedure below is short.
Step one: do the two contracts share a strike and a horizon?
Write both contracts down side by side with their strike and their horizon showing, and confirm the two strikes are the same number and the two horizons are the same date. Confirming those two things is the whole of step one. Step one takes about four seconds and it is the only step whose failure cannot be repaired later.
A step that takes four seconds and feels like a formality is exactly the step that gets skipped, and this one carries every other step on its back. The reason it feels like a formality is that in most working sheets the pair really is matched, so the check passes ninety-nine times out of a hundred and starts to look like ceremony. The hundredth time is what the step exists for.
Two things count as a mismatch and both are easy to walk past. The first is a strike difference. The two numbers sit next to each other, so a difference is usually obvious on inspection. The second is a horizon difference, and it is far less obvious. A horizon is often carried as a date rather than as a length of time, and two dates a few weeks apart look similar on a screen. On the worked case here the horizon is one year for both contracts, written as 1.000, and step one passes.
Record the outcome of step one rather than just performing it. A check that reports agreement without recording that the pair was matched has left out the part that makes the agreement mean anything, in the same way that a weight recorded without the units is not a weight.
Two contracts share a strike but not a horizon. All seven steps are run carefully. What does the check tell the person running it?
Step two: which price belongs to which contract?
Now write the two prices down, each against the contract it belongs to. On the worked case at a strike of Rs 100/-, the first contract prices at Rs 10.450584/- and the second at Rs 5.573526/-. Both are computed from the four parameters of the standard process using the solution that carries the names of Black, Scholes and Merton, 1973.
The whole check needs four quantities and no more: the two prices, the level of the process, and the discounted strike. Naming those four up front is what stops the procedure sprawling. When a check does not come out there is a strong pull to start adding inputs to it. The pull is worth resisting. A check with six inputs has six places to be wrong and this one has four.
Which price is which matters because step three takes a difference and a difference has a direction. The two prices are labelled as they are written down. When a sheet carries them in columns, the column headings are confirmed before the subtraction rather than after. A column swap produces a number of exactly the right size pointing exactly the wrong way, and that is the hardest kind of error to spot by eye.
How many quantities does the whole check need?
Does the check need the volatility of the standard process anywhere in its seven steps?
Step three: what is the difference, and which way does it point?
Subtract the second price from the first and keep the answer exactly as it comes out, including its signThe direction of a difference, positive or negative. A sign carries information rather than decorating the number.. On the worked case at a strike of Rs 100/-, Rs 10.450584/- less Rs 5.573526/- is Rs 4.877058/-, and the sign is positive. The difference just taken is the left hand figure of the comparison, and step three is finished.
| \(L\) | the left hand figure of the comparison, in rupees, carrying a sign |
| \(C_t\) | the price of the first contract of the matched pair |
| \(P_t\) | the price of the second contract of the matched pair |
The sign is not decoration on the number, it is half the information the number carries. Run the same three steps at a strike of Rs 110/- and the prices are Rs 6.040088/- and Rs 10.675325/-, so the difference comes out at minus Rs 4.635237/-. At Rs 100/- it was plus Rs 4.877058/-. Somewhere between those two strikes the left hand figure crossed zero, and the crossing is not an accident of these particular numbers.
Here is why that matters for the procedure rather than for the theory. A check written to report how far apart two figures are, without reporting which side of each other they sit on, throws the sign away at the last moment. Feed it the Rs 100/- pair and it reports 4.877058. Feed it a Rs 110/- pair whose left hand figure has been recorded the wrong way round, as plus Rs 4.635237/- instead of minus, and it reports 4.635237 against a right hand figure of the same size, and calls that a small discrepancy. The discrepancy is not small. A sign error of Rs 9.270473/-, twice the figure itself, is wearing the costume of a rounding difference.
Step four: what level, what rate, and on which convention?
Step four fills the other half of the sheet. Write down the level of the process today, write down the rate, and write down the conventionHow a rate is quoted: continuously compounded, compounded once a year, or on some day count. Without it a rate is a number rather than a discount factor. the rate is quoted on. On the worked case the level is Rs 100/- and the rate is 5 per cent a year compounded continuously.
A rate without its convention is not yet a rate, it is a number, and step five cannot start until the convention is written down. This is the tape measure problem. A measurement of thirty cannot be used until it is known whether it is thirty centimetres or thirty inches. Five per cent is exactly the same. Five per cent compounded continuously over one year gives a discount factor of 0.951229. Five per cent compounded once a year over the same year gives 0.952381. The two factors look alike and are not alike.
The difference between the two conventions carries through the rest of the procedure. On the continuous convention the discounted strike at Rs 100/- is Rs 95.122942/- and the right hand figure is Rs 4.877058/-. On the annual convention the discounted strike is Rs 95.238095/- and the right hand figure is Rs 4.761905/-. The two right hand figures differ by Rs 0.115153/-. A sheet of two decimal prices deserves a tolerance of about a paisa. Against that, the gap is more than eleven times too large, and it reports a violation that exists nowhere except in the convention that went unwritten.
So step four has three entries and not two. Level, rate, convention. A sheet that carries only the first two is a sheet that has not finished step four, however complete it looks.
A level, a strike, a horizon and a rate of 5 per cent have been handed over, but nobody has stated the convention. Can step five be completed?
Step five: what is the strike worth discounted back to today?
The strike is multiplied by the discount factor for the horizon on the convention written down in step four. The product is the discounted strikeThe strike multiplied by the discount factor over the remaining horizon. One number, and the check needs no other discounting anywhere., and it is the fourth and last of the quantities the check ever needs.
| \(D\) | the discount factor over the remaining horizon, 0.951229 here |
| \(r\) | the risk-free rate on the stated convention, 0.05 a year here |
| \(T-t\) | the time remaining to the shared horizon, 1.0 year here |
| \(K\) | the strike shared by both contracts of the pair |
More decimal places are carried here than are intended for the report. The discount factor over one year at 5 per cent continuously compounded is 0.9512294245 to ten places, and rounding it to 0.95 before multiplying costs Rs 0.12/- on a strike of Rs 100/- and Rs 0.15/- on a strike of Rs 120/-. Either error is enough on its own to fail a check that would otherwise pass. Round at the end of the procedure, never in the middle of it.
One discount factor serves the whole sheet when every pair on it shares one horizon. The saving is worth noticing before computing the factor four hundred times. A discount factor depends on the rate and the time remaining and on nothing else, so it is computed once and reused down the column, with only the multiplication by the strike changing from row to row.
Step six: what is left when the discounted strike comes off the level?
Subtract the discounted strike from the level of the process. On the worked case at a strike of Rs 100/-, Rs 100/- less Rs 95.122942/- is Rs 4.877058/-. The remainder is the right hand figure of the comparison, and it carries a sign in exactly the way the left hand figure does.
| \(R\) | the right hand figure of the comparison, in rupees, carrying a sign |
| \(S_t\) | the level of the standard process today, Rs 100/- here |
| \(K\!\cdot\! D\) | the discounted strike computed at step five |
When the check is being run down a long sheet, one fact is worth more than any other: the right hand figure is a straight line in the strike, falling by one discount factor for every extra rupee of strike. Move the strike from Rs 80/- to Rs 100/- and the right hand figure falls from Rs 23.901646/- to Rs 4.877058/-, a drop of Rs 19.024588/-, which is exactly twenty times the discount factor of 0.9512294245. Push the strike far enough and the right hand figure goes through zero and turns negative. The crossing is the one seen at step three, viewed from the other side.
Step six also has an omission worth naming. Neither price entered it. The right hand figure is built from the level, the strike, the rate and the time, and if both quoted prices were wiped off the sheet it could still be computed. Because the two sides are built from different material, the comparison at step seven is a comparison and not a restatement.
Step seven: do the two figures agree inside a stated tolerance?
Put the left hand figure and the right hand figure side by side, take the size of the difference between them, and compare that against a toleranceHow close two figures must be before they can be called equal. A tolerance is a decision, and a check that does not report it has left out its only judgement. decided on before the check started. On the worked case at a strike of Rs 100/- the two figures are Rs 4.877058/- and Rs 4.877058/-, the size of the difference is 0.000000, and the check passes on any tolerance whatsoever.
| \(L\) | the left hand figure from step three, with its sign |
| \(R\) | the right hand figure from step six, with its sign |
| \(\varepsilon\) | the tolerance, in rupees, chosen and written down before the check was run |
Two points about that tolerance, and the first is why it is never zero. Quoted prices arrive rounded. Rounding the worked pair at a strike of Rs 100/- to two decimal places gives Rs 10.45/- and Rs 5.57/-, whose difference is Rs 4.88/- against a right hand figure of Rs 4.877058/-, a gap of Rs 0.002942/- created entirely by the rounding. The same rounding at the other three strikes leaves gaps of Rs 0.001646/-, Rs 0.004763/- and Rs 0.002469/-. Every one of those four pairs satisfies the identity exactly and every one of them fails a tolerance of zero.
The second point is how to choose it. Two prices each rounded to two decimals can each be out by up to half a paisa, so their difference can be out by up to one paisa, and a tolerance of Rs 0.01/- is the smallest one that a sheet of two decimal quotes can be held to without generating failures that are purely arithmetic. All four gaps above sit inside it with room. A tolerance is chosen the same way as the closeness required of two scale readings: from the precision of the readings, not from how close it would be convenient for them to be.
Then state it in the result. A report that says the pair agrees, without saying to what, has left out the only judgement the whole procedure contained, and a reader of that report cannot tell whether it was checked to a paisa or to a rupee.
Why is the tolerance at step seven never set to zero?
What does the whole check look like run across four strikes?
Here are the seven steps run four times over, on the same standard process, the same one year horizon and the same 5 per cent continuously compounded rate, with only the strike changing. Every price is computed from the four parameters of the standard process, so the strike is the only thing that changes down the table.
| Strike | First price | Second price | Left figure | Discounted strike | Right figure | Gap |
|---|---|---|---|---|---|---|
| Rs 80/- | 24.588835 | 0.687189 | plus 23.901646 | 76.098354 | plus 23.901646 | 0.000000 |
| Rs 100/- | 10.450584 | 5.573526 | plus 4.877058 | 95.122942 | plus 4.877058 | 0.000000 |
| Rs 110/- | 6.040088 | 10.675325 | minus 4.635237 | 104.635237 | minus 4.635237 | 0.000000 |
| Rs 120/- | 3.247477 | 17.395008 | minus 14.147531 | 114.147531 | minus 14.147531 | 0.000000 |
Four strikes, four exact agreements, and the word exact is not being used loosely. The two sides match to the last place double precision arithmetic can hold, around fifteen significant figures. Take the Rs 80/- row and carry it to ten decimals and the left figure is Rs 23.9016460399/- and the right figure is Rs 23.9016460399/-. The residual difference is around seven parts in a thousand million million. The arithmetic has reached the end of its own precision. The two sides are not genuinely differing.
Look down the fourth column and watch the sign flip between the second row and the third. At Rs 100/- the left figure is positive, at Rs 110/- it is negative, and the right hand column flips at exactly the same place because it is the same quantity computed a different way. The crossing point is where the discounted strike equals the level. On these parameters the crossing sits at a strike of Rs 105.127110/-, since Rs 100/- divided by 0.9512294245 gives exactly that.
The practical consequence of four exact agreements is the one worth carrying away. If the identity itself is exact, then any gap ever seen on a real sheet came from somewhere else: from the pair, from the convention, from a stale price, from a level read at a different moment than the prices were. The check does not report which of those it was. The check reports that one of them happened. Reporting that much is genuinely useful.
Four strikes give four exact agreements. So what does a discrepancy on a working sheet actually indicate?
A procedure is finished properly only by running it on a case not already written out, and the calculator below does exactly that. The control moves the strike across the four values in the table and recomputes all seven steps from the formula rather than reading them off a stored list, so the sheet fills in as the strike moves.
The strike is about to rise above the level of the process. Before the control moves: what happens to the sign of the left hand figure?
Run the seven steps at four strikes and watch the sign turn over
The control moves the strike across Rs 80/-, Rs 100/-, Rs 110/- and Rs 120/-. The upper chart carries the left hand figure at all four strikes against a zero axis, with the selected one picked out. The lower panel is the check sheet itself, and it fills in step by step for the strike chosen. At the default strike of Rs 100/- the sheet reproduces the worked case exactly.
At a strike of Rs 100/- the two prices are Rs 10.450584/- and Rs 5.573526/-, their difference is plus Rs 4.877058/-, the level less the discounted strike of Rs 95.122942/- is plus Rs 4.877058/-, and the two figures agree with a gap of 0.000000.
Where does the procedure go wrong, and at which step?
The procedure goes wrong at step one, and it goes wrong there far more often than at all the other six put together. The reason is not that step one is difficult. Step one is the only step with nothing to compute, so it does not feel like work, and a step that does not feel like work gets treated as a heading rather than as a check.
The error that gets made, and what it costs
A pair is picked off a sheet whose two contracts share a strike of Rs 100/- but not a horizon: the first has one year remaining and the second has half a year. Step one is glanced at rather than performed. Steps two through seven then run perfectly. The prices are Rs 10.450584/- and Rs 4.419720/-, the left hand figure comes out at plus Rs 6.030864/-, the discounted strike at Rs 95.122942/-, the right hand figure at plus Rs 4.877058/-, and the gap at Rs 1.153806/-.
The gap is then written into a report as a parity violation of Rs 1.153806/-, and somebody spends the next hour looking for a bad price. There is no bad price. Both prices are correct for the contracts they belong to. The entire gap is the horizon mismatch and nothing else: the second contract at one year prices at Rs 5.573526/- and at half a year at Rs 4.419720/-, and the difference between those two is Rs 1.153806/- exactly, to the last digit of the reported gap.
The cost is an hour of somebody's attention spent chasing a number that was never a discrepancy, and, worse, a report that now carries a stated violation of a relationship that was never claimed about the pair being tested. The fault is a procedural failureA fault in how a check was run rather than in the arithmetic it performed. Every number is correct and the result is still worthless. rather than an arithmetic one. No amount of recomputing will find it, because every computation was right.
Which of the seven steps does the procedure usually fail at?
How does somebody checking a whole sheet of prices actually use this?
Somebody with two hundred pairs to check does not run seven steps two hundred times. The work is step one two hundred times and steps two to seven once per strike, arranged on the sheet so that step one can be done by looking rather than by reading. Sorted by horizon first and by strike second, a mismatched pair stops being something that has to be noticed and starts being something that sits visibly out of line.
A rate convention entered once can be checked once, so the one arrangement worth building into a sheet is a single discount factor cell that every row multiplies against. Two hundred rows each carrying their own discounting is two hundred places for the convention to be entered differently, and the failure that produces is silent: every row computes, the column looks complete, and a handful of rows are quietly discounted on the wrong convention.
The second habit is to record the tolerance in the sheet rather than in somebody's head. A column of gaps with a tolerance cell beside it can be read six months later by a person who was not there. A column of gaps on its own cannot. The reader has no way to tell whether a gap of Rs 0.004/- was a pass or a fail on the day.
The third is what to do when a row does fail. Go back through the four inputs in the order the procedure gathered them, not the order they appear on the sheet. Check the pair, then the two prices, then the level, then the convention. The two prices are usually the parts of the sheet that were checked most carefully, and the level and the convention are the parts that were assumed. So most failures resolve at the first input and almost all of the rest at the last. Mechanical stepsSteps requiring no judgement, only arithmetic or a comparison. Six of the seven steps are mechanical, and mechanical steps are quick to audit. are quick to audit precisely because they leave a trail of numbers behind them.
References
| Source | Document | Where |
|---|---|---|
| arXiv Quantitative Finance | Preprint repository for work on model-free price relations and the width of the interval around them once frictions are allowed for | arxiv.org |
| Social Science Research Network | Working paper repository for the same material, including empirical studies of how such checks are run on quoted sets | ssrn.com |
| Hull, Shreve and Wilmott | Standard texts on derivative pricing, covering the parity identity and the four quantities the check uses | textbooks |
| Hans R. Stoll, 1969 | The paper setting out the relation between the prices of the two contracts of a matched pair | Journal of Finance |
| Black, Scholes and Merton, 1973 | The pricing solution used to generate the illustrative prices at all four strikes | Journal of Political Economy, Bell Journal of Economics and Management Science |
The standard process, its four parameters and both contracts of every pair used here are invented.
Educational material. Not advice on any investment, tax, budget or market position.
