Fin Maverick
Foundations VocabularyAccounting & ReportingEconomics & MacroQuant Methods & ProgrammingBusiness & Company AnalysisCorporate Finance & ValuationBehavioural Finance
Banking & Market InfrastructureFixed Income & RatesDerivatives & Structured ProductsPublic EquitiesTransactions & DealsPortfolio ConstructionFunds & AMCs
Private Markets & AlternativesRisk, Treasury & ControlAI & Digital FinanceStochastic Calculus & PricingWealth & Personal FinanceIndian Markets & RegulationProfessional Practice
CalculatorComparison
Frameworks
Explore Bootcamps
Equity ResearchPortfolio ManagementMutual Fund MasteryFinancial LiteracyInvestment Banking Analyst
Private Equity AnalystHedge Funds AnalystBreaking Into VCBreaking Into QuantsAI For Finance
Financial Analyst ProgramRisk Management ProgramPrivate Wealth ManagementDebt Capital MarketsDerivatives Foundation
Explore Internships
Equity Research InternMutual Fund Intern
Portfolio Management InternFinancial Literacy Intern
Explore Micro Courses

Equity Research6

Writing an Investment ThesisBuilding a Discounted Cash FlowReading an Annual Report FastReading a Sector Before a CompanySpotting Quality of Earnings Red FlagsBuilding a Revenue Forecast From Drivers

Portfolio Management3

Rebalancing: When, Why and What It CostsStrategic and Tactical Asset AllocationMeasuring Risk in a Portfolio

Mutual Fund Mastery3

Comparing Funds Without Being FooledHow a NAV Is Struck and Which Day You GetReading a Fund Factsheet Properly

Derivatives Unlocked4

Hedging a Real ExposureThe Greeks, PracticallyFutures, the Basis and What Moves ItReading an Option Payoff

AI For Finance2

Retrieval and Grounding for FinanceDocument Extraction in Finance

Breaking Into Quants4

Backtesting a StrategyHypothesis TestingCleaning Financial DataRegression for Finance

Breaking Into VC3

Sizing a MarketReading a Term Sheet as a FounderHow a Venture Round Actually Works

Financial Analyst Program4

Common Size and Trend AnalysisReading a Cash Flow StatementRatio Analysis That Says SomethingBuilding a Working Capital Schedule

Risk Management Program2

Credit Exposure and How It Is ReducedValue at Risk and What It Hides

Investment Banking Analyst3

Precedent Transactions and Why They DifferReading a Term Sheet StructurallyBuilding a Comparable Companies Table

Private Wealth Management3

Tax Aware Portfolio DecisionsBuilding a Client Risk ProfileGoal Based Planning Arithmetic

Debt Capital Markets3

Analysing an Issuer's CreditDuration and What It Does Not Tell YouBond Pricing and Yield Mechanics

Private Equity Analyst2

Fund Waterfalls and CarryThe LBO in Structure

Hedge Funds Analyst2

Short Selling MechanicsLong Short Mechanics
Courses
Explore Career Roadmaps
Investment Banking AnalystEquity Research AnalystVC AnalystPrivate Equity AnalystHedge Funds Analyst
Quant AnalystAI For FinanceFinancial Analyst ProgramPrivate Wealth ManagementDebt Capital Markets
Risk Management ProgramDerivatives FoundationPortfolio ManagementMutual Fund Mastery
PartnershipsShowdown
Log inSign up
Stochastic Calculus & Derivative Pricing Theory
1Probability Foundations
The Probability SpaceRandom VectorsSigma-AlgebraExpectationSample Space and EventsDensity and Distribution FunctionsRisk-Neutral ProbabilityState Price Density vs…
2Stochastic Processes and Jumps
Properties of a Stochastic ProcessMartingaleBrownian Motion and Its PropertiesBrownian Motion vs Geometric…Stopping TimeThe Markov PropertyState VariablesTransition ProbabilityQuadratic VariationQuadratic Variation vs Ordinary…Submartingale and SupermartingaleMartingale RepresentationMarkov Process vs MartingaleOptional StoppingFiltrationJump ProcessesThe Poisson ProcessLevy ProcessesJump Diffusion
3Ito Calculus
The Ito IntegralThe Ito Integral vs the Riemann IntegralInfinitesimals in Stochastic CalculusQuadratic CovariationIto's LemmaHow to Apply Ito's…The Infinitesimal GeneratorIto Calculus vs Ordinary Calculus
4Stochastic Differential Equations
Stochastic Differential EquationsStochastic Differential Equation vs…Drift and DiffusionStrong and Weak Solutions ComparedDiscretisationGeometric Brownian Motion
5Pricing Theory and No-Arbitrage
No-ArbitrageGirsanov, Radon-Nikodym and Change…Physical and Risk-Neutral Measures…The Fundamental Theorems of…The Law of One PriceThe Pricing KernelDiscount Factors and Zero-Coupon PricesReplication vs HedgingComplete Market vs Incomplete MarketClearing Margin Architecture
6Option Pricing Theory
European and American OptionsMonte Carlo European OptionThe Black-Scholes PDEBlack Scholes and the GreeksThe Payoff FunctionThe Binomial ModelBinomial Option PricingDelta Hedging in TheoryBoundary, Initial and Terminal ConditionsThe Exercise BoundaryHow to Check Put-Call…
7Volatility Models
Constant, Local and Stochastic…Vasicek Model vs CIR ModelThe Heston ModelThe SABR ModelThe Volatility ProcessImplied VolatilityVolatility Smile vs Skew vs Surface
8Interest Rate Models
Interest-Rate DerivativesMean ReversionThe Zero-Coupon BondThe Ornstein-Uhlenbeck ProcessThe Discount CurveZero RatesShort-Rate Model vs Market Model
9Numerical Pricing
Closed Form and Numerical…Monte Carlo PricingEuler and Milstein Schemes ComparedTree MethodsFinite Difference MethodsNumerical Error and StabilityVariance Reduction
10Calibration and Model Risk
Model OverrideMarket Price and Model PriceCalibrationHow to Document a Pricing ModelThe Educational Illustration LabelMarket ConventionsModel Uncertainty and LimitationsBacktesting a Pricing ModelIdentifiabilityCalibrated ParametersThe Calibration Loss Function

Binomial Option Pricing: Building and Checking the Tree

Six numbers go in and one comes out. Five of them, the level, the strike, the rate, the volatility and the horizon, are read off the specification. The sixth, the count of steps the horizon gets chopped into, is chosen by whoever runs the tool, and it moves the answer, so a price reported without it cannot be reproduced.

A lattice is an instrument before it is an argument. Why a lattice prices anything at all, where its two factors come from, and why its answer walks toward the closed form in a zigzag rather than a straight line are all set out under the binomial model. The tool itself is the part somebody actually sits in front of: what it is fed, what it builds, what it prints, and how an analyst establishes that the thing is working before quoting anything it produced.

Everything below runs on the same worked instance the rest of this subject area uses. The standard process, a benchmark with four parameters chosen for the illustration, starts at Rs 100/-, carries a volatility of 20 per cent a year, and sits in a world with one rate of 5 per cent a year, continuously compounded, over a horizon of one year. The contract is the at-the-money one, struck at Rs 100/-. Its payoff arrives already known and is used here only as the function being valued.

The step count is the only one of the six numbers that nobody supplies and the only one that changes the answer without changing the question, so it is an input and not a setting. Everything else is arrangement around that fact.

What are the six inputs, and where is each one found?

A tool is easiest to trust when every number it consumes can be traced to the document it came off. The six follow, each with a field note on where it is found rather than a discussion of what it means. Meanings are settled under the binomial model. Locations are what goes wrong in practice.

InputValue hereWhere it is found
The level of the standard process100.000000The specification of the process being priced, at the line giving its value today.
The strike100.000000The contract terms. It is a fixed number written into the contract and it never moves.
The horizon1.000000The contract terms, as the time remaining, converted to years before it goes in.
The rate0.050000The rate assumption recorded beside the model, with its compounding convention stated.
The volatility0.200000The volatility assumption recorded beside the model, as a figure per year.
The step count12Nowhere. It is chosen by whoever runs the tool and belongs in the run record.

Five of those are lookups. The five are fetched, and they are what they are. Nothing in the world could be read off to supply the sixth, so it has no source document anywhere. The step countHow many equal periods the horizon is chopped into before the tool builds anything. Twelve here, but any whole number is admissible. is not a property of the process, not a property of the contract and not a property of the rate. The step count is a decision about how finely to do the arithmetic.

The everyday version is worth holding on to. Consider a parcel that has to be weighed. The parcel has a weight, the label has a declared weight, the courier has a limit, and all of those exist before anyone arrives. The choice of scale is settled by nothing before anyone arrives. A kitchen scale reading to the gram and a bathroom scale reading to the half kilogram return two different answers about the same parcel, and neither scale is broken. A reading reported without saying which scale produced it is something nobody can check. The step count is the scale.

There is a second field note worth making, and it catches people who are handed somebody else's implementation. Four further quantities appear the moment the tool starts: the length of one step, the up factor, the down factor and the weight. None of those four is an input. They are computed from the six above and from nothing else. A tool that asks for an up factorThe multiple applied to the level on an up move. The tool works it out from the volatility and the step length; it is never supplied from outside. is asking for something it should have derived, and the first question to ask of such a tool is what it did with the volatility it was also given.

What the tool derives before it builds anything
$$ \Delta t=\frac{T}{n},\qquad u=e^{\sigma\sqrt{\Delta t}},\qquad d=\frac{1}{u},\qquad q=\frac{e^{r\Delta t}-d}{u-d} $$
\(T,\ n\)the horizon in years and the chosen step count, one year and twelve here
\(\Delta t\)the length of one step in years, 0.083333 at twelve steps
\(\sigma\)the volatility of the standard process, 0.200000 a year throughout this guide
\(r\)the one rate in this world, 0.050000 a year, continuously compounded
\(u,\ d\)the up and down factors the tool computes, 1.059434 and 0.943900 at twelve steps
\(q\)the weight the tool puts on an up move, 0.521710 at twelve steps
What it says in wordsFour numbers appear on their own. Divide the horizon by the step count to get the length of one step. Feed that step length and the volatility through an exponential to get the up factor, and take its reciprocal for the down factor. Then build the weight out of one step of growth on cash, the down factor and the spread between the two factors. Why each of those forms is the right one is settled separately; what matters at the keyboard is that all four are outputs of the six inputs and none of them is a seventh input.
Five are fetched. One is chosen. Four the tool works out for itself. FETCHED FROM THE SPECIFICATION level of the standard process 100.000000 strike, from the contract terms 100.000000 horizon in years, time remaining 1.000000 rate, with its compounding stated 0.050000 volatility, a figure per year 0.200000 CHOSEN, WITH NO SOURCE DOCUMENT step count, a decision by whoever runs it 12 Move this one and the answer moves. The contract, the process and the rate have not changed at all. derives COMPUTED, NEVER SUPPLIED length of one step 0.083333 up factor 1.059434 down factor 0.943900 weight on an up move 0.521710 one step of discounting 0.995842 A tool that ASKS for any of these is asking for its own output. First question to ask such a tool: what did it then do with the volatility it was also given, and are the two consistent with each other.
Five of the six inputs are fetched off a specification and one is decided at the keyboard, and the four quantities that appear next are derived from those six rather than typed in beside them.
Try it out

The tool reports an up factor of 1.059434. Where did that number come from?

Breaking Into Quants Bootcamp — Fin Maverick

What exactly happens at one node?

Now the part that surprises people who expect a pricing tool to be complicated. There is one arithmetic operation in the whole program and it has three moves in it. Multiply, add, discount. Those three moves are the entire computation, and everything else is bookkeeping about which numbers to feed them next.

A node valueThe number the tool writes on one point of the grid. The value is always built from the two numbers directly after that point and never from anything else. is the discounted weighted average of the two values that follow it. The tool takes the value at the node reached on an up move and multiplies it by the weight. The tool then takes the value at the node reached on a down move and multiplies it by one less the weight. Those two are added, the total is multiplied by one step of discounting, the result is written down, and the tool moves to the next node.

Here it is in full on the worked instance, at the twelve step setting, on one specific node. The node sits one step before the horizon, on the route that has gone up once more than it has gone down, so the level standing there is Rs 105.943424/-. Two nodes follow it. The up move lands on Rs 112.240090/-, where the payoff is Rs 12.240090/-. The down move lands on Rs 100.000000/-, where the payoff is nil.

The weighted average is therefore 0.521710 multiplied by Rs 12.240090/-, giving Rs 6.385776/-, plus 0.478290 multiplied by nothing, giving nothing. Discount that by one step at 5 per cent, meaning multiply by 0.995842, and the node takes the value Rs 6.359224/-. Three lines of arithmetic, no calculus, no iteration and no solving, and that operation repeated seventy eight times is the whole of a twelve step price.

The one operation, with the twelve step constants already in place
$$ V \;=\; 0.995842\bigl[\,0.521710\;V_{\uparrow}\;+\;0.478290\;V_{\downarrow}\,\bigr] $$ $$ 6.359224 \;=\; 0.995842\bigl[\,0.521710\times 12.240090 \;+\; 0.478290\times 0\,\bigr] $$
\(V\)the value the tool writes on the node it is currently standing on
\(V_{\uparrow}\)the value already written on the node reached by an up move from here
\(V_{\downarrow}\)the value already written on the node reached by a down move from here
\(0.521710\)the weight on the up move at twelve steps, and its complement is 0.478290
\(0.995842\)one step of discounting at 5 per cent over one twelfth of a year
What it says in wordsEvery node in the grid gets the same treatment. Weight the two numbers that come after it, add them together, and pull the total back by one step of interest. The second line is that rule carried out once, on the node one step before the horizon where the level stands at Rs 105.943424/-, and it lands on Rs 6.359224/-. Nothing different happens anywhere else in the tool; only the two numbers being fed in change.
One node, in full. This is the entire tool, run once. up move, level 112.240090 payoff 12.240090 down move, level 100.000000 payoff 0.000000 weight 0.521710 weight 0.478290 the node, level 105.943424 value 6.359224 LINE 1, WEIGHT AND ADD 0.521710 times 12.240090, plus 0.478290 times nil 6.385776 LINE 2, DISCOUNT ONE STEP 6.385776 times 0.995842 6.359224 LINE 3, WRITE IT DOWN AND MOVE ON. Repeat 78 times for a twelve step price. The grid holds 91 nodes in all, of which 13 sit at the horizon and carry a payoff rather than a computation.
Weighting the two later values and discounting the total by one step turns Rs 12.240090/- and nil into Rs 6.359224/-, and running that same pair of lines seventy eight times produces the twelve step price.
Try it out

What is a node's value?

How should the tree the tool produces be read?

Most tools print a price and stop. A lattice tool can print the whole grid, and the grid is the only place in derivative pricing where every intermediate number the answer was built from is visible. Reading it takes about a minute once the shape is understood.

The grid is a cone. The tree is recombiningBuilt so that an up move followed by a down move lands on exactly the same level as a down move followed by an up move, which keeps the grid a cone rather than a fan., so the grid starts at one node today and widens by one node at each step. At twelve steps that gives thirteen finishing levels and ninety one nodes in total, of which thirteen carry a payoff and seventy eight carry a computation. The vertical position of a node is its level and the horizontal position is its time.

Now the part that makes the printout checkable by eye. Look at the column one step before the horizon, the twelve nodes the backward passThe direction the tool runs in: it fills the column at the horizon first, then the column before it, and works toward today. fills in first. Six of them read exactly nil, and six of them read something. The split is not arbitrary, and its position shows where the corner of the payoff has landed on the grid.

Node in the column before the horizonLevelValue the tool writesWhat the number is
five down moves clear of the middle52.9890290.000000both nodes after it pay nil
three down moves clear of the middle74.9255570.000000both nodes after it pay nil
one down move clear of the middle94.3900020.000000both nodes after it pay nil
one up move clear of the middle105.9434246.359224the level less Rs 99.584200/-
three up moves clear of the middle118.91099419.326794the level less Rs 99.584200/-
five up moves clear of the middle133.46580733.881607the level less Rs 99.584200/-
seven up moves clear of the middle149.80214350.217942the level less Rs 99.584200/-
nine up moves clear of the middle168.13806068.553860the level less Rs 99.584200/-
eleven up moves clear of the middle188.71831089.134110the level less Rs 99.584200/-

Rs 99.584200/- is the strike discounted by exactly one step, and every node in that column whose value is not nil equals its own level less that amount, to the sixth decimal at every one of them. On the first: Rs 105.943424/- less Rs 99.584200/- is Rs 6.359224/-, which is the number the three lines of arithmetic produced a moment ago. On the third: Rs 133.465807/- less Rs 99.584200/- is Rs 33.881607/-. The regularity is not a coincidence and not something the tool was told to do. At any node where both of the nodes after it finish above the strike, the weighting of the two levels returns the level the node started from and the weighting of the two strikes returns the strike, so the discounting applies to the strike alone.

A reading rule follows, and it applies to any printed grid. Far above the strike the node values run exactly parallel to the levels, one rupee of value for one rupee of level. Far below the strike they are flat at nil. Somewhere in between there is a band where they curve, and the width of that band, read straight off the printout, is the region where the answer is actually being decided. On the column before the horizon the band is one node wide. Ten columns earlier it is most of the grid.

All 91 nodes of the twelve step grid, with the last computed column picked out. the strike, Rs 100/- today step 11 horizon 6.359224 DARK: value equals the level less 99.584200 GREY: value reads exactly nil Six nodes read nil, six read the level less the discounted strike, and the band where the answer is decided is one node wide here.
The grid widens into a cone of ninety one nodes, and in the last column the tool computes the six nodes above the strike read exactly the level less the discounted strike while the six below read nil.

What check confirms the tool is working at all?

Suppose an analyst is handed a lattice implementation with no closed form to compare it with. The handover is the normal case rather than the exception. Anybody who reaches for a lattice usually does so precisely because no closed form exists for what they are pricing. So the question becomes what can be checked without one.

Three things, and none of them needs a formula from outside the tool. Each one replaces the payoff with something whose answer is already known, runs the same machinery, and checks that the machinery gives it back. All three check the plumbing rather than the accuracy, and the difference between plumbing and accuracy matters more than almost anything else about a lattice.

  1. Replace the payoff with the level itselfInstead of the contract payoff, write the finishing level on every finishing node. Run the tool. It must return Rs 100.000000/- exactly, at every step count, because the weighted average of the two levels after any node, discounted, is that node's own level. If it returns anything else, the weight and the factors are inconsistent with each other and the tool is wrong before any contract is involved.
  2. Replace the payoff with one rupeeWrite Rs 1/- on every finishing node and run the tool. It must return 0.951229, the discount factor over the whole horizon, at every step count. This checks that the discounting is being applied exactly once per step and that the weight sums to one. A tool that discounts twice, or that has a weight of 0.52 and a complement of 0.47, fails here loudly.
  3. Price the call and the put on the same gridRun the same tool twice at the same step count, once with the call payoff and once with the put payoff, and subtract. The difference must be Rs 4.877058/-, which is the starting level less the discounted strike, at every step count. This is the strongest of the three because it exercises the whole backward pass on two genuinely different shapes and demands one exact relationship between the results.

Run all three on the worked instance and the results are stark. At twelve steps: level check Rs 100.000000/-, unit check 0.951229, call less put Rs 4.877058/-. All three pass. At two hundred steps: identical. Now run them at one step. The whole grid is three nodes and the price of the contract is Rs 12.162285/-, a full Rs 1.711701/- away from the closed form. All three checks still pass, exactly.

The lesson is worth more than the checks themselves: passing all three establishes that the tool is coded correctly and says nothing whatever about whether the step count is high enough. The plumbing is sound and the answer is still Rs 1.71/- out. Somebody who runs an internal consistency suite, sees green, and reports the number has answered a question nobody asked.

Three identities the tool must satisfy at every step count
$$ \mathcal{L}\bigl[\,S_T\,\bigr]=S_0=100.000000,\qquad \mathcal{L}\bigl[\,1\,\bigr]=e^{-rT}=0.951229 $$ $$ \mathcal{L}\bigl[\,(S_T-K)^{+}\,\bigr]-\mathcal{L}\bigl[\,(K-S_T)^{+}\,\bigr]\;=\;S_0-Ke^{-rT}\;=\;4.877058 $$
\(\mathcal{L}[\cdot]\)the tool: build the grid, write this on every finishing node, run the backward pass, read the root
\(S_T,\ S_0\)the level of the standard process at the horizon and today, the latter Rs 100/-
\(K\)the strike, Rs 100/- for the contract used throughout this guide
\((x)^{+}\)the larger of \(x\) and nothing, which is how the two payoffs are written
\(e^{-rT}\)discounting over the whole horizon at once, 0.951229 for one year at 5 per cent
What it says in wordsFeed the tool the finishing level itself and it must hand back today's level. Feed it one rupee and it must hand back the one year discount factor. Feed it the two payoff shapes in turn and the gap between the two answers must be today's level less the discounted strike. All three hold exactly at every step count, including counts far too coarse to give a usable price, which is precisely why they test the construction of the tool rather than the adequacy of the count.
Three checks that need no closed form, run at four step counts. 1 STEP 12 STEPS 50 STEPS 200 STEPS PAYOFF SET TO THE LEVEL must return 100.000000 100.000000 100.000000 100.000000 100.000000 PAYOFF SET TO ONE RUPEE must return 0.951229 0.951229 0.951229 0.951229 0.951229 CALL LESS PUT ON ONE GRID must return 4.877058 4.877058 4.877058 4.877058 4.877058 THE PRICE ITSELF against 10.450584 12.162285out by 1.711701 10.285850out by 0.164734 10.410692out by 0.039892 10.440591out by 0.009993 Three rows never move. The fourth row is the only one that knows about the step count. A green consistency suite at one step sits above a price that is Rs 1.71/- away, and neither statement contradicts the other.
All three internal checks return their exact target at every step count including the coarsest, while the price of the contract at that same coarsest count is over a rupee away from the closed form.
Try it out

What is the fastest way to test a lattice tool written by somebody else?

Does the price approach the closed form as steps are added?

The price does approach it, and the way it approaches is the reason the step count has to be reported. A convergence checkRunning the same tool at several rising step counts and confirming the answers march toward a target rather than wandering. is not one comparison. The check is a shape, and the shape has a feature that is easy to miss unless it is looked for.

Here are eight readings on the same contract with the same five other inputs, differing only in the count. The pairing is where the structure lives, so the readings come in pairs, one even count and the odd count just above it.

StepsUp factorWeightPrice the tool returnsAgainst 10.450584Side
121.0594340.52171010.285850minus 0.164734below
131.0570370.52085410.586350plus 0.135766above
501.0286880.51061410.410692minus 0.039892below
511.0284010.51050910.485018plus 0.034434above
1001.0202010.50750210.430612minus 0.019972below
1011.0201000.50746510.467955plus 0.017371above
2001.0142430.50530410.440591minus 0.009993below
2011.0142070.50529110.459308plus 0.008724above
closed form10.450584nil

The four even counts alone suggest that the tool approaches the answer steadily from below; the four odd counts alone suggest that it approaches steadily from above; and both readings are correct. The two rows adjacent in the table differ by one step out of fifty and they sit on opposite sides of the target. A convergence check therefore has to sample counts of both parities before it says anything about the direction of the remaining error.

The other thing the table shows is the price of accuracy. Each doubling of the count roughly halves the gap: minus 0.039892 at fifty, minus 0.019972 at a hundred, minus 0.009993 at two hundred. The rate is slow. Halving the error again from two hundred steps means four hundred, and the arithmetic involved does not double along with the count. The arithmetic roughly quadruples.

What the count costs and what it buys
$$ \text{nodes}=\frac{(n+1)(n+2)}{2},\qquad \text{operations}=\frac{n(n+1)}{2},\qquad \bigl|\,V^{(n)}-C\,\bigr|\;\approx\;\frac{a}{n} $$
\(n\)the step count, the one input with no source document
nodesevery point of the grid, 91 at twelve steps and 20,301 at two hundred
operationsthe nodes that carry a computation rather than a payoff, 78 and 20,100
\(V^{(n)}\)the price this tool returns at \(n\) steps
\(C,\ a\)the closed form price and a bounded quantity whose sign depends on the parity of \(n\)
What it says in wordsThe work grows with the square of the step count while the error falls in proportion to one over it. Doubling the count therefore buys about half the error for about four times the arithmetic. Going from a hundred steps to two hundred takes the operations from 5,050 to 20,100, a factor of 3.98, and takes the gap from 0.019972 to 0.009993, a factor of 0.50. That trade is the reason nobody simply sets the count to a million and stops thinking about it.
Eight counts, four pairs. The line is the closed form; distance is the size of the miss. closed form 10.450584 12 steps 10.285850 50 steps 10.410692 100 steps 10.430612 200 steps 10.440591 13 steps 10.586350 51 steps 10.485018 101 steps 10.467955 201 steps 10.459308 ODD COUNTS, ALWAYS ABOVE EVEN COUNTS, ALWAYS BELOW Distance from the line is drawn on a shrinking scale so that a miss of 0.008724 is still visible beside a miss of 0.164734.
Even counts sit below the closed form and odd counts sit above it at every size, so a check that samples only one parity reports the direction of the error backwards for half of all possible counts.
Try it out

The step count is raised and the price moves further from the closed form. Is the tool broken?

Try it out

At twelve steps the weight is 0.521710. At two hundred steps, higher or lower?

Try it out

Which of the six inputs is a decision rather than a lookup?

Play with it

Run the tool at every count from one to two hundred and one

The control is the only input with no source document. Move it and the grid on the left is rebuilt, the four derived quantities are recomputed, the three internal checks are rerun, and the reading is placed on the braid on the right. The braid holds all two hundred and one counts, each one priced by the same tool, with the even counts sitting below the closed form and the odd counts above it. Distance from the middle line is drawn on a shrinking scale so the small misses stay visible. The default is twelve steps, giving an up factor of 1.059434, a down factor of 0.943900, a weight of 0.521710 and a price of Rs 10.285850/-.

1 step12 steps201 steps
THE GRID THE TOOL BUILDS WHERE THE ANSWER LANDS strike Rs 100/- Rs 250/- Rs 40/- every node drawn Only the window between Rs 40/- and Rs 250/- is shown. The grid reaches past it in both directions as the count rises. closed form 10.450584 10.285850 odd counts, too high even counts, too low All 201 counts, priced by the same tool. Distance from the line is the size of the miss, drawn on a shrinking scale. THE THREE INTERNAL CHECKS, RERUN AT THIS COUNT payoff set to the level, target 100.000000 100.000000 payoff set to one rupee, target 0.951229 0.951229 call less put, target 4.877058 4.877058
Steps
12
Step length
0.083333
Up factor
1.059434
Down factor
0.943900
Weight
0.521710
Price
10.285850
Against 10.450584
minus 0.164734
Operations
78

At twelve steps the tool builds a grid of 91 nodes, computes an up factor of 1.059434, a down factor of 0.943900 and a weight of 0.521710, and returns Rs 10.285850/-, which is Rs 0.164734/- below the closed form because the count is even.

Educational illustration. Level Rs 100/-, strike Rs 100/-, rate 5 per cent, volatility 20 per cent, one year, and only the step count moves. Every reading is computed from the lattice itself and never sampled, so the same control position always returns the same number. The reference readings, all confirmed by recomputation: at twelve steps the up factor is 1.059434, the down factor 0.943900, the weight 0.521710 and the price Rs 10.285850/-; at fifty steps they are 1.028688, 0.972112, 0.510614 and Rs 10.410692/-; at a hundred steps Rs 10.430612/- and at two hundred Rs 10.440591/-, against a closed form of Rs 10.450584/-. The three internal checks return Rs 100.000000/-, 0.951229 and Rs 4.877058/- at every count.
Derivatives Foundation Bootcamp — Fin Maverick Bond Pricing and Yield Mechanics — free micro-course from Fin Maverick

What does the tool handle that the closed form cannot?

Everything so far has been the tool doing slowly and visibly what a formula does instantly. If that were the whole story nobody would keep the tool. One line can be added to the backward pass, and it has no counterpart anywhere in a closed form. The tool survives on that line.

The line is a comparison. After the tool has computed the discounted weighted average at a node, it compares that number against what the contract would pay if it were settled at that node, and writes down whichever is larger. Two extra operations per node. The grid does not change, the factors do not change, the weight does not change, and the backward direction does not change.

A closed form has no nodes, so there is nowhere in one to put that comparison, and that single structural fact is worth more than every efficiency the formula holds. Run on the standard process with a put struck at Rs 100/-, the tool returns Rs 5.533634/- at fifty steps without the extra line. With it, Rs 6.073728/-. The gap of 0.540094 is the whole of what the extra right is worth, and it is a number no formula in this guide produces. The meaning of that gap and why it is nil for one contract and positive for the other are set out under European and American options, and the place where the switch happens is set out under the exercise boundary.

The one extra line, and where it goes
$$ V_{i,j}=\max\Bigl(\underbrace{e^{-r\Delta t}\bigl[q V_{i+1,j+1}+(1-q)V_{i+1,j}\bigr]}_{\text{what the tool already computed}},\;\; \underbrace{g\bigl(S_{i,j}\bigr)}_{\text{settle here instead}}\Bigr) $$
\(V_{i,j}\)the value the tool writes at the node after \(i\) steps reached by \(j\) up moves
\(S_{i,j}\)the level of the standard process at that same node, fixed when the grid was built
\(g(\cdot)\)the settlement amount at that node, a function of the level and nothing else
\(q,\ \Delta t\)the weight and the step length, unchanged from the ordinary run
\(\max\)the whole of the addition: two operations per node and no change to anything else
What it says in wordsAt each node, work out the ordinary discounted weighted average as before, then compare it with what the contract would hand over if it were settled right there, and keep the larger of the two. That is the entire modification. It costs two operations per node, it leaves the grid and the weights untouched, and it prices a contract for which no closed form exists. A formula has no node to attach the comparison to, which is why the slower tool is the one that survives.
One extra line at a node. Two contracts the formula cannot reach. THE CLOSED FORM THE TOOL SETTLED ONLY AT THE HORIZON 10.450584, instantly 10.440591 at 200 steps THE MIRRORING SHAPE 5.573526, instantly 5.533634 at 50 steps SETTLEABLE BEFORE THE HORIZON no closed form exists 6.073728 at 50 steps RULE APPLIED AT A NODE nowhere to put it two operations per node The formula wins the top two rows on speed and loses the bottom two rows entirely. Rs 0.540094/- separates the two put figures at fifty steps, and no formula in this guide produces it.
Adding one comparison at each node lets the same tool price a contract settleable before the horizon at Rs 6.073728/- where the closed form has no expression to offer at all.
Try it out

Name a contract the lattice handles and the closed form does not.

The error that gets made, and what it costs

Quoting a lattice price without the step count beside it. The count feels like a setting rather than a number, so the omission turns up in a spreadsheet cell, in an email, in a model document and in a review note.

The same tool, on the same contract, with the same five other inputs, returns Rs 9.540501/- at two steps and Rs 10.440591/- at two hundred. The spread is Rs 0.900090/- on a price of about Rs 10.45/-, and both figures are correct outputs of a correctly coded tool. Neither is a bug. Neither is a rounding artefact. Neither is wrong as a lattice answer. Reporting either one as though it were the price is the wrong part.

The cost lands in three places. A figure that cannot be reproduced cannot be checked by anybody else, so a reviewer has to rerun the whole thing on a guess. Two figures produced at different counts get compared as though the difference were economic, when the difference is arithmetic. And the count that produced the number decided which side of the closed form it sat on, so the error estimate written into any documentation carries the wrong sign half the time. The fix costs one word: write the count next to the number, every time, without exception.

One tool. One contract. Two answers. No count reported. closed form 10.450584 9.540501 produced at 2 steps 10.440591 produced at 200 steps 0.900090 apart WHAT THE NOTE ACTUALLY SAID Lattice price: 10.44 Nothing here says which of the two it is. WHAT IT NEEDED 10.44 at 200 steps Three words, and the figure becomes checkable. Neither figure is a bug. The gap between them is arithmetic, not economics.
Two steps and two hundred steps produce prices Rs 0.900090/- apart from one correctly coded tool, and without the count written beside the number there is no way to tell which of the two a given figure is.
Try it out

A lattice price is quoted with no step count. On this contract, how wide is the range it could have come from?

Early exercise fits the lattice; the closed form cannot. See what the tool handles.

How is a handed-over lattice price audited?

Three moves, in order, and the first is the one usually skipped. Asking feels rude, and the answer is often that nobody wrote it down.

  1. Ask what step count produced itNot what model, not what version, not what language it is written in. The count. If the answer is that nobody recorded it, that is a real gap and the number is not reproducibleAble to be produced again, exactly, by somebody else who is given the same inputs and told what was chosen.. Stop here and go back for it, because everything below depends on knowing it.
  2. Rerun it at a much higher count and watch the movementIf the handed figure came from twelve steps, a run at two hundred follows. The gap between the two, Rs 0.154741/- on this contract, is a lower bound on how far the original was from settled. If the number barely moves the count was adequate; if it moves by more than anybody expected, that is the real finding of the review.
  3. Compare against a closed form where one exists, and against the three checks where it does notOn this contract the closed form is Rs 10.450584/-, and a tool that does not approach it at high counts is wrong regardless of what its internal checks say. Where no closed form exists, run the level check, the unit check and the call less put check, and record all three in the review note along with the count.

The routine does not include reading the code. Reading somebody else's implementation line by line is slow, it needs the language, and it catches the mistakes somebody thought to look for rather than the ones that are there. Three runs of the tool with known answers test what was actually built rather than what somebody believes was built.

Auditing a handed-over lattice price. Three runs, no source code. 1 ASK WHAT STEP COUNT PRODUCED IT The one usually missing. If nobody recorded it, the figure is not reproducible and the audit stops here. no run needed 2 RERUN AT A MUCH HIGHER COUNT Twelve steps gives 10.285850 and two hundred gives 10.440591, so the movement is 0.154741. one run 3 COMPARE AGAINST SOMETHING KNOWN A closed form of 10.450584 where one exists, and otherwise the three internal checks at that count. two runs Reading the code is not on the list. Three runs test what was built rather than what is assumed to have been built.
The audit runs on three cheap executions rather than a code review, and the movement of Rs 0.154741/- between twelve steps and two hundred is the finding the first question makes possible.

Who runs this tool, and what do they write down?

Three kinds of reader end up in front of a lattice, and each writes down something different.

The person building a valuation writes down the count as a parameter of the run rather than a property of the contract. In a model document that means the count sits in the same list as the volatility and the rate, with a line explaining why that count and not a smaller one. A table of four counts and their signed gaps says everything a paragraph would try to, so the honest version of that line is almost always a convergence table rather than a sentence.

The person reviewing somebody else's valuation writes down the three checks and their results, along with the count, before writing anything about the price. A review note that records the count and the three checks lets the next reviewer skip straight to the interesting question, and a review note that records only the price makes the whole exercise start again. This is the same discipline a laboratory applies to an instrument reading: the reading is worthless without the instrument settings beside it.

The person on the other side, holding a valuation produced by somebody they cannot question, writes down what they cannot check. The list is shorter than people expect. Without the count the figure cannot be reproduced; without the tool it cannot be rerun; but the closed form on a contract that has one costs nothing to evaluate, and if the handed figure sits Rs 0.90/- away from it, that says something real about how the number was made without anybody ever seeing the code.

One last everyday version, and it is the one that sticks. When somebody says a room is four metres long, the useful follow-up is not whether they are trustworthy. The follow-up worth making is what they measured the room with. A tape gives one answer, a laser gives another, and pacing it out gives a third, and all three people measured the same room honestly. The step count is what the room was measured with, and a number quoted without it is a measurement with the instrument left out.

Why the lattice works and how the construction is set up are set out under the binomial model. The derivation of the closed form the tool is checked against is set out under the Black-Scholes partial differential equation. What the contract pays is set out under the payoff function and arrives here already settled. Why the answer sits above the target on odd counts and below it on even ones is argued elsewhere, and is used here as a fact about the readings rather than argued again. Early settlement and what the extra right is worth are set out under European and American options, and where the switch happens is set out under the exercise boundary. No jurisdiction qualification applies: the inputs, the arithmetic and the checks are properties of computation and hold wherever the computation is carried out.

References

SourceDocumentWhere
arXiv Quantitative FinancePreprint repository for lattice implementations, convergence behaviour and the numerical testing of pricing schemesarxiv.org
Social Science Research NetworkWorking paper repository for the same material, including implementation notes on step count selectionssrn.com
Hull, Shreve and WilmottStandard texts on derivative pricing, lattice methods and stochastic calculusPearson, Springer and Wiley
Cox, Ross and Rubinstein, 1979Option Pricing: A Simplified Approach, the lattice construction this tool implementsJournal of Financial Economics
Black, Scholes and Merton, 1973The closed form the lattice price is checked againstJournal of Political Economy and the Bell Journal of Economics and Management Science

The standard process, its four parameters and the contract used here are invented.
Educational material. Not advice on any investment, tax, budget or market position.

Calculator

Other calculators in Option Pricing Theory

Calculator

Monte Carlo European Option: Pricing by Slicing the Odds

Calculator

Black Scholes and the Greeks: Five Sensitivities, Five Units

← PreviousNext →
Fin Maverick Micro CoursesExplore Micro Courses
Fin Maverick BootcampsExplore Bootcamps
Fin Maverick

Finance education that ends in a job, not a certificate that gathers dust. Built for young India.

LEARN
CalculatorsFrameworksComparisonsCareersShowdown
RESOURCES
All CoursesMicro CoursesBootcampsInternships
COMPANY
AboutJob openingPartnership
LEGAL
Privacy PolicyTerms & ConditionsContent LicenseReturn & Refund Policy
© 2026 FIN MAVERICK / BUILT FOR INDIA.DO FINANCE, DO NOT JUST READ ABOUT IT.