170 net-net stocks in Vietnam, and the trap inside the cash column
Graham wrote the net-net formula in 1934 assuming the reader would go and read the accounts. That assumption usually gets dropped, because the formula runs by machine in a few minutes and the reading does not.
Figures below are as of the 28 October 2026 close.
The formula, and three places it goes wrong
Graham's net-net compares market capitalisation against net current asset value (NCAV):
NCAV = current assets − all liabilities − non-controlling interests
A market value below NCAV means the market is selling you the net working capital at a discount — and throwing in the plant, the machinery and the brand for nothing. Graham's buying threshold is one notch stricter: the price has to be below two-thirds of NCAV.
Three details decide whether the list comes out long or short, and all three are commonly got wrong:
Subtract all liabilities, long-term debt included. Many screens subtract only current liabilities, which produces a much longer list and the wrong definition.
Subtract non-controlling interests — a subsidiary's working capital does not belong to the parent's shareholders at 100%. Leave that out and the list runs to 180 tickers; take it out and 170 remain.
Compute market capitalisation yourself instead of taking it from a data vendor, because among small caps the vendor's number is wrong by enough to create or erase an opportunity outright.
Graham offers two stricter measures beyond NCAV. NNWC haircuts current assets at the ratios he proposed: cash and short-term investments in full, receivables at 75%, inventory at 50%. And net cash, the harshest, drops receivables and inventory entirely, keeps cash plus short-term financial investments, and subtracts all liabilities.
170 tickers
The screen covers every ticker on HOSE, HNX and UPCOM reporting on the non-financial template. The latest period is 30 September 2026 for 589 tickers that have filed Q3, 30 June 2026 for the rest. Prices are 28 October 2026, after both filing dates.
| Measure | Tickers |
|---|---|
| Non-financial companies with a latest quarterly filing | 1,067 |
| …with market capitalisation matched | 1,059 |
| Market value < NCAV | 170 |
| …of which below two-thirds of NCAV, Graham's buying threshold | 94 |
| …of which market value < NNWC | 65 |
| …of which market value < net cash | 27 |
The split across exchanges is fairly even: HNX 61, UPCOM 55, HOSE 54. Combined market value of the 170 is 59,838 billion đồng against combined NCAV of 92,460 billion.
Warning flags on those same 170:
| Flag | Tickers |
|---|---|
| Average turnover below 100 million đồng per session | 108 |
| Q3 2026 accounts not yet filed | 60 |
| NCAV mostly receivables, above 60% of current assets | 42 |
| Loss-making over the last four quarters | 32 |
| NCAV mostly inventory, above 60% of current assets | 31 |
| No trading, or fewer than 20 of the last 30 sessions | 22 |
One ticker can carry several flags. Those 108 names trading under 100 million đồng a session mean that for anything above a few billion in capital, two-thirds of the list cannot be bought at the prices in the table. The 22 cannot be bought at any price.
So the number 170 says there are 170 balance sheets that look like net-nets, not that Vietnam holds 170 Graham opportunities. Almost the whole gap between those two statements sits in the quality of the current assets.
The two cheapest are not the two best
Sorted by price to NCAV, the list opens with MPT at 0.07 and KSQ at 0.09. The market is pricing these two at 7% and 9% of their own net working capital. If the number were the only thing to look at, these would be the two best opportunities on the exchange.
Open up the receivables line and it reads differently. 82% of MPT's receivables sit under "other receivables". 97% of KSQ's sit under "prepayments to suppliers". DVG, the third cheapest, has 90% on that same line.
Among the 21 cheapest names — below one-third of NCAV — 13 have an NCAV made up mostly of receivables. And in those 13, most of it is not trade receivables but those two lines, "prepayments to suppliers" and "other receivables". In Vietnam these two lines are often a conduit for money moving out to related parties rather than commercial working capital.
QBS is the extreme case. Its gross trade receivables exceed net receivables by 237%, because the company has already booked a 431 billion đồng provision against them. Most of QBS's NCAV is a receivable the company itself has conceded it may not collect. A machine screen cannot read that provision line, so what it prints is a list to go and read, not a list to buy.
The strictest tier: 27 tickers below net cash
This test throws out receivables and inventory altogether. Keep cash plus short-term financial investments, subtract all liabilities, then compare against market value. A market value below net cash means buying the whole company at market and still getting back more than you paid, counting only the most liquid assets on the balance sheet.
In billions of đồng.
| Ticker | Exchange | Market value | Net cash | Price/net cash | P/NCAV | 4-quarter profit |
|---|---|---|---|---|---|---|
| GKM | HNX | 35 | 147 | 0.23 | 0.18 | -42 |
| TVC | HNX | 518 | 1,294 | 0.40 | 0.38 | -7 |
| HEV | HNX | 28 | 58 | 0.47 | 0.43 | -0 |
| TTT | HNX | 138 | 264 | 0.52 | 0.43 | 31 |
| IRC | UPCOM | 68 | 129 | 0.53 | 0.45 | 48 |
| TTC | HNX | 61 | 114 | 0.53 | 0.49 | 24 |
| VCA | HOSE | 105 | 188 | 0.56 | 0.50 | 22 |
| AAM | HOSE | 82 | 146 | 0.56 | 0.48 | 5 |
| KKC | HNX | 31 | 52 | 0.59 | 0.58 | -0 |
| ST8 | HOSE | 53 | 88 | 0.61 | 0.31 | -28 |
| PV2 | HNX | 66 | 107 | 0.62 | 0.60 | -19 |
| TCT | HOSE | 210 | 337 | 0.62 | 0.58 | 17 |
| STD | UPCOM | 112 | 164 | 0.68 | 0.58 | 2 |
| MPT | UPCOM | 10 | 15 | 0.69 | 0.07 | -1 |
| PTC | HOSE | 170 | 240 | 0.71 | 0.69 | 17 |
| CIA | HNX | 166 | 229 | 0.72 | 0.60 | 20 |
| VE1 | HNX | 16 | 21 | 0.76 | 0.57 | 4 |
| VNB | UPCOM | 964 | 1,223 | 0.79 | 0.78 | 87 |
| PHH | UPCOM | 78 | 97 | 0.81 | 0.39 | -29 |
| HTV | HOSE | 167 | 204 | 0.82 | 0.54 | 23 |
| NDN | HNX | 559 | 650 | 0.86 | 0.65 | 42 |
| MHC | HOSE | 319 | 370 | 0.86 | 0.75 | -5 |
| VLA | HNX | 23 | 27 | 0.86 | 0.54 | 1 |
| GMH | HOSE | 102 | 116 | 0.89 | 0.63 | 12 |
| VIP | HOSE | 692 | 777 | 0.89 | 0.67 | 68 |
| VFR | UPCOM | 135 | 150 | 0.90 | 0.67 | 16 |
| GTA | HOSE | 76 | 78 | 0.97 | 0.56 | 8 |
This list looks cleaner than the 170 above, because there are no receivables or inventory left to argue about. But the word "cash" here adds up two lines of the balance sheet, and the second one is often not cash.
Three companies standing on line item 11200
The line "short-term financial investments" — item 11200 on the balance sheet — looks like bank deposits at a glance. I pulled the original filings from HNX and HOSE and read the notes for the three largest names in the group of 27. The three notes record three different things.
VIP, VIPCO Petroleum Transport. Consolidated Q3 2026 accounts filed 23 October 2026, note VI item 02, page 21. All 861,523,780,821 đồng on that line is term bank deposits, with no trading securities at all. Add 94,177,727,855 đồng of cash and equivalents for 955.7 billion; subtract 178.7 billion of liabilities and net cash is 777.0 billion, against a market value of 691.6 billion. Buying all of VIP at market gets you back more than you paid out of the bank deposits alone — the oil tanker fleet comes free. This is the cleanest case among all 170.
VNB, Vietnam Book Corporation. Q3 2026 accounts filed 20 October 2026, note V item 2.1, page 17. Of 1,232,571,141,089 đồng, term bank deposits are only 163,925,442,458 đồng. The remaining 1,068,645,698,631 đồng is a loan book. So 86.7% of what VNB calls "short-term financial investments" is lending.
The notes show a long-term loan of 1,008 billion đồng at 1 January 2026 falling to zero, meaning it was reclassified as short-term, with one line of explanation: "This is lending to a number of enterprises, with a term of more than 1 year at an interest rate of 12% per year." The quarterly filing names neither the borrowers nor any collateral. Meanwhile the capital table on page 21 shows Vingroup holding 443,642,740,000 đồng of the 679,099,600,000 đồng charter capital, or 65.33%, with state shareholders at 10%. Q3 sales at this book company were 10.3 billion đồng — against 33.6 billion of interest earned on deposits and lending.
NDN, Da Nang Housing Investment and Development. Consolidated Q3 2026 accounts filed 23 October 2026, note V items 2a and 2b, pages 24 and 25. Trading securities at 667,908,249,385 đồng cost, with a 50,834,936,857 đồng impairment provision booked; held-to-maturity investments of 156,514,126,030 đồng. The sum matches the 773.6 billion on the balance sheet exactly. So 79.8% of NDN's "cash" is a portfolio of listed equities, among them HPG, VPB, GEX and Vinhomes.
NDN's NCAV is real, but it is not a safe. It is stock market beta: NDN and the names in that portfolio will fall together. Marked to fair value at the reporting date, NCAV is 100.2 billion higher than book, which takes price to NCAV from 0.65 to roughly 0.55. But that is an unrealised gain — not cash.
Three companies, three substances: real deposits, a loan book with no named borrower, and an equity portfolio. On the balance sheet all three are item 11200, and no data aggregator tells them apart; only the notes do.
I have not read the original filings for the other 24 in the table of 27. Their figures are cross-checked between sources, but their substance is not, so I am not calling any of them net cash.
Market capitalisation should not be taken on trust either
Comparing TradingView's market value against VNDirect's across 1,265 tickers, the two differ by more than 2% on 237 of them. Computing it directly, shares outstanding times the close of the last session with matched orders: TradingView carries TAR at 478 billion, while 78,319,777 shares at 2,200 đồng comes to 172 billion. TCD is the same story, 635 billion against 302 billion. The cause is that TradingView holds stale prices on penny names. Use their numbers and TAR shows a price to NCAV of 0.96 instead of 0.35, and TCD drops off the list.
The error runs the other way too. The first version of this screen took share counts from VNDirect's listed-shares field as of the reporting date, and that field lags the 2026 bonus share issues. A three-way reconciliation exposed it: wrong on 17 of the 170, three of them badly. TYA's true share count is 30,680,600 rather than 6,134,773, which moves price to NCAV from 0.18 to 0.89. V21 goes from 0.25 to 0.69, HTN from 0.65 to 0.97. Three names that looked like clear opportunities all sit near the threshold once corrected.
Six tickers, HCT, HNR, ITA, SJF, TNA and TTB, have no price at either independent price source, yet the data vendor still returns a market value stamped 28 October 2026 for them. That is a carried-forward price on a suspended stock. The market value is meaningless, and their price to NCAV has to be read as meaningless rather than as cheap.
A market value wrong by 2% goes unnoticed, but wrong by 150% it creates or erases a net-net. And vendor error is largest exactly among the small, thinly traded names — where net-nets live.
What a net-net screen cannot answer
The screen runs on tickers still listed as of 29 October 2026. Delisted names — the very group net-nets tend to end up in — are not in the sample. Every statistic here is therefore an upper bound, not an unbiased estimate.
NCAV subtracts the liabilities on the balance sheet. Guarantees for associates, repurchase commitments and business co-operation contracts booked under "other payables" are all outside the calculation. For the construction and property names on the list this is a large risk and an unquantified one.
No banks, brokers or insurers. Their reporting template is different and the concept of "current assets" does not exist in it.
And do not trust the liquidity figures to the last million. The two independent price sources agree closely on price: 177 of 183 tickers differ by less than 1%. But volumes do not agree on thin names. VFR is an example: one source reports 30 of 30 sessions with matched orders and 12 million đồng a session, the other 16 sessions and 6 million. The liquidity figures in the table are an upper bound; reality may be half as thick.
How to use the list
Drop the 22 untradeable names immediately. If you cannot buy it, it is not an opportunity, whatever the 0.07 says.
Drop the 108 under 100 million đồng a session if your capital is above a billion. Work out first how many sessions it takes to get in and back out, then ask whether the discount still covers the market impact at both ends.
For what remains, open the notes before you open the spreadsheet. Four questions, in this order:
Is line 11200, "short-term financial investments", deposits, equities or lending? If lending, to whom?
Are the receivables owed by customers, or are they "prepayments to suppliers" and "other receivables"? Who is on the receiving end?
Is the inventory sellable goods, or work in progress on a property project?
Are there guarantees, commitments or business co-operation contracts off the balance sheet?
Then the question Graham always asked: why is it cheap? 32 of the 170 lost money over the last four quarters. For those, NCAV is being burned every quarter, and today's discount may not survive the year. Graham said this plainly from the start: the company has to be profitable, because losses eat into the very cushion you are buying.
The net-net arithmetic takes minutes; the three sets of notes in this piece took an afternoon. They produced one clean name, one that needs a follow-up question about who the borrowers are, and one that has to be valued a different way altogether — and before the filings were opened, all three looked the same on the balance sheet.