IPO Valuation (pm-valuation)¶
Objective¶
Price an initial public offering the way an investment bank's equity capital markets desk would: value the company, build the book, choose the offer price, and then list the stock on EduMatcher and let the opening auction show whether the price was right.
You will practice:
- reading a valuation report from the verdict down to the cash flows
- telling a price set by fundamentals from a price set by demand
- using the what-if loop: change one answer, recalculate, compare
- reading a Monte Carlo distribution against the offer price
- finding what it takes to rescue a postponed IPO
- saving a scenario and handing it out as a fully specified case
- listing the priced IPO with
pm-new-symboland trading it
Background reading
Prerequisites¶
- Chapter 00 completed (EduMatcher installed). Exercises 1–6 need nothing
else:
pm-valuationruns without an exchange. - Exercises 7 and 8 list and trade the stock. They need chapters 01–03 (a running exchange with a market maker and two trader consoles) and the auctions chapter (Auctions), because the new stock opens in the opening auction.
- A terminal at least 120 columns wide: the interview is laid out for it, and printed reports are 100 columns wide.
Background¶
An IPO has two prices. Fair value is what the company's future cash flows are worth today. The offer price is what new investors pay. They differ on purpose: banks price an IPO at a discount to fair value (15% by default) so that the first day's trading ends above the offer price, which rewards the investors who took the risk of buying an unknown stock.
pm-valuation computes both:
flowchart LR
A[Customers, costs,\ncash flows] --> B[DCF value]
C[Comparable\ncompanies] --> D[Comparables value]
B --> E[Fair value\n70% DCF + 30% comps]
D --> E
E --> F[Price range\nfair value − discount]
F --> G[Book-building:\ndemand at every price]
G --> H[Offer price:\nhighest price covered 3×]
Coverage is demand divided by the shares offered. A 12× covered book means investors asked for twelve times what is for sale. Banks price at the highest price that is still covered at least 3×, so that most investors receive less than they asked for and buy the rest in the market on day one. That is what drives the first-day pop. In Sweden the top of the price range in the prospectus is the maximum price: the deal cannot price above it. In the United States it may price up to about 20% above the filed range.
Two classroom cases ship with the tool. Both are Swedish companies listing on Nasdaq Stockholm, and their amounts are in SEK:
| Case | Company | Sector |
|---|---|---|
tornfalk |
Tornfalk Security AB (TORN) | Business software |
halvard |
Halvard Robotics AB (HALV) | Hardware plus service |
The American framework
pm-valuation follows the Swedish IPO process by default. --market us
switches to the American one: an S-1 instead of a prospectus, US rates,
tax and bank fees, and pricing up to 20% above the range. A case file's
amounts are in its own market's currency, so --market us on a Swedish
case reads its kronor as dollars. See
Sweden or the United States.
Exercise 1: A First Report¶
Print the Tornfalk report, and export it to a file you can reread:
[output]
Tornfalk Security AB (TORN) — IPO valuation PROCEED
1. Verdict
PROCEED
Fair value per share 117.45
Price range 94.50–105.00
Offer price 105.00
Market capitalisation 16,600.0 m
Primary raise 4,000.0 m
Coverage 11.92×
Expected first-day pop 29.8%
The verdict is PROCEED at 105.00 SEK.
Answer from the report:
- The offer price is 105.00, the top of the range. Why exactly 105.00, and not higher? (Section 13, Pricing.)
- How much money did the company leave on the table, and who received it?
- Fair value blends the DCF value and the comparables value. How far apart are they, and why?
Answers
- 105.00 is the maximum price stated in the prospectus. Private investors applied on that promise, so the deal cannot price above it without a supplement that lets everyone withdraw. Even at 105.00 the book is 11.92× covered: demand would have supported more, and an American deal would have priced above the range.
- 1,193.1 m SEK, about 1.2 miljarder kronor: the expected first-day pop (29.8%) times the offer price times the 38.1 million shares sold. The new investors receive it, not the company.
- The DCF gives 92.09 and the comparables 176.62, almost twice as much. Listed software companies trade at 10 times next year's revenue, a multiple that Tornfalk's own forecast cash flows do not justify. The model weights the DCF 70% and the comparables 30%.
Exercise 2: Where the Value Comes From¶
Read sections 10 (DCF) and 11 (Bridge and fair value) in tornfalk.md.
- What share of the enterprise value is the terminal value?
-
Fair value is 70% DCF and 30% comparables. Start the interview, set the DCF weight to 100% and press F5:
Page 9, DCF weight: type
100. (A plain number in a percentage field is percentage points.)
Fair value is now 92.09, the DCF value.
What changes
The terminal value is 66.6% of the enterprise value (question 1). With 100% DCF, the range falls to 74.00–82.50 and the deal prices at 82.50, again the maximum price, on an 11.85× book. Investor demand did not change, so the book pushes the price to the top of the range again. The valuation method moved the range; demand chose the price inside it.
Exercise 3: The What-If Loop¶
Start the interview again, so the DCF weight is back to 70%, and press F5 to see the base report:
Then:
- Press
bto go back. Every answer is kept. - On page 9, set Institutional interest and Retail interest to
medium(Enter opens the pick-list) and Hype to2. - Press F5, then
cto compare with the previous run.
The comparison shows the three inputs you changed.
Which moved more: the offer price, or the first-day pop? Why?
Answer
The price does not move: it stays at the maximum price, 105.00, now on a 5.01× book instead of 11.92×. The pop falls from 29.8% to 16.9%, and the money left on the table from 1,193.1 m to 676.0 m SEK. With fewer excess orders, fewer unfilled investors buy on day one. Sentiment shows up in the aftermarket before it shows up in the price.
Exercise 4: How Sure Are We?¶
Run the Monte Carlo simulation (10,000 draws; a few seconds):
Read section 12 (Monte Carlo).
- What is the median fair value, and how does it compare with the deterministic base case?
- What is the probability that fair value is below the offer price?
Answers
- The median is 110.48 and the mean 112.70, both below the base case 117.45. The driver ranges are skewed, so the base case is not the expected case.
- 43.8%, close to a coin flip, even though the offer price is 11% below the base-case fair value. A hot book is a statement about demand, not about value. That is the question Exercise 7 puts to the market.
Exercise 5: A Postponed IPO¶
The verdict is POSTPONE.
- Why? Read the Verdict and section 13 (Pricing).
- Management's minimum market cap is derived from the last private round.
Start the interview
(
pm-valuation --case halvard --mode deterministic --level intermediate) and, on page 11, lower Minimum market cap step by step:2.6mdr,2.5mdr,2.4mdr,2.3mdr. Watch the preview after each one. What is the highest minimum that lists the stock, and on what kind of book?
Answers
- The last private round valued Halvard at 2.7 miljarder SEK post-money, and management will not list below that. The market cap after the IPO includes the 500 mkr raised, so the floor price is (2,700 mkr − 500 mkr) / 20 m pre-IPO shares = 110.00, which moves the range to 110.00–120.50. Its midpoint (115.25) is above fair value (112.68): the bankers need at least a 5% discount to sell the deal, and there is none left.
- 2.5 mdr lists the stock, but on a thin book (2.63×, below the 3× target). At 2.3 mdr or less the book is covered 3×:
| Minimum market cap | Result |
|---|---|
| 2.7 mdr (the last round) | POSTPONE |
| 2.6 mdr | POSTPONE: the discount is 2.2%, still under 5% |
| 2.5 mdr | PROCEED (THIN BOOK) at 100.00, 2.63× covered |
| 2.4 mdr | PROCEED (THIN BOOK) at 95.00, 2.98× covered |
| 2.3 mdr or less | PROCEED at 94.50, 3.01× covered, market cap 2,390 mkr |
Listing means accepting a down round: a public valuation of 2,390 m SEK against 2.7 miljarder in the last private round. Raising institutional interest does not help (try it): the floor binds before demand does.
Exercise 6: Save and Hand Out a Case¶
In the interview, press F9 and save to halvard-rescue.yaml. Then write a
fully specified version for another group:
pm-valuation --load halvard-rescue.yaml --no-tui --mode deterministic \
--save halvard-full.yaml --with-defaults
halvard-rescue.yaml holds only the
answers you typed; halvard-full.yaml holds every value, each commented with
its source (you, preset, derived, default).
Why does the short file stay correct if someone later changes a sector preset, while the full one does not?
Exercise 7: Let the Market Decide¶
List Tornfalk on your exchange and trade it.
-
Stop the exchange and list the priced IPO:
pm-opctl-cli stop pm-valuation --case tornfalk --no-tui --mode deterministic --list pm-opctl-cli start[output] Listed TORN in …/engine_config.yaml: IPO price 105.00, 158095238 shares outstanding seed quote MM01: 1000 @ 104.90 / 1000 @ 105.10 (DAY) Deployed to …/engine_config.json. Start the exchange to open trading.The seed-quote line appears when the deployed configuration has a market maker with seeded quotes (as in chapters 01–03). If you are still on one of the generated configurations of chapters 23–28 (
--no-mm-seed-quotes), the command printsno seed quote: the book opens emptyinstead, as in Exercise 8. Either way the stock opens in the auction. The exchange must be stopped (everypm-*process, not onlypm-engine) and the data directory must hold no saved state forTORN; a leftoverpm-engineanywhere on the machine makes--liststop withpm-engine is running (pid …). -
During the pre-open, each trader enters orders for TORN at the price they believe in: buyers who missed out in the book, and allocated investors ready to take a profit.
- Watch the opening auction set the first price (see Auctions).
TORN has an opening price.
Compare it with the offer price (105.00) and the report's expected first-day close (105.00 × 1.298 = 136.32). Was the offer price too low, as the pop heuristic says, or too high, as the Monte Carlo suggests in almost one draw out of two?
If --list refuses
The refusals are pm-new-symbol's: the deployed configuration is a bundled
example (--example …), which is never edited — deploy a copy, as in
Exercise 8; the exchange is still running, the
data directory holds saved state for TORN from an earlier run, or the
configuration has several market-maker gateways and one must be chosen for
the seed quote. See
Why it refused. For the
last one, run the command from the report's Next step section yourself,
adding --mm-gateway-id.
Exercise 8: No Market Maker — the Crowd Sets the Price¶
In Exercise 7 a market maker's seed quote (1000 @ 104.90 / 1000 @ 105.10) framed the opening around the offer price. A real IPO has no such anchor: the first price is whatever the orders in the auction say. List the same stock into a configuration without a market maker's quotes and see what the auction does with nothing but your classmates' orders.
--list refuses to edit a bundled example, so work on a copy (Chapter 00 says
where the examples live; with a container or pipx install they are inside the
package: replace docs/examples below by $EX, with
EX=$(python -c "from edumatcher.config_deploy import examples_root; print(examples_root().parent)")):
pm-opctl-cli stop
cp docs/examples/ref_data/s3-nominal-nomm-setup/engine_config.yaml classroom.yaml
pm-config-deploy classroom.yaml
pm-valuation --case tornfalk --no-tui --mode deterministic --list
[output]
Listed TORN in …/classroom.yaml: IPO price 105.00, 158095238 shares outstanding
no seed quote: the book opens empty
s3-nominal-nomm has sessions enabled (the opening auction needs them) and its
market maker has no seeded quotes, so TORN opens on an empty book. Start the
exchange, then from the operator console (OPS01) go to PRE_OPEN and on to
OPENING_AUCTION. Enter these three orders, all TIF=ATO:
[TRADER01]> NEW|SYM=TORN|SIDE=BUY|TYPE=LIMIT|QTY=1000|PRICE=125.00|TIF=ATO
[TRADER02]> NEW|SYM=TORN|SIDE=SELL|TYPE=LIMIT|QTY=600|PRICE=110.00|TIF=ATO
[TRADER02]> NEW|SYM=TORN|SIDE=SELL|TYPE=LIMIT|QTY=600|PRICE=120.00|TIF=ATO
Predict the opening price and the fills before moving on, using the
equilibrium rule from Auctions. Then open continuous trading
with SESSION|STATE=CONTINUOUS.
Answer
At 110.00 only 600 shares are offered against 1000 wanted, so 600 trade. At
120.00 and at 125.00 all 1000 buy shares can trade (1200 are offered, 200
too many). The maximum matched quantity, 1000, is first reached at 120.00,
and the engine keeps the lowest of tied prices, so TORN opens at 120.00:
TRADER01 is filled 1000 @120.0; TRADER02 sells 600 + 400 @120.0 and the
last 200 of its 120.00 offer expire unfilled, because it is an ATO order.
The book is empty again.
Compare the result with the offer price (105.00) and with Exercise 7. A first
price of 120.00 is 14% above the offer, which is the "pop" the report predicted
(29.8% expected), reached without any quote from the exchange. Change
TRADER01's bid to 115.00 and run the day again: which price do you predict
now, and does the stock open above or below the offer?
Checkpoint: TORN listed with no seed quote, opening price predicted as 120.00 before it printed, and you can say why the answer is 120.00 and not 125.00.
Summary¶
| Task | Command |
|---|---|
| Interview a classroom case | pm-valuation --case tornfalk |
| Show more fields | … --level intermediate (or advanced, expert), or F3 |
| Print a report | pm-valuation --case tornfalk --no-tui |
| Scenarios only, no Monte Carlo | … --mode deterministic |
| Export the report | … --export report.md |
| Print the report | … --pdf report.pdf (or p in the report) |
| Save answers / a full case | F9, or --save FILE [--with-defaults] |
| Start from a saved file | pm-valuation --load FILE |
| Price and list | pm-valuation --load FILE --no-tui --list |
| In the report | b back, c compare, e export, p PDF, Tab next section |
Reflection¶
In Exercise 1 the book was 12× covered at the maximum price, and in Exercise 4 the offer price was above fair value in almost half the draws. Both are true of the same deal. Who is right, the book or the model, and what does your opening auction in Exercise 7 say?
See Also¶
- IPO Valuation — Operator's Guide — every key, field format, report section and option
- Listing a New Symbol — what
--listdoes to the configuration, and the IPO-day checklist - Auctions & Scheduling — how the opening price is found
- Market Index — the index inclusion the report predicts